MySQL物理備份與恢復(fù)工具XtraBackup使用小結(jié)
1.描述
借助Percona XtraBackup工具實(shí)現(xiàn)MySQL的物理備份與恢復(fù),相當(dāng)于將整個MySQL進(jìn)行了復(fù)制,再粘貼到其他地方運(yùn)行。
2.安裝
XtraBackup與MySQL版本對應(yīng)關(guān)系:
XtraBackup | MySQL |
---|---|
percona-xtrabackup-24 | 5.7 |
percona-xtrabackup-80 | 8 |
percona-xtrabackup-81 | 8.1 |
percona-xtrabackup-82 | 8.2 |
percona-xtrabackup-83 | 8.3 |
yum -y install percona-xtrabackup-24 yum -y install rsync yum -y install perl-Digest-MD5 yum -y install qpress
3.使用
3.1 備份源數(shù)據(jù)庫
#讀取指定配置文件中的信息,壓縮mysql的數(shù)據(jù),輸出到/mysql目錄下,再重定向到test.xbstream文件中(相當(dāng)于tar包)。 innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --port=3306 --socket=/tmp/mysql.sock --stream=xbstream --compress --parallel=8 --compress-threads=8 /mysql > /databak/test.xbstream
–defaults-file指定mysql配置文件,需要包含datadir等信息
–stream采用流的方式備份,這樣可以選擇輸出到本地或遠(yuǎn)程
3.2 恢復(fù)到目標(biāo)數(shù)據(jù)庫
如果恢復(fù)位置不在同一臺服務(wù)器,可以通過scp進(jìn)行文件傳輸。
3.2.1 恢復(fù)目錄
#相當(dāng)于解壓tar包,輸出到指定目錄下 xbstream -x < /databak/test.xbstream -C /databak/test
3.2.2 解壓文件
#對前一步輸出目錄下的所有壓縮文件進(jìn)行解壓 innobackupex --decompress --parallel=8 --compress-threads=8 /databak/test
3.2.3 應(yīng)用日志
#通過redo同步已提交的事務(wù),使數(shù)據(jù)文件保持一致 innobackupex --apply-log /databak/test
3.2.4 復(fù)制數(shù)據(jù)
復(fù)制數(shù)據(jù)前,先停止目標(biāo)MySQL,刪除他的data目錄和日志目錄
#將數(shù)據(jù)文件拷貝到目標(biāo)MySQL的數(shù)據(jù)目錄下 innobackupex --defaults-file=/etc/my.cnf --parallel=8 --copy-back /databak/test
3.2.5 啟動
#修改mysql相關(guān)的文件持有者為mysql用戶 chown -R mysql.mysql /data/mysql #啟動mysql systemctl start mysqld
如果是目標(biāo)MySQL是從服務(wù)器,需要恢復(fù)主從關(guān)系
#查看備份的數(shù)據(jù)最后的binlog的偏移量,或者gtid cat /databak/test/xtrabackup_binlog_info #格式如下: #mysql-bin.000001 3229488 87bd47b9-12f6-11ed-ae2c-0050569534a2:1-6,8cdb65cf-12f6-11ed-aab7-005056950a99:1-139
連接到MySQL客戶端:
stop slave; #清理中繼日志 reset slave; #清理binlog reset master; #設(shè)置已經(jīng)執(zhí)行但本地binlog中未記錄的gtid集合 set @@global.gtid_purged='87bd47b9-12f6-11ed-ae2c-0050569534a2:1-6,8cdb65cf-12f6-11ed-aab7-005056950a99:1-139'; #重新建立主從關(guān)系 change master to master_host='192.168.86.111',master_port=3306,master_user='backuser',master_password='123456', master_auto_position=1 ; start slave; show slave status\G
4.使用總結(jié)
環(huán)境:96核 754G內(nèi)存 30T磁盤(生產(chǎn)環(huán)境的物理機(jī))
4.1 備份
壓縮效率:XtraBackup默認(rèn)采用的zstd壓縮算法,理論壓縮比為5:1。實(shí)際使用中,一個MySQL實(shí)例由3.2t壓縮為502G;另一個MySQL實(shí)例由5.7t壓縮為825G,壓縮比達(dá)到6:1以上
備份速度:一個MySQL實(shí)例備份生成502G的壓縮文件,耗時大約50分鐘,判斷每10分鐘生成100G的壓縮文件。如果5個t的數(shù)據(jù),壓縮后可能為800G,則耗時約80分鐘。
傳輸文件:通過scp傳輸文件,速度約為350-450MB/s,500G需要20-25分鐘
4.2 恢復(fù)
恢復(fù)包含多個步驟:
恢復(fù)目錄:將壓縮文件解包到指定目錄下,速度較快,約10-20分鐘
解壓:一個MySQL實(shí)例為512G,解壓后3.6T,解壓耗時約37分鐘,約10分鐘1T
應(yīng)用日志:一個MySQL實(shí)例耗時約15分鐘
復(fù)制:一個MySQL實(shí)例,3.6T數(shù)據(jù)復(fù)制耗時約40分鐘,約10分鐘1T
4.3 例子
綜上,假設(shè)現(xiàn)有5T的數(shù)據(jù)需要處理,從備份到恢復(fù)的整個流程耗時如下:
- 備份,5T按6:1壓縮至800G,耗時80分鐘
- 傳輸,scp按450M/s,耗時30分鐘
- 恢復(fù),20分鐘
- 解壓,10分鐘1T,耗時50分鐘
- 應(yīng)用日志,20分鐘
- 復(fù)制,10分鐘1T,耗時50分鐘
在以上理想情況下,5T數(shù)據(jù)至少需要4個小時以上,實(shí)際可能5-6小時
到此這篇關(guān)于MySQL物理備份與恢復(fù)工具XtraBackend使用小結(jié)的文章就介紹到這了,更多相關(guān)MySQL XtraBackend使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL利用AES_ENCRYPT()與AES_DECRYPT()加解密的正確方法示例
MySQL中AES_ENCRYPT('密碼','鑰匙')函數(shù)可以對字段值做加密處理,AES_DECRYPT(表的字段名字,'鑰匙')函數(shù)解密處理,下面這篇文章主要給大家介紹了關(guān)于MySQL利用AES_ENCRYPT()與AES_DECRYPT()加解密的正確方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下。2017-08-08mysql中如何判斷當(dāng)前是字符 mysql判斷字段中有無漢字
這篇文章主要介紹了mysql如何判斷字段中有無漢字的方法,使用length與char_length兩個函數(shù)就可以完成2014-01-01CentOS下安裝mysql時忘記設(shè)置root密碼致無法登錄的解決方法
最近在給公司的內(nèi)網(wǎng)開發(fā)用服務(wù)器裝系統(tǒng),然后裝mysql居然就花了一天,原因是因?yàn)楸救嗽贑entOS下安裝萬mysql后,無法通過root進(jìn)入,因?yàn)榘惭b的時候,并沒有設(shè)置root密碼而導(dǎo)致無法登錄,通過查找了資料終于解決了,現(xiàn)在想方法分享給大家,有需要的朋友們可以參考借鑒。2016-11-11