目前有這樣一個需求,須要備份mysql庫中一個庫中的默認幾張表,由於之前只經過xtrabackup備份過全庫或單庫,歷來沒有備份過一個庫中的幾張表,因此記錄一下踩坑經驗。mysql
備份方法:
innobackupex有一個--tables-file參數,在備份的時候指定此參數,後面帶一個數據庫列表文件便可把全部指定表的指定庫備份出來,此文件中全部表書寫格式爲數據庫名.表名,多個表名分多行寫就行。
考慮到這幾個表比較大,因此能夠經過--stream參數直接輸出爲tar包的格式,語句以下:sql
innobackupex --defaults-file=數據庫配置文件 --user=用戶名 --password=密碼 --tables-file=數據庫列表文件 --stream=tar . | xz - > /backup/test.tar.xz #--stream=tar 後面有一個目錄,此處爲當前目錄「.」,此目錄爲備份文件臨時存儲目錄,- > /backup/test.tar.xz 表示備份文件存儲位置和存儲名
恢復方法:
由於我要把這份備份文件恢復到其餘服務器的數據庫,一開始直接經過--apply-log和--copy-back以後發現恢復以後能夠看到恢復的庫和表,可是對錶進行任何操做都會受到以下報錯:
mysql錯誤日誌報錯以下:
後來查詢xtrabackup的man手冊和mysql的官方文檔發現緣由以下:innodb存儲引擎的表在恢復到其餘數據庫的時候它的表空間是存放在.cfg文件中的,可是此時恢復會檢測.cfg是否符合mysql的schema,因此就會報錯。
解決方法:
在--apply-log的時候添加--export命令,把表空間保存爲.exp文件,此時恢復的時候能夠單獨讀取此表空間導出文件,而後就能正常對錶進行操做了。數據庫
innobackupex --apply-log --export 備份目錄 #拷貝已經--apply-log的數據到數據庫數據目錄,而後修改屬組屬主,啓動數據庫便可
注意:
若是沒有備份mysql表,恢復的時候首先須要先進行數據庫的初始化操做。由於沒有mysql表是沒法啓動mysql服務的。服務器