1. 程式人生 > >使用xtrbackup/mysqldump全量備份+binlog備份恢復到最近一個時間點

使用xtrbackup/mysqldump全量備份+binlog備份恢復到最近一個時間點

先用xtrabackup做全備:
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=123 /home/backup/xtrabackup/
全備完成之後新建sanguoyanyi表,並插入資料:
mysql> create table sanguoyanyi (
    -> id int,
    -> people varchar(13)
    -> );
Query OK, 0 rows affected (0.12 sec)
mysql> insert into sanguoyanyi values (1,'guojia');
Query OK, 1 row affected (0.01 sec)
關閉mysql:
service mysql stop
mv /data/mysql/data_test/* /data/mysql/data/
注:不能先mv再關閉mysql;這樣的話,在進行xtrabackup做資料恢復的時候會報錯如下:
Original data directory /data/mysql/data_test is not empty!
檢視目錄:
[
[email protected]
data_test]# ls
ib_buffer_pool
原因:這個檔案會在mysql關閉的時候生成,具體和innodb_buffer_pool_dump_at_shutdown=on引數有關
mysql> show variables like 'innodb_buffer_pool_dump_at_shutdown';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| innodb_buffer_pool_dump_at_shutdown | ON    |
+-------------------------------------+-------+
1 row in set (0.00 sec)
恢復全備資料:

innobackupex --apply-log --redo-only /home/backup/xtrabackup/2017-05-12_02-37-01/
innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /home/backup/xtrabackup/2017-05-12_02-37-01/
chown -R mysql:mysql /data/mysql/data_test/
service mysql start
檢視資料,資料恢復到全備時候:
mysql> show tables;
+------------------+
| Tables_in_sbtest |
+------------------+
| Shuihuzhuan      |
| hongloumeng      |
| test             |
| xiyouji          |
+------------------+
4 rows in set (0.00 sec)
檢視全備的時候最後的binlog的位置:
[
[email protected]
2017-05-12_02-37-01]# cat xtrabackup_binlog_info 
mysql-bin.000019 154
重新啟動mysql之後的binlog位置:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000020 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
利用binlog恢復到最近一個時間點:
mysqlbinlog mysql-bin.000019 mysql-bin.000020 --start-position=154 | mysql -uroot -p -S /usr/local/mysql5711/mysql.sock
檢視資料:
mysql> show tables;
+------------------+
| Tables_in_sbtest |
+------------------+
| Shuihuzhuan      |
| hongloumeng      |
| sanguoyanyi      |
| test             |
| xiyouji          |
+------------------+
5 rows in set (0.00 sec)
mysql> select * from sanguoyanyi;
+------+--------+
| id   | people |
+------+--------+
|    1 | guojia |
+------+--------+
1 row in set (0.00 sec)
資料恢復到最新的時間點。
注:當多個二進位制日誌檔案同時執行時,--start-position和--stop-position分別只應用於第一個列出的二進位制日誌檔案和最後一個列出的二進位制日誌檔案