《單表快速恢復!XtraBackup 隱藏技巧揭秘》要點:
本文介紹了單表快速恢復!XtraBackup 隱藏技巧揭秘,希望對您有用。如果有疑問,可以聯系我們。
數據庫工作者對下面這個場景肯定不會陌生:某次操作失誤導致誤刪了某個表,需要立即進行數據恢復.如果是普通的全量備份,發現這個實例有好幾百G甚至上T的數據,然后苦逼的拷貝數據庫、追同步、等待數據恢復,估計好幾個小時已經過去了~~~
本文主要介紹利用 XtraBackup 備份工具來實現單表快速恢復,在緊急數據恢復場景下,用最短的時間來恢復數據,最大程度降低損失.
注:只適應于獨立表空間的場景,即 innodbfileper_table = ON
正常使用 XtraBackup 備份到本地,并執行 apply-log ,但是在打包上傳存儲的時候,對每個表文件單獨打包壓縮.
重點 :對每個表文件單獨打包,例如 dbname.tablename.tar
備份命令簡單示例:
## 備份數據
innobackupex --user=users --password=xxxxxxx --socket=/xxx/mysql.sock --defaults-file=/xxxxx/my.cnf ? /data/backup_dir/mysql ?2>> /var/log/mysqlbackup.log
## 應用 apply log
innobackupex -apply-log ?/data/backup/mysql
## 分表單獨打包(可以根據實際情況加入壓縮和加密)
for tablename in $tables; do tar -cvf dbname.tablename.tar dbname/tablename ; done
注:一定不要忘記執行 apply-log
在數據恢復的時候,只需要拷貝必須的基礎文件和需要恢復的表文件包,解壓啟動,并在數據庫配置文件中添加replicate-wild-do-table=dbname.tablename ,只需要追對應表的數據同步即可.這樣可以省去大量傳輸數據、解壓和追同步的時間,以最少的時間恢復數據.
單表快速數據恢復步驟:
- 拷貝 mysql 庫相關文件
- 拷貝 ibdata* 文件
- 拷貝 ib_logfile* 文件
- 拷貝 my.cnf 配置文件
- 拷貝 XtraBackup 相關日志文件
- 拷貝需要恢復的數據表相關文件以及目錄結構
- 配置文件中添加配置:replicate-wild-do-table=dbname.tablename
- 配置文件中添加配置:skip-slave-start
- 如果有壓縮加密則解壓解密相關文件,啟動
- change 到指定點位或者 gtid
注:恢復時配置文件一定要加 skip-slave-start 參數,避免直接啟動同步導致數據追過頭
遠程流式備份恢復
在數據庫容量逐漸變大,本地備份和傳輸磁盤容量有瓶頸的時候我們引入了遠程流式備份.XtraBackup 有個 –stream 的參數,支持兩種流式備份:tar 和 xbstream ,為了單表快速恢復,我們選擇了 xbstream .
備份命令簡單示例:
## 直接利用 xbstream 將數據備份到遠程存儲
innobackupex --user=users --password=xxxxxxx --socket=/xxx/mysql.sock --defaults-file=/xxxxx/my.cnf --stream=xbstream --compress ? /data/backup_dir/mysql ?2>> /var/log/mysqlbackup.log ?| ?ssh users@10.10.10.10 "xbstream -x -C ?/data/backup_dir1/mysql/"
數據恢復與之前本地備份單表快速恢復類同,拷貝必須的基礎文件和需要恢復的數據表表相關文件,大致操作步驟與命令如下:
- 拷貝 mysql 庫相關文件
- 拷貝 ibdata* 文件
- 拷貝 ib_logfile* 文件
- 拷貝 my.cnf 配置文件
- 拷貝 XtraBackup 相關日志文件
- 拷貝需要恢復的數據表相關文件以及目錄結構
- 配置文件中添加配置:replicate-wild-do-table=dbname.tablename
- 配置文件中添加配置:skip-slave-start
- 解壓相關文件,命令:
innobackupex ? --decompress ? --parallel=8 ? /data/backup_dir/mysql
- 執行 apply-log:
innobackupex -apply-log ?/data/backup/mysql ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
- change 到指定點位或者 gtid
注:執行 apply-log 時出現如下報錯不要緊張,直接忽略就行,因為只拷貝了部分表數據文件用來恢復,其他表的信息仍然在存在于 InnoDB 的內部數據字典中,所以會有報錯.
InnoDB: Table xxxx/xxxxx in the InnoDB data dictionary has tablespace id xxx, but tablespace with that id or name does not exist. Have you deleted or moved .ibd files? This may also be a table created with CREATE TEMPORARY TABLE whose .ibd and .frm files MySQL automatically removed, but the table still exists in the InnoDB internal data dictionary.
總結
單表快速恢復能幫我們最短時間恢復線上數據,同時此方法也適用于多表恢復.不過想要快速恢復數據前期準備也必不可少,怎么能快速獲取備份信息、需要恢復到的 binlog 點位、gtid 等都需要下一番功夫.只有諸事具備才能無往不利.
文章來自微信公眾號:HULK一線技術雜談
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4265.html