xtrabackup單表備份與恢復


官網最新版本下載地址
https://www.percona.com/downloads/XtraBackup/LATEST/
yum install percona-xtrabackup; [epel]

備份:innobackupex [option] BACKUP-ROOT-DIR

選項說明:https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html

--user;該選項表示備份賬號
--password;該選項表示備份的密碼
--host;該選項表示備份數據庫的地址
--databases;該選項接受的參數為數據名,如果要指定多個數據庫,彼此間需要以空格隔開;如:"xtra_test dba_test", \
同時,在指定某數據庫時,也可以只指定其中的某張表。如:"mydatabase.mytable"。該選項對innodb引擎表無效,還是會備份所有innodb表
--defaults-file;該選項指定從哪個文件讀取MySQL配置,必須放在命令行第一個選項位置
--incremental;該選項表示創建一個增量備份,需要指定--incremental-basedir
--incremental-basedir;該選項指定為前一次全備份或增量備份的目錄,與--incremental同時使用
--incremental-dir;該選項表示還原時增量備份的目錄
--include=name;指定表名,格式:databasename.tablename

Prepare:innobackupex --apply-log [option] BACKUP-DIR

--apply-log;一般情況下,在備份完成后,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務. \
因此,此時數據文件仍處理不一致狀態。此選項作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態
--use-memory;該選項表示和--apply-log選項一起使用,prepare 備份的時候,xtrabackup做crash recovery分配的內存大小,單位字節。也可(1MB,1M,1G,1GB),推薦1G
--export;表示開啟可導出單獨的表之后再導入其他Mysql中
--redo-only;此選項在prepare base full backup,往其中merge增量備份時候使用

還原:innobackupex --copy-back [選項] BACKUP-DIR

選項說明:
--copy-back;做數據恢復時將備份數據文件拷貝到MySQL服務器的datadir
--move-back;這個選項與--copy-back相似,唯一的區別是它不拷貝文件,而是移動文件到目的地。這個選項移除backup文件,用時候必須小心. \
使用場景:沒有足夠的磁盤空間同事保留數據文件和Backup副本

還原注意事項:
1.datadir目錄必須為空。除非指定innobackupex --force-non-empty-directorires選項指定,否則--copy-backup選項不會覆蓋
2.在restore之前,必須shutdown MySQL實例,不能將一個運行中的實例restore到datadir目錄中
3.由於文件屬性會被保留,大部分情況下需要在啟動實例之前將文件的屬主改為mysql,這些文件將屬於創建備份的用戶 chown -R mysql:mysql /data/mysql \
以上需要在用戶調用innobackupex之前完成--force-non-empty-directories:指定該參數時候,使得innobackupex --copy-back或--move-back選項轉移文件到非空目錄, \
已存在的文件不會被覆蓋。如果--copy-back和--move-back文件需要從備份目錄拷貝一個在datadir已經存在的文件,會報錯失敗

注意:單表導出和導入對版本有要求

~ ]# mysql --version
mysql Ver 15.1 Distrib 10.2.15-MariaDB, for Linux (x86_64) using readline 5.1

1.修改配置文件,啟動服務導入測試數據庫
sed -i '/\[mysqld\]/a\innodb_file_per_table' /etc/my.cnf
systemctl restart mairadb
msyql < hellodb_innodb.sql

2.備份表和表結構[建議備份到遠程主機]
mkdir /backup
innobackupex --include="hellodb.students" /backup/
mysql -e 'show create table hellodb.students' > students.sql;/*備份表結構*/

3.刪除表,模擬數據文件損壞
mysql -e 'drop table hellodb.students'
mysql -e 'select * from hellodb.students'

4.創建表文件
vi ./students.sql;/*刪除注釋信息*/
mysql hellodb < students.sql;
innobackupex --apply-log --export /backup/2018-06-14_15-17-43/;/*整數數據庫導出操作,完成后數據庫目錄下會多出".cfg,.exp"2個文件*/

5.刪除創建表文件所產生"students.ibd"表空間文件
~]# ls /data/mysql/hellodb/students.*
/data/mysql/hellodb/students.frm /data/mysql/hellodb/students.ibd
mysql -e 'alter table hellodb.students discard tablespace';/*刪除表空間文件[存放用戶數據]*/

6.拷貝表數據
cp /backup/2018-06-14_15-17-43/hellodb/students.{cfg,exp,ibd} /data/mysql/hellodb/
chown -R mysql. /data/mysql/hellodb
mysql -e 'alter table hellodb.students import tablespace';/*還原表空間文件*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM