利用Xtrabackup進行單庫備份、單表恢復實例

寫在前面:
    筆者在實際工作中發現,對於數據恢復來說,更多情況下面臨的問題是:單個數據庫中的某個或者某幾個表出現了問題,很少對整個庫的數據進行恢復,除非硬盤損壞或者手抖執行了DROP,筆者就單庫備份,單表恢復的場景進行記錄(需要全庫備份、全庫恢復需求的同行,自行百度),如有不當之處,望請留言指正,不勝感激!

環境準備:
        1)Xtrabackup版本的選擇
不同版本的MySQL需要使用不同版本的 Percona XtraBackup。
筆者的MySQL版本是5.6的,需要下載2.2版本的Percona XtraBackup,另外MySQL5.1對應XtraBackup2.1,MySQL5.7對應XtraBackup2.4(筆者,沒有驗證,僅供參考)

[root@backup ~]# xtrabackup --version
xtrabackup version 2.2.13 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 70f4be3)

Percona XtraBackup2.2下載地址

        2)創建一個最小化備份權限用戶

mysql> grant reload,process,lock tables,replication client on *.* to xtrauser@'localhost' identified by 'xtrauser@123';
mysql> flush privileges;

        3)這裏利用的是表空間傳輸特性進行的數據恢復,所以你得是InnoDB表,而且開啓了innodb_file_per_table參數


單庫備份:

[root@backup ~]# innobackupex --databases='bailidb' --defaults-file=/home/data/mysql3306/my.cnf --user='xtrauser' --password='xtrauser@123' --socket='/tmp/mysql.sock' /home/dbback/


數據變更:

UPDATE `bailidb`.`bl_country` SET `keywords` = '取經' WHERE `id` = '8';
INSERT INTO `bailidb`.`bl_auth_assignment` (`item_name`, `user_id`, `created_at`) VALUES ('lzb', '2', '3'); 


增量備份:
[root@backup ~]# innobackupex --defaults-file=/home/data/mysql3306/my.cnf --user='xtrauser' --password='xtrauser@123' --socket='/tmp/mysql.sock' --incremental /home/increment --incremental-basedir=/home/dbback/2019-04-04_16-20-28/


預備完整備份:
[root@backup home]# innobackupex --apply-log --redo-only /home/dbback/2019-04-04_16-20-28/
爲什麼預備完整備份?

因爲在Xtrabackup備份過程中,可能會有新的事務生成,直接進行數據恢復的話,會造成數據的不一致,所以,在數據恢復之前,需要將Xtrabackup備份過程尚未提交的事務回滾,已經提交但未同步的事務進行同步,這個過程就叫預備完整備份


合併增量備份:
[root@backup home]# innobackupex --apply-log --redo-only /home/dbback/2019-04-04_16-20-28/ --incremental-dir=/home/increment/2019-04-04_16-23-45/

爲什麼要合併?

簡單來說,就是將新增數據和原來的數據合併到一起,使其達到數據一致性


數據恢復:

1)將bailidb庫的bl_auth_assignment表在test庫創建(當然了,可以直接在原來的數據表基礎上進行數據恢復,前提是你做了數據備份)

2)丟棄原來的ibd文件表空間

mysql>ALTER TABLE `bl_auth_assignment` DISCARD TABLESPACE

3)複製bl_auth_assignment表的ibd文件,到test庫下

[root@backup home]# cp /home/dbback/2019-04-04_16-20-28/bailidb/bl_auth_assignment.ibd /home/data/mysql3306/test/
[root@backup home]# cd /home/data/mysql3306/test/

4)更改ibd文件權限

[root@backup test]# chown mysql.mysql bl_auth_assignment.ibd

5)導入表空間文件

ALTER TABLE `bl_auth_assignment` IMPORT TABLESPACE

6)最後將其複製到原來的數據庫下(bailidb)

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