1. 程式人生 > >innobackupex 熱備指定庫表操作

innobackupex 熱備指定庫表操作

usr 建表 ddd efault 比較 cte ces 使用 size

項目場景:
一個實例中存在幾張大表,該表是開發通過程序進行歸檔的歷史表,但是偶爾需要給業務提供查詢使用,由於實例都是定期做全量備份的,未避免對該實例空間及備份造成壓力,所以建議將這些歸檔表遷移到一個單獨的靜態實例中,提供線下查詢。
那麽任務來了,即備份一個庫中超過50G的大表,並且恢復到另外一個實例上。

解決方案:
1.首先想到的肯定是mysqldump。
優點:可以進行指定表的備份,備份後,直接到指定恢復的實例上執行source命令導入數據,操作簡便。
缺點:由於本次操作的表很大,而mysqldump是單線程操作,所以導致備份以及恢復的時間尤為漫長,對於效率為主的操作,不建議采取這種辦法。
2.利用熱備工具innobackupex方式。

優點:可以進行指定表的備份和恢復,操作時間快,效率高。
優點:備份和恢復操作命令比較復雜。

一切工作皆講效率,所以下面講解方案2的具體操作方法。
首先備份指定表的命令為:

/usr/local/percona-xtrabackup-2.4.5-Linux-x8664/bin/innobackupex --defaults-file=/data/mysql/3306/conf/my.cnf --host=127.0.0.1 --port=3306 --tmpdir=/tmp/ --user=root --password=‘root@123‘ --databases=‘test.t1 test.t2‘ --slave-info --no-timestamp /home/backup/

備份完成後,發現在備份路徑下備份出指定的表。
技術分享圖片

然後進行恢復,指定表的備份,恢復操作要加上指定命令--export
如下:

/usr/local/percona-xtrabackup-2.4.5-Linux-x86_64/bin/innobackupex --apply-log --export /home/backup/

發現新增.cfg和.exp文件。
技術分享圖片

在新實例上恢復備份的表。
a.從備份的實例上查看建表語句,在新實例上創建相同的表。

mysql> show create table t1\G
1. row
Table: t1
Create Table: CREATE TABLE t1 (
id int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show create table t2\G
1. row
Table: t2
Create Table: CREATE TABLE t2 (
id int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

b.將新建的表做discard tablespace 操作

mysql> ALTER TABLE test.t1 DISCARD TABLESPACE;
Query OK, 0 rows affected (0.05 sec)

mysql> ALTER TABLE test.t2 DISCARD TABLESPACE;
Query OK, 0 rows affected (0.04 sec)

發現表結構如下變化
技術分享圖片

c.將備份後,恢復得到的.ibd,.exp文件拷貝到新實例下,並修改屬主屬組權限。
技術分享圖片

d.在新實例上將discard的表,進行import操作。

mysql> ALTER TABLE test.t1 DISCARD TABLESPACE;
Query OK, 0 rows affected (0.05 sec)

mysql> ALTER TABLE test.t2 DISCARD TABLESPACE;
Query OK, 0 rows affected (0.04 sec)

e.前後對比,檢驗是否操作成功。
備份的實例
技術分享圖片

新實例
技術分享圖片

OK,至此整個過程完成。
總結,采取熱備和恢復的方法,雖然操作復雜,但是相對mysqldump操作時間短效率高,整個過程耗時在copy文件和alter table操作上。還有其他提高備份和恢復效率的工具,如mysqldumper和mysqlpump(5.7版本),mysqlpump對單表仍是單線程操作,mysqldumper的和innobackupex的效率對比後面再進行驗證。

innobackupex 熱備指定庫表操作