需求:1.每個小時全量備份一次數(shù)據(jù)庫。
2.數(shù)據(jù)庫服務(wù)器只保留一天的備份文件(保留24份備份.sql)
3.每天凌晨3點把最新備份文件上傳到其他服務(wù)器。
上面的需求分二部走:
第一步:每小時備份一次并刪除24小時前文件。
在linux?h?輸入:crontab?-e
內(nèi)容:1?*?*?*?*?/data/mysql_backup_script/mysql_backup.sh
mysql_backup.sh文件內(nèi)容: #?File:?/data/mysql_backup_script/mysql_backup.sh?? #?Database?info?? DB_NAME="mydb"?? #?Others?vars?? #?whereis?mysqldump?? #?IS?`?but?not?'?? BIN_DIR="/usr/local/mysql/bin"?? BCK_DIR="/var/mysql_dump/data"?? DATE=`date?+%Y%m%d_%H`?? #?TODO?? mkdir?-p?$BCK_DIR? rm?-f?$BCK_DIR/$DB_NAME.dump_$DATE.sql.gz? $BIN_DIR/mysqldump???$DB_NAME?|?gzip??>?$BCK_DIR/$DB_NAME.dump_$DATE.sql.gz #Delete?the?previous?day OLD_DATE=`date?-d?-24hour?+%Y%m%d_%H` rm?-f?$BCK_DIR/$DB_NAME.dump_$OLD_DATE.sql.gz
你可能會問題怎么不用輸入mysql的用戶名密碼呢???
是這樣的,mysql5.5以后為了提高安全性不能將密碼輸入到腳本文件中。否則執(zhí)行腳本時會報錯。所以我們可以設(shè)置mysql的配置文件。dump時指定用戶名和密碼:
my.cnf:
[mysqldump] quick user=root password=root
第二部:每天凌晨3點將最新的備份文件上傳到其他服務(wù)器:
在linux輸入:
crontab?-e
內(nèi)容:
3?3?*?*?*?/data/mysql_backup_script/scp_backup.sh
scp_backup.sh文件內(nèi)容:
#!/bin/sh DATE=`date?+%Y%m%d_%H` DB_NAME="mydb"?? BCK_DIR="/var/mysql_dump/data"???? BACK_SERVER="root@192.168.0.101" BACK_SERVER_DIR="/var/mysql_dump/" BACK_SERVER_PORT="22" scp?-P?$BACK_SERVER_PORT??$BCK_DIR/$DB_NAME.dump_$DATE.sql.gz??$BACK_SERVER:$BACK_SERVER_DIR
采用的是Linux的scp命令來完成的。
細心的你可能又發(fā)現(xiàn)怎么沒讓輸入遠程服務(wù)器的密碼就能把文件拷貝過去呢。
這里說明下:用的是ssh免密。關(guān)于ssh免密設(shè)置參考:
http://blog.csdn.net/wind520/article/details/38421359