innobackupex 部分表備份和恢復
Percona XtraBackup的功能之一“部分備份(partial backups)”,即讓使用者可以備份指定的表或 。要注意的是:你希望備份的表必須是在獨立的表空間中,即該表在建立以前,你的 開啟了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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2222362/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用innobackupex備份集恢復指定庫
- 備份和恢復
- redis 備份和恢復Redis
- KunlunDB備份和恢復
- SqlServer備份和恢復(二)SQLServer
- SqlServer 備份和恢復(一)SQLServer
- 【MySQL】MySQL備份和恢復MySql
- RAC備份恢復之Voting備份與恢復
- innobackupex遠端備份
- Oracle 備份和恢復介紹Oracle
- 備份與恢復:polardb資料庫備份與恢復資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- 使用Xtrabackup完整備份中恢復單表
- SYSTEM 表空間管理及備份恢復
- mydumper備份恢復
- Mysql備份恢復MySql
- innobackupex全備份流程圖流程圖
- gitlab的資料備份和恢復Gitlab
- MySQL備份和恢復方法彙總MySql
- 九 GBase 8a備份和恢復
- MySQL日誌管理,備份和恢復MySql
- 詳解叢集級備份恢復:物理細粒度備份恢復
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- Mysql備份與恢復(1)---物理備份MySql
- MySQL 備份與恢復MySql
- RMAN備份恢復技巧
- Jenkins備份與恢復Jenkins
- Grafana 備份恢復教程Grafana
- rman 增量備份恢復
- Postgresql 備份與恢復SQL
- 帝國cms備份和恢復 帝國cms恢復資料
- innobackupex 備份MySQL資料庫MySql資料庫
- Mongo 資料庫備份和恢復命令Go資料庫
- db2 命令列備份和恢復DB2命令列
- DBV:冷備份的校驗和恢復
- 2.6.1 CDB中備份和恢復的概述
- 12 使用RMAN備份和恢復檔案
- PostgreSql資料庫的備份和恢復SQL資料庫