innobackupex備份指定的部分數據庫和表

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

原官方文檔沒有如何恢復的方法,恢復部分是我本身加的。 -----------------------------------------------------------這是一條分割線-----------------------------------------------------------mysql

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庫也一塊兒備份,恢復的時候要用。)sql

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

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

上面的方式會和其餘使用innobackupex命令的備份方式同樣,建立一個時間戳命名的文件夾,不一樣的是,最終只包括那些正則表達式匹配的表。 要注意的是,這個命令最後會傳給xtrabackup --tables命令執行,而且會爲每一個數據庫(包括不須要備份的數據庫)建立一個對應的文件夾。app

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

$ 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參數,幷包含上一步生成的時間戳文件夾,以下:code

$ 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)

  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

相關文章
相關標籤/搜索