您好,登錄后才能下訂單哦!
項(xiàng)目場景:
一個(gè)實(shí)例中存在幾張大表,該表是開發(fā)通過程序進(jìn)行歸檔的歷史表,但是偶爾需要給業(yè)務(wù)提供查詢使用,由于實(shí)例都是定期做全量備份的,未避免對(duì)該實(shí)例空間及備份造成壓力,所以建議將這些歸檔表遷移到一個(gè)單獨(dú)的靜態(tài)實(shí)例中,提供線下查詢。
那么任務(wù)來了,即備份一個(gè)庫中超過50G的大表,并且恢復(fù)到另外一個(gè)實(shí)例上。
解決方案:
1.首先想到的肯定是mysqldump。
優(yōu)點(diǎn):可以進(jìn)行指定表的備份,備份后,直接到指定恢復(fù)的實(shí)例上執(zhí)行source命令導(dǎo)入數(shù)據(jù),操作簡便。
缺點(diǎn):由于本次操作的表很大,而mysqldump是單線程操作,所以導(dǎo)致備份以及恢復(fù)的時(shí)間尤為漫長,對(duì)于效率為主的操作,不建議采取這種辦法。
2.利用熱備工具innobackupex方式。
優(yōu)點(diǎn):可以進(jìn)行指定表的備份和恢復(fù),操作時(shí)間快,效率高。
優(yōu)點(diǎn):備份和恢復(fù)操作命令比較復(fù)雜。
一切工作皆講效率,所以下面講解方案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/
備份完成后,發(fā)現(xiàn)在備份路徑下備份出指定的表。
然后進(jìn)行恢復(fù),指定表的備份,恢復(fù)操作要加上指定命令--export
如下:
/usr/local/percona-xtrabackup-2.4.5-Linux-x86_64/bin/innobackupex --apply-log --export /home/backup/
發(fā)現(xiàn)新增.cfg和.exp文件。
在新實(shí)例上恢復(fù)備份的表。
a.從備份的實(shí)例上查看建表語句,在新實(shí)例上創(chuàng)建相同的表。
mysql> show create table t1\G
1. row
Table: t1
Create Table: CREATE TABLEt1
(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 TABLEt2
(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)
發(fā)現(xiàn)表結(jié)構(gòu)如下變化
c.將備份后,恢復(fù)得到的.ibd,.exp文件拷貝到新實(shí)例下,并修改屬主屬組權(quán)限。
d.在新實(shí)例上將discard的表,進(jìn)行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.前后對(duì)比,檢驗(yàn)是否操作成功。
備份的實(shí)例
新實(shí)例
OK,至此整個(gè)過程完成。
總結(jié),采取熱備和恢復(fù)的方法,雖然操作復(fù)雜,但是相對(duì)mysqldump操作時(shí)間短效率高,整個(gè)過程耗時(shí)在copy文件和alter table操作上。還有其他提高備份和恢復(fù)效率的工具,如mysqldumper和mysqlpump(5.7版本),mysqlpump對(duì)單表仍是單線程操作,mysqldumper的和innobackupex的效率對(duì)比后面再進(jìn)行驗(yàn)證。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。