溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

innobackupex部分表備份和恢復(fù)方法是什么

發(fā)布時(shí)間:2021-11-10 11:23:51 來(lái)源:億速云 閱讀:272 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

本篇內(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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI