生活随笔
收集整理的這篇文章主要介紹了
xtrabackup增量备份mysql +MHA
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://blog.csdn.net/yanggd1987/article/category/2214421
https://www.centos.bz/2013/09/innobackupex-auto-backup-with-shell/
?
之前我們提到過(guò)xtrbackup備份mysql的幾種方式:完整備份、增量備份、部分備份等,但是在實(shí)際生產(chǎn)環(huán)境中用到最多的還是增量備份,下面我們就來(lái)寫一個(gè)腳本。
此腳本在https://www.centos.bz/2013/09/innobackupex-auto-backup-with-shell/基礎(chǔ)上重新修改。
?
[html]?view plain?copy #!/bin/bash??#??#??#note:周日作完整備份,其它時(shí)間增量備份;每次增量備份后,都將incr_basedir打包壓縮;若是本周最后一次增量備份,則備份完成后將本次備份內(nèi)容直接打包壓縮??#每次備份的日志都會(huì)將其移動(dòng)到本次備份目錄中,如:0_innobackupex.log表示全備,1_innobackupex.log表示第一次增備??#由于服務(wù)器空間有限,每周的做完整備份前會(huì)將上周的所有備份刪除??#由于壓縮是對(duì)絕對(duì)路徑進(jìn)行壓縮,因此在使用tar命令進(jìn)行壓縮或解壓時(shí),都是用P參數(shù)或使用tar?-C??#如果腳本停止或出錯(cuò)請(qǐng)到back_dir下查看日志,若此次備份沒(méi)有問(wèn)題,會(huì)將本次打印的日志轉(zhuǎn)移到備份目錄下????#定義相關(guān)變量??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性能參數(shù)??iops=400??mem=1GB??thread=4????#相關(guān)函數(shù)??#檢查命令是否執(zhí)行成功??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??#輸入日志相關(guān)??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?##################"?????#周日就作完整備份,其它時(shí)間增量備份;每次增量備份后,都將basedir打包壓縮;若是本周最后一次增量備份,則備份完成后將本次備份內(nèi)容直接打包壓縮??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??#轉(zhuǎn)移日志到此次備份目錄下??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??#轉(zhuǎn)移日志到此次備份目錄下??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??#若是本周最后一次增量備份,則備份完成后將備份內(nèi)容直接打包壓縮??[?$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?##################"??
?
要點(diǎn):
1.xtrabackup雖然支持異地備份,但是無(wú)法同時(shí)實(shí)現(xiàn)增量備份,因?yàn)樵隽總浞菪枰膇ncremental_basedir在異地,因此我們需要通過(guò)rsync同步
2.xtrabackup增量備份無(wú)法啟用流壓縮,原因同樣需要incremental_basedir,因此我們腳本中每次會(huì)保留增量備份需要的incremental_basedir,使用完后再將其壓縮
3.為避免xtrabackup備份過(guò)程影響mysql服務(wù)器性能并加快備份過(guò)程,需要設(shè)置相關(guān)參數(shù),具體情況根據(jù)服務(wù)器資源來(lái)設(shè)定。
4.為方便查看打印日志,我們通過(guò)exec來(lái)記錄日志,最后不要忘記關(guān)閉exec的文件描述符
?
實(shí)驗(yàn)過(guò)程中,200多個(gè)G 的數(shù)據(jù)庫(kù)完整備份需要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?? 來(lái)查看本次備份的start_tiime,end_time以及l(fā)ock_time,為什么會(huì)有l(wèi)ock_time呢? ?
因此innobackupex先會(huì)備份innodb引擎的數(shù)據(jù)庫(kù),此過(guò)程不會(huì)鎖表;然后再全庫(kù)鎖表,備份myisam引擎的數(shù)據(jù)庫(kù),因此會(huì)有一個(gè)lock_time;從info信息中還可以得到其他可用信息。另innobackupex的全庫(kù)鎖表時(shí)也可能會(huì)導(dǎo)致整個(gè)備份過(guò)程很長(zhǎng)。
?
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的xtrabackup增量备份mysql +MHA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。