在實(shí)際項(xiàng)目中,遇到有客戶機(jī)房斷電導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)丟失的問題,又因?yàn)閭浞萑轂?zāi)不及時,導(dǎo)致部分?jǐn)?shù)據(jù)恢復(fù)不了。使用Linux的自動定時任務(wù)命令crontab對數(shù)據(jù)庫進(jìn)行定時備份可以減少這種情況發(fā)生。但這樣還不夠安全,萬一本地磁盤壞了,造成的損失將無法彌補(bǔ)。
1、創(chuàng)建腳本備份數(shù)據(jù)庫
新建備份文件并賦予可以執(zhí)行的權(quán)限
mkdir -p /home/mysql_backup/
touch /home/mysql_backup/mysql_backup.sh
chmod 551 /home/mysql_backup/mysql_backup.sh
編輯/home/mysql_backup/mysql_backup.sh
vim /home/mysql_backup/mysql_backup.sh
# Name:mysql_backup.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#備份地址
backupdir=/home/mysql_backup
#備份文件后綴時間
time=_` date +%Y_%m_%d_%H_%M_%S `
#需要備份的數(shù)據(jù)庫名稱
db_name=test
#mysql 用戶名
#db_user=
#mysql 密碼
#db_pass=
#mysqldump命令使用絕對路徑
mysqldump --all-databases -u $db_user -p$db_pass | gzip > $backupdir/$time.sql.gz
#刪除7天之前的備份文件
find $backupdir -name "*.sql.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
2.定時執(zhí)行腳本
編輯crontab
vim /etc/crontab
在最后一行加入
* */1 * * * root /home/mysql_backup/mysql_backup.sh
重啟crontab
service crond restart
3.備份數(shù)據(jù)到遠(yuǎn)程服務(wù)器
? ? ?遠(yuǎn)程手動備份數(shù)據(jù)費(fèi)時費(fèi)力且不及時。最好的方法就是通過腳本實(shí)現(xiàn)遠(yuǎn)程自動互備。但遠(yuǎn)程無論是通過SSH登陸,還是通過scp拷貝文件都需要輸入密碼。為了克服這個問題,首先需要實(shí)現(xiàn)不需要密碼的SSH登陸,這樣就可以使用 rsync,scp,rexec等命令來做的遠(yuǎn)程備份了。
前提:本地服務(wù)器:A, 遠(yuǎn)程服務(wù)器:B
3.1 生成密鑰對
假設(shè)A,B兩服務(wù)器,現(xiàn)在需要在A機(jī)上用root登陸B(tài)機(jī),而不需要輸入密碼。那我們可按照下面的步驟來做:
3.1.1 在本地服務(wù)器A上生成rsa證書
在本地服務(wù)器A上生成rsa證書,運(yùn)行命令:
ssh-keygen -t rsa
?cp生成rsa公鑰證書到遠(yuǎn)程服務(wù)器B
使用scp命令進(jìn)行遠(yuǎn)程復(fù)制,將A機(jī)生成的id_rsa.pub.A拷貝到遠(yuǎn)程服務(wù)器B的/root/.ssh目錄下
scp /root/.ssh/id_rsa.pub.A root@遠(yuǎn)程服務(wù)器ip:/root/.ssh/
這里使用scp命令需要輸入密碼,當(dāng)我們把下面的第三步執(zhí)行完畢之后,以后本地服務(wù)器A使用scp命令復(fù)制文件到遠(yuǎn)程服務(wù)器B的話,就不需要再次輸入密碼。
3.2、密鑰配對
3.2.1?創(chuàng)建authorized_keys文件
當(dāng)上面將服務(wù)器A上的id_rsa.pub.A 文件copy到了服務(wù)器B后,現(xiàn)在我們在 B 的/root/.ssh下創(chuàng)建authorized_keys文件,使用如下命令
touch authorized_keys
3.2.2 將id_rsa.pub.A文件內(nèi)容追加到authorized_keys 文件中
通過 cat 命令 把id_rsa.pub.A 追寫到 authorized_keys 文件中,命令依次如下:
cat id_rsa.pub.A >> authorized_keys
3.3 修改authorized_keys文件的權(quán)限
執(zhí)行如下命令,修改authorized_keys文件的權(quán)限
chmod 400 authorized_keys
authorized_keys文件的權(quán)限很重要,如果設(shè)置為777,那么登錄的時候,還是需要提供密碼的。
3.4 測試
測試服務(wù)器A使用scp命令復(fù)制文件到服務(wù)器B是否還需要密碼
在服務(wù)A上,再次使用剛才的命令,發(fā)現(xiàn)已經(jīng)可以不需要輸入密碼。
最后修改mysql_backup.sh的腳本,達(dá)到自動備份數(shù)據(jù)庫到遠(yuǎn)程服務(wù)器。
查看:最終腳本