您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“innobackupex部分表備份和恢復(fù)方法是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“innobackupex部分表備份和恢復(fù)方法是什么”吧!
Percona XtraBackup的功能之一“部分備份(partial backups)”,即讓用戶可以備份指定的表或 數(shù)據(jù)庫(kù) 。要注意的是:你希望備份的表必須是在獨(dú)立的表空間中,即該表在創(chuàng)建以前,你的 MySQL 開(kāi)啟了innodb_file_per_table設(shè)置。
還一點(diǎn)要注意的是:不要將prepared backup備份的東西拷貝回去。部分備份使用的是導(dǎo)入表(importing the tables),而不是全庫(kù)備份的--copy-back參數(shù)。
關(guān)于innobackupex可以實(shí)現(xiàn)部分表或者庫(kù)的(增量)備份和恢復(fù)
部分備份共有三種方式,分別是:
1. 用正則表達(dá)式表示要備份的庫(kù)名及表名(參數(shù)為--include);
2. 將要備份的表名或庫(kù)名都寫(xiě)在一個(gè)文本文件中(參數(shù)為--tables-file)
3. 將要備份表名或庫(kù)名完整的寫(xiě)在命令行或者文件中中(參數(shù)為:--databases)
方式一:使用--include參數(shù)
這種方式通過(guò)正則表達(dá)式來(lái)匹配數(shù)據(jù)庫(kù)名和表名,你需要寫(xiě)完整的數(shù)據(jù)庫(kù)名及表名,如果數(shù)據(jù)庫(kù)有用戶名密碼請(qǐng)使用--user和--password指定相關(guān)信息。,格式如下:databasename.tablename。下面是一個(gè)例子:
[root@tool202 2018-12-01_20-39-31]# innobackupex --include='liuwenhe.liuwenhe' /data/
上面的方式會(huì)和其他使用innobackupex命令的備份方式一樣,創(chuàng)建一個(gè)時(shí)間戳命名的文件夾,不同的是,最終只包括那些正則表達(dá)式匹配的表(liuwenhe.liuwenhe)。
要注意的是,這個(gè)命令最后會(huì)傳給xtrabackup --tables命令執(zhí)行;
方式二:使用--tables-file參數(shù)
這種方式是將所有要備份的完整表名都寫(xiě)在一個(gè)文本文件中,每行一個(gè)完整表名,然后程序讀取這個(gè)文本文件進(jìn)行備份。完整表名即:databasename.tablename,如果需要備份某個(gè)庫(kù)的全部表則可以寫(xiě)成databasename.*.需要注意的是文件中每行開(kāi)頭和結(jié)尾不能有空格!下面是一個(gè)例子:
[root@rongduan-renhang32 ~]# cat name.txt
liuwenhe.liu
liuwenhe.he
liuhe.*
可以有需要的話使用下面命令去掉每行結(jié)尾的空格
[root@rongduan-renhang32 ~]#sed -e 's/[ ]*$//g' name.txt >name1.txt
2.然后執(zhí)行備份:
[root@rongduan-renhang32 ~]# innobackupex --user=root --password='V56788@1qaz' --port=3306 --tables-file=/root/name.txt /data/
上面的方式會(huì)和其他使用innobackupex命令的備份方式一樣,創(chuàng)建一個(gè)時(shí)間戳命名的文件夾,不同的是,最終只包括那些文件中指定的表名。
這個(gè)命令最后會(huì)傳給xtrabackup --tables-file命令執(zhí)行,而不是--tables,這個(gè)命令只會(huì)創(chuàng)建那些需要備份的數(shù)據(jù)庫(kù)文件夾。
方式三:使用--databases參數(shù)
使用這種方式,用戶既可以將所有要備份的數(shù)據(jù)庫(kù)名和完整表名都寫(xiě)在一起,以空格分隔,也可以將數(shù)據(jù)庫(kù)名、完整表名寫(xiě)在一個(gè)文件中,每行一個(gè),需要注意的是如果需要備份整個(gè)mysql庫(kù),那么區(qū)別于--tables-file參數(shù),直接寫(xiě)上庫(kù)名字就可以了,.下面是一個(gè)例子:
[root@tool202 liuwenhe]# innobackupex --user=root --password='V56788@1qaz' --port=3306 --databases="liuwenhe.liuwenhe mysql" /data
或者
[root@rongduan-renhang32 ~]# cat name.txt
liuwenhe.liuwenhe
mysql ###不用寫(xiě)成mysql.*區(qū)別于--tables-file參數(shù)!
可以有需要的話使用下面命令去掉每行結(jié)尾的空格
[root@rongduan-renhang32 ~]#sed -e 's/[ ]*$//g' name.txt >name1.txt
2.然后執(zhí)行備份:
[root@rongduan-renhang32 ~]# innobackupex --user=root --password='V56788@1qaz' --port=3306 --databases=/root/name.txt /data/
上面的方式會(huì)和其他使用innobackupex命令的備份方式一樣,創(chuàng)建一個(gè)時(shí)間戳命名的文件夾,最終結(jié)果將包括liuwenhe數(shù)據(jù)庫(kù)中的liuwenhe表,以及整個(gè)完整的mysql數(shù)據(jù)庫(kù)。
準(zhǔn)備部分備份(Preparing Partial Backups)
執(zhí)行preparing partial backups,使用--apply-log和--export參數(shù),并包含上一步生成的時(shí)間戳文件夾,如下:
[root@tool202 2018-12-01_21-10-20]# innobackupex --port=3306 --apply-log --export /data/liuwenhe/2018-12-01_21-11-07/
執(zhí)行命令的時(shí)候,對(duì)于那些不需要備份的表,會(huì)出現(xiàn)表不存在的提示。不用擔(dān)心,這是正常現(xiàn)象。
最終,記得觀察下面的輸出,已確定準(zhǔn)備備份工作結(jié)束。
181201 21:15:50 completed OK!
恢復(fù)的操作:
1.先創(chuàng)建上需要恢復(fù)的表,注意表的存儲(chǔ)行的格式要和源端一樣,可以通過(guò)如下查看表的
root@localhost : liuwenhe 21:33:36>show table status like 'liuwenhe'\G;
*************************** 1. row ***************************
Name: liuwenhe
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 4
Avg_row_length: 4096
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2018-12-01 19:43:48
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options: row_format=COMPACT
Comment:
1 row in set (0.00 sec)
如果不一樣可以通過(guò)如下方式修改:
root@localhost : liuwenhe 21:37:36>alter table liuwenhe.liuwenhe Row_format=Compact;
Query OK, 0 rows affected (0.34 sec)
Records: 0 Duplicates: 0 Warnings: 0
注意:mysql5.6創(chuàng)建的表默認(rèn)為 Row_format=Compact,而mysql5.7.18中默認(rèn)是dynamic格式
通過(guò)參數(shù)innodb_default_row_format控制!??!
3.注意區(qū)別于oracle的offline表空間,mysql 中執(zhí)行discard 之后,對(duì)應(yīng)的表的.ibd文件就沒(méi)有了
alter table liuwenhe.liuwenhe discard tablespace ;
4.然后copy備份的目錄中的該表的.ibd文件到相應(yīng)的目錄下:
5.然后加載到表空間:
alter table liuwenhe.liuwenhe import tablespace ;
至此恢復(fù)工作完成?。?!
總結(jié):我們可以通過(guò)innobackupex來(lái)實(shí)現(xiàn)部分表的備份和增量備份和恢復(fù),innodb的表是不可以直接copy表文件的方式來(lái)恢復(fù)的;也可以通過(guò)使用mysqlfrm工具來(lái)讀取innobackupex備份中的某個(gè)表的表結(jié)構(gòu),用于先創(chuàng)建上表結(jié)構(gòu),然后再discad tablespace,copy表的.ibd文件,最后import來(lái)實(shí)現(xiàn)從全實(shí)例備份中來(lái)恢復(fù)個(gè)別的表!注意恢復(fù)個(gè)別表的前提是:開(kāi)啟了參數(shù)innodb_file_per_table,
mysqlfrm工具可以讀取表結(jié)構(gòu),可以使用yum安裝:yum install mysql-utilities -y
到此,相信大家對(duì)“innobackupex部分表備份和恢復(fù)方法是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。