日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

xtrabackup增量备份mysql +MHA

發(fā)布時(shí)間:2025/3/18 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)。

    ?

    與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的xtrabackup增量备份mysql +MHA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。