一玻粪、mysql提供了一個mysqldump的工具可以方便的導(dǎo)出導(dǎo)入數(shù)據(jù)庫信息隅津;
二诬垂、使用命令行shell測試執(zhí)行mysqldump,理解必備的參數(shù)伦仍,查看生成的sql備份文件是否符合需求结窘;
/usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
注解:
1、執(zhí)行 /usr/bin/mysqldump充蓝;
2隧枫、--opt是quick谓苟,add-drop-table官脓,add-locks,extended-insert涝焙,lock-tables幾個參數(shù)的合稱卑笨,一般都要使用,具體意思自行搜索仑撞;
3赤兴、-u數(shù)據(jù)庫用戶名 -p數(shù)據(jù)庫用戶密碼 -h數(shù)據(jù)庫地址 數(shù)據(jù)庫名 > 導(dǎo)出的文件路徑;
4隧哮、date +%F
是shell中生成當(dāng)前日期桶良,格式如2015-11-05,所以成功導(dǎo)出時生成的文件名為 db_2015-11-05.sql沮翔;
5陨帆、下載生成的 sql文件 ,用文本編輯器打開檢查鉴竭,本地導(dǎo)入測試數(shù)據(jù)庫歧譬,看是否有問題;
三搏存、整理編寫比較靈活的shell腳本瑰步,方便重用;
#!/bin/sh
# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher"
# Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/mnt/mysqlBackup" #the backup file directory
DATE=`date +%F`
# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS
-h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql
還原數(shù)據(jù)庫
用mysql-front導(dǎo)入前一天的 *.sql 文件即可恢復(fù)數(shù)據(jù)
保存到文件或上傳到 /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh
四璧眠、測試Shell腳本
1缩焦、進(jìn)入到該腳本文件目錄 chmod +x sqlAutoBak.sh 添加執(zhí)行權(quán)限,否則會報錯 Permission denied
2责静、./sqlAutoBak.sh 袁滥,如果是在windows編寫上傳的文件可能會報錯
/bin/sh^M: bad interpreter: No such file or directory
這是不同系統(tǒng)編碼格式引起的:在 windows系統(tǒng)中編輯的 .sh文件可能有不可見字符,所以在 Linux系統(tǒng)下執(zhí)行會報以上異常信息灾螃√夥可以在Windows上使用Notepad++轉(zhuǎn)換成Unix格式(菜單中選擇:編輯>檔案格式轉(zhuǎn)換>轉(zhuǎn)換成UNIX)
3、修改后上傳繼續(xù)執(zhí)行 ./sqlAutoBak.sh 腰鬼,沒有報錯嵌赠。再查看導(dǎo)出的sql文件塑荒。
五、壓縮mysql的備份數(shù)據(jù)
1姜挺、查看導(dǎo)出來的sql文件齿税,發(fā)現(xiàn)其文件大小非常大,mysqldump也提供了生成gzip壓縮文件的參數(shù)設(shè)置
2炊豪、sqlAutoBak.sh修改為如下
#!/bin/sh
# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher"
# Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/mnt/mysqlBackup" #the backup file directory
DATE=`date +%F`
# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
# $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME | gzip > $BCK_DIR/db_$DATE.sql.zip
# 還原數(shù)據(jù)庫
# 把 *.sql.zip 使用gunzip 或 本地的解壓軟件 解壓為 *.sql 文件
# 用mysql-front導(dǎo)入前一天的 *.sql 文件即可恢復(fù)數(shù)據(jù)
3凌箕、修改后上傳繼續(xù)執(zhí)行 ./sqlAutoBak.sh ,沒有報錯词渤。如果用文本編輯器查看導(dǎo)出的 *.sql.gz文件牵舱,應(yīng)該是一堆亂碼。
4掖肋、下載到本地使用解壓軟件打開仆葡,解壓就能看到里面真正的 *.sql 文件了。
六志笼、設(shè)置linux定時任務(wù)執(zhí)行該腳本沿盅;
1、編輯定時任務(wù)列表
crontab -e
2纫溃、插入下面這一行腰涧,因?yàn)橥ǔ碚f5點(diǎn)鐘網(wǎng)站的訪問量最低。
00 05 * * * /bin/sh /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh #每天早上 5:00am 執(zhí)行
3紊浩、查看任務(wù)是否創(chuàng)建成功
crontab -l
七窖铡、第二天檢查自動生成的sql文件是否符合要求
如果生成的文件和解壓出來查看沒有問題,那么這個自動定時備份數(shù)據(jù)庫的腳本就算是完成了坊谁。因?yàn)樯傻奈募嗔藭加靡欢ǖ目臻g费彼,所以建議要定期(比如一個月)清理一下文件。
$口芍、補(bǔ)充
1箍铲、如果該數(shù)據(jù)庫的用戶沒有分配 鎖表 的權(quán)限,則備份會報錯 when using LOCK TABLES 鬓椭。那是因?yàn)閙ysqldump命令默認(rèn)在導(dǎo)出時是要鎖定表的颠猴,所以解決方式有兩個。一個是給該用戶開放 鎖表 的權(quán)限小染;另一個是在命令中加上 --skip-lock-tables 這個參數(shù)翘瓮。即是:
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME --skip-lock-tables| gzip > $BCK_DIR/db_$DATE.sql.gz