mysql備份與恢復-xtrabackup

使用xtrabackup 的innobackupex進行全量備份

[ root@node1 /mydata/backups ]# innobackupex --user=root --password=123 --host=172.18.25.51 /mydata/backups/

備份後出現目錄文件信息如下

[ root@node1 /mydata/backups/2017-11-17_22-14-15 ]# ll
總用量 18460
-rw-r----- 1 root root      417 1117 22:14 backup-my.cnf #顯示配置信息有哪些,對重新啓動mysql是至關重要的。
drwxr-x--- 2 root root       60 11月 17 22:14 hidb
-rw-r----- 1 root root 18874368 1117 22:14 ibdata1 #事物日誌,存在那些未提交,未回滾,未有結果的事物。
drwxr-x--- 2 root root     4096 11月 17 22:14 mysql
drwxr-x--- 2 root root     4096 11月 17 22:14 performance_schema
drwxr-x--- 2 root root       20 11月 17 22:14 test
-rw-r----- 1 root root       22 1117 22:14 xtrabackup_binlog_info # 二進制日誌文件的信息,記錄了我們備份到哪一刻。
-rw-r----- 1 root root      113 1117 22:14 xtrabackup_checkpoints # 記錄了我們備份的屬性。
-rw-r----- 1 root root      497 1117 22:14 xtrabackup_info # 記錄我們使用的備份的工具的信息與備份的詳細信息。
-rw-r----- 1 root root     2560 1117 22:14 xtrabackup_logfile # 記錄了xtrabackup自己的日誌信息。
[ root@node1 /mydata/backups/2017-11-17_22-14-15 ]# cat xtrabackup_binlog_info 
master-log.000014   245
[ root@node1 /mydata/backups/2017-11-17_22-14-15 ]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2284847
last_lsn = 2284847
compact = 0
recover_binlog_info = 0

恢復過程

[ root@node1 /mydata/backups ]# scp -r  /root/percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm 2017-11-17_22-14-15 node2:/root
[ root@node2 /root/backups ]# cd 2017-11-17_22-14-15/
[ root@node1 /mydata/backups ]# innobackupex --apply-log ./
[ root@node1 /mydata/backups ]# innobackupex --copy-back ./
[ root@node1 /mydata/backups ]# cd /var/lib/mysql/
[ root@node2 /var/lib/mysql ]# chown -R mysql.mysql ./*
[ root@node2 /var/lib/mysql ]# systemctl start mariadb
[ root@node2 /var/lib/mysql ]# mysql -uroot -p123      #注意要按照備份的那個數據庫上面的賬號密碼登錄

實驗:做一次完整意義上的全量備份,差異備份,在做一次增量備份,最後一次的增量備份還沒做,服務器崩潰了。(一次完整意思的備份與修復)
實驗前準備
第一次全量備份

[ root@node1 ]# innobackupex --user=root  --host=172.18.25.51 --password=123  /mydata/backups/

刪除一些age=90的students後,做一次差異備份
MariaDB [hidb]> delete from students where age=90;

[ root@node1 ]# innobackupex --user=root  --host=172.18.25.51 --password=123 --incremental /mydata/backups/ --incremental-basedir=/mydata/backups/2017-11-18_09-24-53/

在刪除age=60的students後,做一次增量備份。

[ root@node1 ]# innobackupex --user=root  --host=172.18.25.51 --password=123 --incremental /mydata/backups/ --incremental-basedir=/mydata/backups/2017-11-18_09-30-34/

然後又加入了age=66學生的major=chi huo 後過一會數據庫崩潰了。
MariaDB [hidb]> updata students set major=’chi huo’ where age=66;
現在要開始修復了。
現在要先看一下最新的增量備份到哪個節點了

[ root@node1 /mydata/backups/2017-11-18_09-34-07 ]# cat xtrabackup_binlog_info 
master-log.000015   819

那麼我們就導出從這個節點後的binlog文件

[ root@node1 ~ ]# mysqlbinlog -j 819 /mydata/logs/master-log.000015 > /root/mybinlog.sql

然後開始對全量備份執行命令,使其將已經提交的事務進行“重放”

[ root@node1 ]# innobackupex --apply-log --redo-only /mydata/backups/2017-11-18_09-24-53/

然後重放第一個增量,合併第一個增量。(也就是那個差異備份的)。

[ root@node1 ]# innobackupex --apply-log --redo-only /mydata/backups/2017-11-18_09-24-53/ --incremental-dir=/mydata/backups/2017-11-18_09-30-34/

合併第二個增量,也就是最後一個增量。

[ root@node1 /mydata/backups/2017-11-18_09-24-53 ]# innobackupex --apply-log --redo-only /mydata/backups/2017-11-18_09-24-53/ --incremental-dir=/mydata/backups/2017-11-18_09-34-07/

然後對合並了所有增量的的全量備份進行回滾操作

[ root@node1 /mydata/backups/2017-11-18_09-24-53 ]# innobackupex --apply-log /mydata/backups/2017-11-18_09-24-53/

