Percona Xtrabackup快速備份MySQL
老規矩,開場白,剛開始用mysqldump,備份100G+的數據庫,再加上服務器繁忙,備份速度像蝸牛似的,于是尋找更高效的備份方法。網上都說用xtrabackup比較適合備份大的數據庫,而且備份效率也高,就嘗試使用一次,結果明顯感覺比mysqldump 備份與恢復速度就是快不少,那以后就用它了。大禮拜日的在家也沒事,結合生產環境,寫了這篇文檔,剛接觸的朋友,可以參考下,不多說,入正題!
1、初次備份前準備工作
1.1 了解備份方式
- 熱備份:讀寫不受影響(mysqldump-->innodb)
- 溫備份:僅可以執行讀操作(mysqldump-->myisam)
- 冷備份:離線備份,讀寫都不可用
- 邏輯備份:將數據導出文本文件中(mysqldump)
- 物理備份:將數據文件拷貝(xtrabackup、mysqlhotcopy)
- 完整備份:備份所有數據
- 增量備份:僅備份上次完整備份或增量備份以來變化的數據
- 差異備份:僅備份上次完整備份以來變化的數據 </ul>
1.2 創建備份用戶
mysql> grant reload,lock tables,replication client on *.* to 'bak'@'localhost' identified by 'bak2015'; mysql> flush privileges;
1.3 安裝方式
CentOS:
# rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpmyum install percona-xtrabackup</pre>
xtrabackup2.2不支持MySQL5.1的Innodb引擎,如需要可安裝2.0版本。
Ubuntu:
# sudo apt-get install xtrabackup14.04默認有這個包,14.04之前版本如果沒有在這個地址下載對應的版本。
1.4 了解常用參數
- --user= #指定數據庫備份用戶
- --password= #指定數據庫備份用戶密碼
- --port= #指定數據庫端口
- --host= #指定備份主機
- --socket= #指定socket文件路徑
- --databases= #備份指定數據庫,多個空格隔開,如--databases="dbname1 dbname2",不加備份所有庫
- --defaults-file= #指定my.cnf配置文件
- --apply-log #日志回滾
- --incremental= #增量備份,后跟增量備份路徑
- --incremental-basedir= #增量備份,指上次增量備份路徑
- --redo-only #合并全備和增量備份數據文件
- --copy-back #將備份數據復制到數據庫,數據庫目錄要為空
- --no-timestamp #生成備份文件不以時間戳為目錄名
- --stream= #指定流的格式做備份,--stream=tar,將備份文件歸檔
- --remote-host=user@ip DST_DIR #備份到遠程主機 </ul>
2、完整備份與恢復
2.1 完整備份
# innobackupex --user=bak --password='bak2015' /mysql_backup
2.2 備份恢復
# innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /home/loongtao/mysql_backup/2015-02-08_11-56-48/
2.3 備份文件說明
# ls 2015-02-08_11-56-48
- backup-my.cnf:記錄innobackup使用到mysql參數
- xtrabackup_binary:備份中用到的可執行文件
- xtrabackup_checkpoints:記錄備份的類型、開始和結束的日志序列號
- xtrabackup_logfile:備份中會開啟一個log copy線程,用來監控innodb日志文件(ib_logfile),如果修改就會復制到這個文件 </ul>
3、完整備份+增量備份與恢復
3.1 完整備份
# innobackupex --user=bak --password='bak2015' /mysql_backup
備份后位置是:/mysql_backup/2015-02-08_11-56-48
3.2 增量備份1
# innobackupex --user=bak --password='bak2015' --incremental /data1/mysql_backup --incremental-basedir=/mysql_backup/2015-02-08_11-56-48 #指定上次完整備份目錄
3.3 增量備份2
# innobackupex --user=bak --password='bak2015' --incremental /data1/mysql_backup --incremental-basedir=/mysql_backup/2015-02-08_12-16-06 #指定上次增量備份目錄
3.4 查看xtrabackup_checkpoints文件
一目了然,可以看到根據日志序號來增量備份
3.5 備份恢復
3.5.1 備份恢復思路
將增量備份1、增量備份2...合并到完整備份,加到一起出來一個新的完整備份,將新的完整備份以拷貝的形式到數據庫空目錄(rm /var/lib/mysql/* -rf)
3.5.2 預備完整備份
xtrabackup把備份過程中可能有尚未提交的事務或已經提交但未同步數據文件的事務,寫到xtrabackup_logfile文件,所以要先通過這個日志文件回滾,把未完成的事務同步到備份文件,保證數據文件處于一致性。
# innobackup --apply-log --redo-only 2015-02-08_11-56-48
3.5.3 合并第一個增量備份
# innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_12-16-06
3.5.4 合并第二個增量備份
# innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_16-06-53
3.5.5 恢復完整備份
這時2015-02-08_11-56-48完整備份已經包含所有增量備份,可以通過查看checkpoints來核實
# innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /mysql_backup/2015-02-08_11-56-48/
3.5.6 修改恢復數據文件權限
# chown -R mysql.mysql /var/lib/mysql
3.5.7 啟動MySQL,查看數據庫恢復情況
# /etc/init.d/mysqld start
4、備份文件歸檔壓縮
4.1 歸檔并發送到備份服務器
# innobackupex --databases=test --user=bak --password='bak2015' --stream=tar /mysql_backup 2>/mysql_backup/bak.log |ssh root@192.168.18.251 "cat - > /mysql_backup/`date +%F`.tar"
解壓:tar -ixvf `date +%F`.tar
4.2 歸檔備份
# innobackupex --databases=test --user=bak --password='bak2015' --stream=tar /mysql_backup > /mysql_backup/`date +%F`.tar
解壓:tar -ixvf `date +%F`.tar
4.3 壓縮歸檔備份
# innobackupex --databases=test --user=bak --password='bak2015' --stream=tar /mysql_backup |gzip >/mysql_backup/`date +%F`.tar.gz
解壓:tar -izxvf `date +%F`.tar.gz
來源: http://lizhenliang.blog.51cto.com/7876557/1612800 本文由用戶 w8y5 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!