MySQL 备份和恢复策略(二)
備份策略三、使用mysqldump備份數據庫
mysqldump?是采用SQL級別的備份機制,它將數據表導成?SQL?腳本文件,在不同的?MySQL?版本之間升級時相對比較合適,這也是最常用的備份方法。mysqldump?比直接拷貝要慢些。關于mysqldump的更詳細解釋見最后的附錄。
對于中等級別業務量的系統來說,備份策略可以這么定:第一次完全備份,每天一次增量備份,每周再做一次完全備份,如此一直重復。而對于重要的且繁忙的系統來說,則可能需要每天一次全量備份,每小時一次增量備份,甚至更頻繁。為了不影響線上業務,實現在線備份,并且能增量備份,最好的辦法就是采用主從復制機制(replication),在?slave?機器上做備份。
備份策略布置:
?
(1)、創建備份目錄
Shell>?mkdir?/tmp/mysqlbackup
Shell>?mkdir?/tmp/mysqlbackup/daily
(2)、啟用二進制日志
采用?binlog?的方法相對來說更靈活,省心省力,而且還可以支持增量備份。
啟用?binlog?時必須要重啟?mysqld。首先,關閉?mysqld,打開?/etc/my.cnf,加入以下幾行:
[mysqld]
log-bin
然后啟動?mysqld?就可以了。運行過程中會產生?HOSTNAME-bin.000001?以及?HOSTNAME-bin.index,前面的文件是?mysqld?記錄所有對數據的更新操作,后面的文件則是所有?binlog?的索引,都不能輕易刪除。關于?binlog?的更詳細信息請查看手冊。
(3)、配置SSH密鑰登錄,用于將MySQL備份傳送到備份服務器(如果備份服務器為Windows,請跳過此部)。
1)、在MySQL所在服務器(192.168.0.20)生成SSH密鑰
[root@lab?~]#?ssh-keygen?-t?rsa
Generating?public/private?rsa?key?pair.
Enter?file?in?which?to?save?the?key?(/root/.ssh/id_rsa):??//直接回車
Enter?passphrase?(empty?for?no?passphrase):?????????//直接回車,不使用密碼
Enter?same?passphrase?again:?????????????????????//直接回車,不使用密碼
Your?identification?has?been?saved?in?/root/.ssh/id_rsa.
Your?public?key?has?been?saved?in?/root/.ssh/id_rsa.pub.
The?key?fingerprint?is:
c2:96:9f:2d:5a:8e:08:42:43:35:2f:85:5e:72:f8:1c?root@lab
?
2)、在備份服務器(192.168.0.200)上創建目錄,修改權限,并傳送公鑰。
[root@lab?~]#?ssh?192.168.0.200?”mkdir?.ssh;chmod?0700?.ssh”
The?authenticity?of?host?’192.168.0.200?(192.168.0.200)’?can’t?be?established.
RSA?key?fingerprint?is?37:57:55:c1:32:f1:dd:bb:1b:8a:13:6f:89:fb:b8:9d.
Are?you?sure?you?want?to?continue?connecting?(yes/no)??yes
Warning:?Permanently?added?’192.168.0.200′?(RSA)?to?the?list?of?known?hosts.
root@192.168.0.200’s?password:?????//輸入備份服務器的root密碼
[root@lab?~]#?scp?.ssh/id_rsa.pub?192.168.0.200:.ssh/authorized_keys2
root@192.168.0.200’s?password:?
id_rsa.pub?????????????????????????????????????????????100%??218?????0.2KB/s???00:00????
3)、測試SSH登錄
[root@lab?~]#?ssh?192.168.0.200???????//測試SSH登錄
Last?login:?Fri?Nov?16?10:34:02?2007?from?192.168.0.20
[root@lib?~]#?
?
(4)、設置crontab任務,每天執行備份腳本
shell>?crontab?-e
#每個星期日凌晨3:00執行完全備份腳本
0?3?*?*?0?/root/MySQLBackup/mysqlFullBackup.sh?>/dev/null?2>&1
#周一到周六凌晨3:00做增量備份
0?3?*?*?1-6?/root/MySQLBackup/mysqlDailyBackup.sh?>/dev/null?2>&1
?
mysqlFullBackup.sh注釋:
#!/bin/sh
# Name:mysqlFullBackup.sh
# PS:MySQL DataBase Full Backup.
# Write by:i.Stone
# Last Modify:2007-11-17
#
# Use mysqldump –help get more detail.
#
# 定義變量,請根據具體情況修改
# 定義腳本目錄
scriptsDir=`pwd`
# 定義數據庫目錄
mysqlDir=/usr/local/mysql
# 定義用于備份數據庫的用戶名和密碼
user=root
userPWD=111111
# 定義備份目錄
dataBackupDir=/tmp/mysqlbackup
# 定義郵件正文文件
eMailFile=$dataBackupDir/email.txt
# 定義郵件地址
eMail=alter@somode.com
# 定義備份日志文件
logFile=$dataBackupDir/mysqlbackup.log
DATE=`date -I`
echo “” > $eMailFile
echo $(date +”%y-%m-%d %H:%M:%S”) >> $eMailFile
cd $dataBackupDir
# 定義備份文件名
dumpFile=mysql_$DATE.sql
GZDumpFile=mysql_$DATE.sql.tar.gz
# 使用mysqldump備份數據庫,請根據具體情況設置參數
$mysqlDir/bin/mysqldump -u$user -p$userPWD \
–opt –default-character-set=utf8 –extended-insert=false \
–triggers -R –hex-blob –all-databases \
–flush-logs –delete-master-logs \
–delete-master-logs \
-x > $dumpFile
# 壓縮備份文件
if [[ $? == 0 ]]; then
? tar czf $GZDumpFile $dumpFile >> $eMailFile 2>&1
? echo “BackupFileName:$GZDumpFile” >> $eMailFile
? echo “DataBase Backup Success!” >> $eMailFile
? rm -f $dumpFile
# Delete daily backup files.
? cd $dataBackupDir/daily
? rm -f *
# Delete old backup files(mtime>2).
? $scriptsDir/rmBackup.sh
# 如果不需要將備份傳送到備份服務器或備份服務器為Windows,請將標綠的行注釋掉
# Move Backup Files To Backup Server.
#適合Linux(MySQL服務器)到Linux(備份服務器)
? $scriptsDir/rsyncBackup.sh
? if (( !$? )); then
??? echo “Move Backup Files To Backup Server Success!” >> $eMailFile
??? else
??? echo “Move Backup Files To Backup Server Fail!” >> $eMailFile
? fi
else
? echo “DataBase Backup Fail!” >> $emailFile
fi
# 寫日志文件
echo “——————————————————–” >> $logFile
cat $eMailFile >> $logFile
# 發送郵件通知
cat $eMailFile | mail -s “MySQL Backup” $eMail
?
本文轉自:http://blog.thematice.com? 作者:稀飯的國度
轉載于:https://www.cnblogs.com/lvsong/archive/2010/07/30/1788899.html
總結
以上是生活随笔為你收集整理的MySQL 备份和恢复策略(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git日常操作
- 下一篇: WebApi服务监控 log4net记录