Percona XtraBackup的部分備份與恢復/單庫備份/單表備份/指定庫備份/指定表備份

本文是翻譯的Percona XtraBackup 2.2版的官方文檔,原文地址在此:https://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/partial_backups_innobackupex.html,以下是譯文。

原官方文檔沒有如何恢復的方法,恢復部分是我自己加的。

-----------------------------------------------------------這是一條分割線-----------------------------------------------------------

Percona XtraBackup的功能之一“部分備份(partial backups)”,即讓用戶可以備份指定的表或數據庫。要注意的是:你希望備份的表必須是在獨立的表空間中,即該表在創建以前,你的MySQL開啓了innodb_file_per_table設置。

還一點要注意的是:不要將prepared backup備份的東西拷貝回去。部分備份使用的是導入表(importing the tables),而不是全庫備份的--copy-back參數。儘管有時簡單的拷貝備份文件可以成功,但是這種方法很容易導致數據庫的不一致,因此不推薦大家這麼做。

創建部分備份(Creating Partial Backups)

部分備份共有三種方式,分別是:1. 用正則表達式表示要備份的庫名及表名(參數爲--include);2. 將要備份的表名或庫名都寫在一個文本文件中(參數爲--tables-file)以及 3. 將要備份表名或庫名完整的寫在命令行中(參數爲:--databases)。(譯者注:不管你備份哪個庫或是哪張表,強烈推薦把mysql庫也一起備份,恢復的時候要用。)

方式一:使用--include參數

這種方式通過正則表達式來匹配數據庫名和表名,你需要寫完整的數據庫名及表名,如果數據庫有用戶名密碼請使用--user和--password指定相關信息。,格式如下:databasename.tablename。下面是一個例子:

$ innobackupex --include='^mydatabase[.]mytable' /path/to/backup --user=backup --password=backup

上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,不同的是,最終只包括那些正則表達式匹配的表。

要注意的是,這個命令最後會傳給xtrabackup --tables命令執行,並且會爲每個數據庫(包括不需要備份的數據庫)創建一個對應的文件夾。

方式二:使用--tables-file參數

這種方式是將所有要備份的完整表名都寫在一個文本文件中,每行一個完整表名,然後程序讀取這個文本文件進行備份。完整表名即:databasename.tablename。如果數據庫有用戶名密碼請使用--user和--password指定相關信息。下面是一個例子:

$ echo "mydatabase.mytable" > /tmp/tables.txt
$ innobackupex --tables-file=/tmp/tables.txt /path/to/backup --user=backup --password=backup

上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,不同的是,最終只包括那些文件中指定的表名。

這個命令最後會傳給xtrabackup --tables-file命令執行,而不是--tables,因此這個命令只會創建那些需要備份的數據庫文件夾。

方式三:使用--databases參數

使用這種方式,用戶既可以將所有要備份的數據庫名和完整表名都寫在一起,以空格分隔,也可以將數據庫名、完整表名寫在一個文件中,每行一個,如果數據庫有用戶名密碼請使用--user和--password指定相關信息。下面是一個例子。

$ innobackupex --databases="mydatabase.mytable mysql" /path/to/backup --user=backup --password=backup

上面的方式會和其他使用innobackupex命令的備份方式一樣,創建一個時間戳命名的文件夾,最終結果將包括mydatabase數據庫中的mytable表,以及整個完整的mysql數據庫。

準備部分備份(Preparing Partial Backups)

執行preparing partial backups,與恢復獨立的表(Restoring Individual Tables)很類似:使用--apply-log和--export參數,幷包含上一步生成的時間戳文件夾,如下:

$ innobackupex --apply-log --export /path/to/backup/2015-11-09_16-33-58

執行命令的時候,對於那些不需要備份的表,會出現表不存在的提示。不用擔心,這是正常現象。下面是可能出現的錯誤提示:

111225  0:54:06  InnoDB: Error: table 'mydatabase/mytablenotincludedinpartialb'
InnoDB: in InnoDB data dictionary has tablespace id 6,
InnoDB: but tablespace with that id or name does not exist. It will be removed from data dictionary.

同時,你還會看到系統生成對要備份的表創建導出文件的提示,信息如下:

xtrabackup: export option is specified.
xtrabackup: export metadata of table 'employees/departments' to file `.//departments.exp` (2 indexes)
xtrabackup:     name=PRIMARY, id.low=80, page=3
xtrabackup:     name=dept_name, id.low=81, page=4

注意,你能夠對已經執行過準備備份(already-prepared backup)的文件執行帶有--export和--apply-log參數的命令,來生成.exp文件。

最終,記得觀察下面的輸出,已確定準備備份工作結束。

111225 00:54:18  innobackupex: completed OK!

恢復部分被備份(Restoring Partial Backups)

方法一:恢復數據操作可以參見恢復獨立的表(Restoring Individual Tables)這一小節。(這種方法本人試驗沒成功,推薦使用方法二)

方法二:

1. 停止MySQL:service mysql stop

2. 將/var/lib/mysql下面的所有文件全部刪除:rm /var/lib/mysql/* -rf(如果前面沒有備份mysql數據庫, 那麼在刪除數據文件後要重建mysql系統表,重建命令是sudo mysql_install_db --user=mysql,但重建會導致原有用戶信息全部丟失)

3. 將第二步準備過的文件拷貝到/var/lib/mysql下:cp /usr/local/backup/2015-11-09_16-33-58/* /var/lib/mysql -rf

4. 給文件賦權:chown -R mysql:mysql /var/lib/mysql/

5. 啓動MySQL:service mysql start

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章