xtrabackup的使用

xtrabackup使用

官方文檔——————備份原理 備份操作

1、備份原理

xtrabackup 在備份 InnoDB 相關(guān)數(shù)據(jù)時(shí),有2條線程,1條是 redo 拷貝線程,負(fù)責(zé)拷貝 redo 文件,1條是 ibd 拷貝線程,負(fù)責(zé)拷貝 ibd 文件;redo 拷貝線程只有一個(gè),在 ibd 拷貝線程之前啟動,在 ibd 線程結(jié)束后結(jié)束。xtrabackup 進(jìn)程開始執(zhí)行后,先啟動 redo 拷貝線程,從最新的 checkpoint 點(diǎn)開始順序拷貝 redo 日志;然后再啟動 ibd 數(shù)據(jù)拷貝線程。
注意:在備份過程中有ddl操作會導(dǎo)致備份失敗:ddl操作不會紀(jì)錄到redo log中,當(dāng)執(zhí)行了ddl語句修改表結(jié)構(gòu)后再往該表寫入數(shù)據(jù),redo log會記錄這些數(shù)據(jù),在將這些數(shù)據(jù)導(dǎo)入數(shù)據(jù)文件時(shí),會發(fā)現(xiàn)和數(shù)據(jù)文件中的表結(jié)構(gòu)沖突。

2、備份操作

// 全局備份,備份加密的話加上--compress參數(shù),使用備份時(shí)也需要先--decompress解密
xtrabackup --defaults-file=/etc/my.cnf --backup --user=root --password=‘123456’ socket=/tmp/mysql.sock target-dir=/backup/2019_12_12(一般用日期當(dāng)作備份名)

3、備份恢復(fù)

3.1、全恢復(fù)

// 解密備份文件
xtrabackup --decompress --target-dir=/backup/2019_12_12
// 準(zhǔn)備一個(gè)備份
xtrabackup --prepare --target-dir=/backup/2019_12_12
// 恢復(fù)備份
xtrabackup --copy-back --target-dir=/backup/2019_12_12

3. 2、恢復(fù)單庫單表

恢復(fù)單庫或指定幾個(gè)庫的話,只需要將備份文件下的其他庫移出去就好
恢復(fù)單表:
1、創(chuàng)建表(忘記表結(jié)構(gòu)可以使用mysqlfrm解析備份里的frm文件 mysqlfrm —diagnostic ~/*.frm)
2、刪除表空間 alter table yourtable discard tablespace(實(shí)際效果是刪除該庫對應(yīng)表的.ibd文件)
3、將備份中對應(yīng)的.ibd(數(shù)據(jù)文件)拷貝至所屬數(shù)據(jù)庫文件下,修改文件所屬為mysql:mysql
注意:主從結(jié)構(gòu)不要忘了將這步操作在從庫上也執(zhí)行一遍
4、導(dǎo)入表空間 alter table yourtable import tablespace

3.3、恢復(fù)到指定時(shí)間點(diǎn)

1、找到需要恢復(fù)的備份文件
2、如果是加密的備份,使用xtrabackup --decompress --target-dir=/backup/2019_06_10 來解密
(若報(bào)錯(cuò):sh:qpress:command not found,需要安裝qpress工具http://www.quicklz.com上可下載)
xtrabackup —prepare —target-dir=/backup/2019_06_10 準(zhǔn)備一個(gè)備份
chown -R mysql:mysql 2019_06_10修改文件,后面直接會使用這個(gè)數(shù)據(jù)文件啟動數(shù)據(jù)庫檢查是否恢復(fù)正確
3、解密完成后,進(jìn)入文件夾,cat xtrabackup_info文件,得到備份的信息

xtrabackup_info

4、使用mysqlbinlog --start-position=“備份結(jié)束的位置節(jié)點(diǎn)” --stop-datetime=“需要恢復(fù)的時(shí)間節(jié)點(diǎn)" /app/mysql/log/binlog/bin-log.002206 > /tmp/test.sql將全備結(jié)束和需恢復(fù)點(diǎn)之間的binlog轉(zhuǎn)存為sql文件(若2個(gè)節(jié)點(diǎn)之間的內(nèi)容包含了多個(gè)binlog,可以這樣寫bin-log.00220[5-6]*,表示002205和002206兩個(gè)binlog文件)
5、用mysqld --user=mysql --no-defaults --basedir=/app/mysql/dist --datadir=/backup/ -P3307來啟動mysql
no-defaults:不讀取配置文件(my.cnf)
basedir:mysql的配置目錄
datadir:mysql的數(shù)據(jù)目錄
-P:自定義端口,不要與原有數(shù)據(jù)庫端口重復(fù)
6、mysql -h127.0.0.1 -uadmin -ppassword -P3307登陸數(shù)據(jù)庫,再source得到的sql文件,可能會報(bào)GTID的錯(cuò)誤,可以忽略,數(shù)據(jù)還是能成功插入的(注意:登入后show databases查看是否為備份數(shù)據(jù)庫的數(shù)據(jù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容