生活随笔
收集整理的這篇文章主要介紹了
xtrabackup增量备份mysql +MHA
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/yanggd1987/article/category/2214421
https://www.centos.bz/2013/09/innobackupex-auto-backup-with-shell/
?
之前我們提到過xtrbackup備份mysql的幾種方式:完整備份、增量備份、部分備份等,但是在實際生產環境中用到最多的還是增量備份,下面我們就來寫一個腳本。
此腳本在https://www.centos.bz/2013/09/innobackupex-auto-backup-with-shell/基礎上重新修改。
?
[html]?view plain?copy #!/bin/bash??#??#??#note:周日作完整備份,其它時間增量備份;每次增量備份后,都將incr_basedir打包壓縮;若是本周最后一次增量備份,則備份完成后將本次備份內容直接打包壓縮??#每次備份的日志都會將其移動到本次備份目錄中,如:0_innobackupex.log表示全備,1_innobackupex.log表示第一次增備??#由于服務器空間有限,每周的做完整備份前會將上周的所有備份刪除??#由于壓縮是對絕對路徑進行壓縮,因此在使用tar命令進行壓縮或解壓時,都是用P參數或使用tar?-C??#如果腳本停止或出錯請到back_dir下查看日志,若此次備份沒有問題,會將本次打印的日志轉移到備份目錄下????#定義相關變量??backup_base=/data/mysqlbak??full_backup_dir=$backup_base/mysql_full_backup??incr_backup_dir=$backup_base/mysql_incr_backup??sub_incr_dir=$(date?+%w)??user=test??password=test??defaults_file=/etc/my.cnf??#include_db="centos.*|mysql.*"??error_lock_file=$backup_base/error.locked??backup_dir=$backup_base/log????#innobackupex性能參數??iops=400??mem=1GB??thread=4????#相關函數??#檢查命令是否執行成功??if_sucess(){??local?command="$1"??$command??if?[?$??-ne?0?];then??echo?"error."??touch?$error_lock_file??exit?1??fi??}??#檢查是否存在鎖文件,如果存在就退出。??check_locked(){??if?[?-f??"$error_lock_file"?];then??echo?"error_lock_file?found"??exit?1??fi??}?????#壓縮上次備份完整或增量備份??compress_old_backup(){??if_sucess?"tar?czPf?${incr_base_dir}.tar.gz?$incr_base_dir"??if_sucess?"mv?${incr_base_dir}.tar.gz?$backup_base/old"??rm?-rf?$incr_base_dir??}????#程序從這里開始??check_locked??mkdir?-p?$full_backup_dir?$incr_backup_dir?$backup_base/old?$backup_base/log??#輸入日志相關??backup_log=${backup_dir}/${sub_incr_dir}_innobackupex.log??exec?100>?$backup_log??exec?1>&100??exec?2>&1??echo?""??echo?""??echo?"################$(date?+%Y%m%d-%H:%M)?start?##################"?????#周日就作完整備份,其它時間增量備份;每次增量備份后,都將basedir打包壓縮;若是本周最后一次增量備份,則備份完成后將本次備份內容直接打包壓縮??if?[?$sub_incr_dir?-eq?0?];then??#刪除上周完成的所有備份??echo?"################$(date?+%Y%m%d-%H:%M)?remove?old?backup?###################"??rm?-rf?$backup_base/old/*??echo?"################$(date?+%Y%m%d-%H:%M)?start?full?backup?###############"??full_date=$(date?+%Y%m%d%H%M)??if_sucess?"/usr/bin/innobackupex?--user=$user?--password=$password??--defaults-file=$defaults_file?--no-timestamp?--throttle=$iops?--use-memory=$mem?--parallel=$thread?$full_backup_dir/full${sub_incr_dir}_$full_date"???echo?"incr_base_dir=$full_backup_dir/full${sub_incr_dir}_$full_date"?>?$backup_base/incr_base_dir.txt??#轉移日志到此次備份目錄下??if_sucess?"mv?$backup_log?$full_backup_dir/full${sub_incr_dir}_$full_date"??else??#獲取增量備份的basedir目錄??[?-f?"$backup_base/incr_base_dir.txt"?]?&&?incr_base_dir=$(sed?-n?'$p'?$backup_base/incr_base_dir.txt?|?awk?-F=?'{print?$2}')?||?exit?1??echo?"################$(date?+%Y%m%d-%H:%M)?start?incremental?backup?###############"??incr_date=$(date?+%Y%m%d%H%M)??if_sucess?"/usr/bin/innobackupex?--user=$user?--password=$password??--defaults-file=$defaults_file?--throttle=$iops?--use-memory=$mem?--incremental?--parallel=$thread?$incr_backup_dir/incr${sub_incr_dir}_${incr_date}?--no-timestamp??--incremental-basedir=$incr_base_dir"??echo?"incr_base_dir=$incr_backup_dir/incr${sub_incr_dir}_${incr_date}"?>>?$backup_base/incr_base_dir.txt??#轉移日志到此次備份目錄下??if_sucess?"mv?$backup_log?$incr_backup_dir/incr${sub_incr_dir}_${incr_date}"??echo?"################$(date?+%Y%m%d-%H:%M)?start?compress?$incr_base_dir?###############"??[?-d?"$incr_base_dir"?]?&&?compress_old_backup??#若是本周最后一次增量備份,則備份完成后將備份內容直接打包壓縮??[?$sub_incr_dir?-eq?6?]?&&?.?$backup_base/incr_base_dir.txt?&&?compress_old_backup??fi??exec?100>&-??#將本地備份同步到異地??echo?"################$(date?+%Y%m%d-%H:%M)?stop?##################"??echo?""??echo?""??echo?"################$(date?+%Y%m%d-%H:%M)?rsync?start?##################"??/usr/bin/rsync?-avz?--password-file=/etc/rsync.pas?$backup_base/old/?test@X.X.X.X::mysqlbak/??echo?"################$(date?+%Y%m%d-%H:%M)?rsync?stop?##################"??
?
要點:
1.xtrabackup雖然支持異地備份,但是無法同時實現增量備份,因為增量備份需要的incremental_basedir在異地,因此我們需要通過rsync同步
2.xtrabackup增量備份無法啟用流壓縮,原因同樣需要incremental_basedir,因此我們腳本中每次會保留增量備份需要的incremental_basedir,使用完后再將其壓縮
3.為避免xtrabackup備份過程影響mysql服務器性能并加快備份過程,需要設置相關參數,具體情況根據服務器資源來設定。
4.為方便查看打印日志,我們通過exec來記錄日志,最后不要忘記關閉exec的文件描述符
?
實驗過程中,200多個G 的數據庫完整備份需要30分鐘左右完成,增量備份只需10分鐘左右完成。
?
最后,在備份完成后我們可以查看xtrabackup_info,如下:
[html]?view plain?copy uuid?=?1703dbc2-7cce-11e5-b351-b82a72d5ba07??name?=??tool_name?=?innobackupex??tool_command?=?--user=xtrabak?--password=...?--defaults-file=/etc/my.cnf?--throttle=400?--use-memory=1GB?--incremental?--parallel=4?/data/mysqlbak/mysql_incr_backup/incr3_201510280101?--no-timestamp?--incremental-basedir=/data/mysqlbak/mysql_incr_backup/incr2_201510270101??tool_version?=?1.5.1-xtrabackup??ibbackup_version?=?xtrabackup?version?2.2.9?based?on?MySQL?server?5.6.22?Linux?(x86_64)?(revision?id:?)??server_version?=?5.6.22-log??start_time?=?2015-10-28?01:01:01??end_time?=?2015-10-28?01:13:49??lock_time?=?27??binlog_pos?=?filename?'mysql-bin.000711',?position?721836584??innodb_from_lsn?=?1021734207515??innodb_to_lsn?=?1025349925630??partial?=?N??incremental?=?Y??format?=?file??compact?=?N??compressed?=?N??encrypted?=?N?? 來查看本次備份的start_tiime,end_time以及lock_time,為什么會有lock_time呢? ?
因此innobackupex先會備份innodb引擎的數據庫,此過程不會鎖表;然后再全庫鎖表,備份myisam引擎的數據庫,因此會有一個lock_time;從info信息中還可以得到其他可用信息。另innobackupex的全庫鎖表時也可能會導致整個備份過程很長。
?
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的xtrabackup增量备份mysql +MHA的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。