那麼現在全量備份就是一次完整意義上的備份了
進入合併完成後的全量備份的目錄,查看xtrabackup_checkpoints

[ root@node1 /mydata/backups/2017-11-18_09-24-53 ]# less xtrabackup_checkpoints
backup_type = full-prepared # 完整備份的意思

把剛剛合併回滾完成的全量備份的目錄還有導出的二進制日誌拷貝到要恢復的主機上

[ root@node1 /mydata/backups ]# scp -r 2017-11-18_09-24-53 node2:/root/
[ root@node1 ~ ]# scp mybinlog.sql node2:/root/

然後在主機上開始恢復

[ root@node2 ~ ]# cd 2017-11-18_09-24-53/
[ root@node2 ~/2017-11-18_09-24-53 ]# innobackupex --copy-back ./

然後cd到/var/lib/mysql

[ root@node2 ~/2017-11-18_09-24-53 ]# cd /var/lib/mysql/

然後修改mysql目錄下的文件所有者所有組

[ root@node2 /var/lib/mysql ]# ll

總用量 40976

drwxr-x---. 2 root root       60 1118 10:42 hidb
-rw-r-----. 1 root root 18874368 1118 10:42 ibdata1
-rw-r-----. 1 root root  5242880 1118 10:42 ib_logfile0
-rw-r-----. 1 root root  5242880 1118 10:42 ib_logfile1
-rw-r-----. 1 root root 12582912 1118 10:42 ibtmp1
drwxr-x---. 2 root root     4096 1118 10:42 mysql
drwxr-x---. 2 root root     4096 1118 10:42 performance_schema
drwxr-x---. 2 root root       20 1118 10:42 test
-rw-r-----. 1 root root       35 1118 10:42 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root      576 1118 10:42 xtrabackup_info
[ root@node2 /var/lib/mysql ]# chown -R mysql.mysql ./*

然後進入到數據庫查看

[ root@node2 /var/lib/mysql ]# systemctl start mariadb
[ root@node2 /var/lib/mysql ]# mysql -uroot -p123
MariaDB [(none)]> use hidb;
MariaDB [hidb]> select * from students where age=66; #發現最後一次的操作還沒有同步回來,我們還要導入之前的binlog文件
+-----+--------+------+--------+-------+
| id  | name   | age  | gender | major |
+-----+--------+------+--------+-------+
|   2 | stu2   |   66 | F      | NULL  |
| 182 | stu182 |   66 | F      | NULL  |
| 200 | stu200 |   66 | M      | NULL  |
| 279 | stu279 |   66 | M      | NULL  |
| 547 | stu547 |   66 | M      | NULL  |
| 556 | stu556 |   66 | M      | NULL  |
| 707 | stu707 |   66 | F      | NULL  |
| 748 | stu748 |   66 | M      | NULL  |
| 753 | stu753 |   66 | M      | NULL  |
| 827 | stu827 |   66 | F      | NULL  |
| 863 | stu863 |   66 | F      | NULL  |
| 964 | stu964 |   66 | F      | NULL  |
+-----+--------+------+--------+-------+

12 rows in set (0.00 sec)
我們開始導入二進制日誌,但是要記得把文件複製到/tmp/目錄下,只有這個目錄下,才能讓所有用戶有權限訪問。

[ root@node2 ~ ]# cp mybinlog.sql /tmp/

這次恢復不使用 mysql < mybinlog.sql的方式恢復,使用mysql的命令行的方式
但是使用mysql的命令行恢復的方式,一定要記得臨時關閉二進制日誌的記錄

MariaDB [hidb]> set @@session.sql_log_bin=off;

然後纔可以使用命令讀入日誌

MariaDB [hidb]> \. /tmp/mybinlog.sql

然後一定要記得再次把二進制日誌開啓

MariaDB [hidb]> set @@session.sql_log_bin=on;

然後我們再一次的查看數據

MariaDB [hidb]> select * from students where age=66;
+-----+--------+------+--------+---------+
| id  | name   | age  | gender | major   |
+-----+--------+------+--------+---------+
|   2 | stu2   |   66 | F      | chi huo |
| 182 | stu182 |   66 | F      | chi huo |
| 200 | stu200 |   66 | M      | chi huo |
| 279 | stu279 |   66 | M      | chi huo |
| 547 | stu547 |   66 | M      | chi huo |
| 556 | stu556 |   66 | M      | chi huo |
| 707 | stu707 |   66 | F      | chi huo |
| 748 | stu748 |   66 | M      | chi huo |
| 753 | stu753 |   66 | M      | chi huo |
| 827 | stu827 |   66 | F      | chi huo |
| 863 | stu863 |   66 | F      | chi huo |
| 964 | stu964 |   66 | F      | chi huo |
+-----+--------+------+--------+---------+

恢復完成後別急着上線,趕緊做一次全量備份

[ root@node2 /mydata/backups ]# innobackupex --user=root  --host=172.18.25.52 --password=123  /mydata/backups/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章