您好,登錄后才能下訂單哦!
本篇內容主要講解“innobackupex部分表備份和恢復方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“innobackupex部分表備份和恢復方法是什么”吧!
Percona XtraBackup的功能之一“部分備份(partial backups)”,即讓用戶可以備份指定的表或 數據庫 。要注意的是:你希望備份的表必須是在獨立的表空間中,即該表在創建以前,你的 MySQL 開啟了innodb_file_per_table設置。
還一點要注意的是:不要將prepared backup備份的東西拷貝回去。部分備份使用的是導入表(importing the tables),而不是全庫備份的--copy-back參數。
關于innobackupex可以實現部分表或者庫的(增量)備份和恢復
部分備份共有三種方式,分別是:
1. 用正則表達式表示要備份的庫名及表名(參數為--include);
2. 將要備份的表名或庫名都寫在一個文本文件中(參數為--tables-file)
3. 將要備份表名或庫名完整的寫在命令行或者文件中中(參數為:--databases)
方式一:使用--include參數
這種方式通過正則表達式來匹配數據庫名和表名,你需要寫完整的數據庫名及表名,如果數據庫有用戶名密碼請使用--user和--password指定相關信息。,格式如下:databasename.tablename。下面是一個例子:
[root@tool202 2018-12-01_20-39-31]# innobackupex --include='liuwenhe.liuwenhe' /data/
上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,不同的是,最終只包括那些正則表達式匹配的表(liuwenhe.liuwenhe)。
要注意的是,這個命令最后會傳給xtrabackup --tables命令執行;
方式二:使用--tables-file參數
這種方式是將所有要備份的完整表名都寫在一個文本文件中,每行一個完整表名,然后程序讀取這個文本文件進行備份。完整表名即:databasename.tablename,如果需要備份某個庫的全部表則可以寫成databasename.*.需要注意的是文件中每行開頭和結尾不能有空格!下面是一個例子:
[root@rongduan-renhang32 ~]# cat name.txt
liuwenhe.liu
liuwenhe.he
liuhe.*
可以有需要的話使用下面命令去掉每行結尾的空格
[root@rongduan-renhang32 ~]#sed -e 's/[ ]*$//g' name.txt >name1.txt
2.然后執行備份:
[root@rongduan-renhang32 ~]# innobackupex --user=root --password='V56788@1qaz' --port=3306 --tables-file=/root/name.txt /data/
上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,不同的是,最終只包括那些文件中指定的表名。
這個命令最后會傳給xtrabackup --tables-file命令執行,而不是--tables,這個命令只會創建那些需要備份的數據庫文件夾。
方式三:使用--databases參數
使用這種方式,用戶既可以將所有要備份的數據庫名和完整表名都寫在一起,以空格分隔,也可以將數據庫名、完整表名寫在一個文件中,每行一個,需要注意的是如果需要備份整個mysql庫,那么區別于--tables-file參數,直接寫上庫名字就可以了,.下面是一個例子:
[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 ###不用寫成mysql.*區別于--tables-file參數!
可以有需要的話使用下面命令去掉每行結尾的空格
[root@rongduan-renhang32 ~]#sed -e 's/[ ]*$//g' name.txt >name1.txt
2.然后執行備份:
[root@rongduan-renhang32 ~]# innobackupex --user=root --password='V56788@1qaz' --port=3306 --databases=/root/name.txt /data/
上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,最終結果將包括liuwenhe數據庫中的liuwenhe表,以及整個完整的mysql數據庫。
準備部分備份(Preparing Partial Backups)
執行preparing partial backups,使用--apply-log和--export參數,并包含上一步生成的時間戳文件夾,如下:
[root@tool202 2018-12-01_21-10-20]# innobackupex --port=3306 --apply-log --export /data/liuwenhe/2018-12-01_21-11-07/
執行命令的時候,對于那些不需要備份的表,會出現表不存在的提示。不用擔心,這是正常現象。
最終,記得觀察下面的輸出,已確定準備備份工作結束。
181201 21:15:50 completed OK!
恢復的操作:
1.先創建上需要恢復的表,注意表的存儲行的格式要和源端一樣,可以通過如下查看表的
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)
如果不一樣可以通過如下方式修改:
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創建的表默認為 Row_format=Compact,而mysql5.7.18中默認是dynamic格式
通過參數innodb_default_row_format控制!!!
3.注意區別于oracle的offline表空間,mysql 中執行discard 之后,對應的表的.ibd文件就沒有了
alter table liuwenhe.liuwenhe discard tablespace ;
4.然后copy備份的目錄中的該表的.ibd文件到相應的目錄下:
5.然后加載到表空間:
alter table liuwenhe.liuwenhe import tablespace ;
至此恢復工作完成!!!
總結:我們可以通過innobackupex來實現部分表的備份和增量備份和恢復,innodb的表是不可以直接copy表文件的方式來恢復的;也可以通過使用mysqlfrm工具來讀取innobackupex備份中的某個表的表結構,用于先創建上表結構,然后再discad tablespace,copy表的.ibd文件,最后import來實現從全實例備份中來恢復個別的表!注意恢復個別表的前提是:開啟了參數innodb_file_per_table,
mysqlfrm工具可以讀取表結構,可以使用yum安裝:yum install mysql-utilities -y
到此,相信大家對“innobackupex部分表備份和恢復方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。