標籤:database master 資料恢複 events create
MySQL備份一般採取全備份加記錄備份的方式,比如每天執行一次全備份,每小時執行一次二進位記錄備份。這樣在MySQL Server故障後可以使用全備份和記錄備份將資料恢複到最後一個二進位記錄備份前的任意位置或時間。用來進行全備和日誌備的工具各種各樣,各有其特色,在這裡不做描述。本文主要講解一下在回複完全備份後,如何應用備份的二進位日誌來將資料恢複到指定的位置或時間點。
這裡有個十分重要的工具——mysqlbinlog,專門用來查看二進位日誌。我們以一些列子來說明問題:
先看看如何在MySQL Server中直接查看有哪些二進位記錄檔及檔案中包含哪些事件。
首先,查看正在使用的binlog日誌
mysql> show master status;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/75/04/wKioL1YwpxiRC_9lAADTt39O-Lw805.jpg" title="1.png" alt="wKioL1YwpxiRC_9lAADTt39O-Lw805.jpg" />
mysql> show binlog events in "mysql-bin.000002";
這條命令查看記錄在binlog日誌中執行的sql命令。
例如:先建立一個資料庫,在庫中建一個表,表中添加資料。
mysql> create database user_test;
Query OK, 1 row affected (0.00 sec)
mysql> use user_test;
Database changed
mysql> create table test(id char(3),name varchar(20),age varchar(3));
Query OK, 0 rows affected (0.36 sec)
mysql> insert into test values(1,‘wangdi‘,27);
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | wangdi | 27 |
+------+--------+------+
1 row in set (0.00 sec)
這時刪除資料庫:
mysql> drop database user_test;
Query OK, 1 row affected (0.08 sec)
資料庫刪除之後,想要恢複查看binlog中的資訊
mysql> show binlog events in "mysql-bin.000002";
找到檔案中的sql語句,執行即可。
也可以應用mysqlbinlog工具
[[email protected] data]# /usr/local/mysql/bin/mysqlbinlog --start-position=4797 --stop-position=5425 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p
4797 是我建立資料庫的節點,執行完命令後恢複資料庫,但是這裡只是恢複一個庫,裡面的表資料沒有
[[email protected] data]# /usr/local/mysql/bin/mysqlbinlog --start-position=4954 --stop-position=5425 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p
4954 是我建立表的節點,執行完命令後恢複表結構,但是表裡的資料沒有
[[email protected] data]# /usr/local/mysql/bin/mysqlbinlog --start-position=5224 --stop-position=5425 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p
5224 是插入資料的語句,這樣被刪除的資料庫就恢複了。
重新查看一下:
mysql> select * from test;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | wangdi | 27 |
+------+--------+------+
mysql用binlog檔案進行資料恢複