一、開啓bin-log
1、安裝mysql
[root@zhen ~]# yum -y install mysql mysql-devel mysql-server
2、開啓bin-log功能
[root@zhen ~]# vi /etc/my.cnf 1 [mysqld] 2 datadir=/var/lib/mysql 3 socket=/var/lib/mysql/mysql.sock 4 user=mysql 5 # Disabling symbolic-links is recommended to prevent assorted security risks 6 symbolic-links=0 7 log_bin=mysql_bin
配置保存之後重啓mysqld。
bin-log是執行SQL時產生的日誌文件,只不過該日誌是二進制。作用有兩個:
①數據恢復;
②配置數據庫主從,用於slave可以從master同步數據。
3、確認是否開啓bin-log
登錄數據庫,執行:
mysql> show variables like 'log_bin';
看到確實是開啓的,這樣會在數據庫的datadir目錄下生成格式爲mysql_bin.000001的日誌文件:
二、查看產生的日誌文件
bin-log是二進制文件,不能用vim等文本編輯器打開。Mysql提供了兩種方式查看,在查看之前先執行一些SQL讓文件中有記錄。
mysql> use test; mysql> create table students( id int(10) primary key auto_increment,name varchar(255)); mysql> insert into students (id,name) values (1,'zhangsan'),(2,'lisi'); mysql> select * from students;
第一種查看方式:mysql自帶的mysqlbinlog命令:
[root@zhen ~]# /usr/bin/mysqlbinlog /var/lib/mysql/mysql_bin.000001
以在表中插入數據爲例,來看看日誌的格式:
# at 248 #160711 17:29:00 server id 1 end_log_pos 373 Querythread_id=3exec_time=0error_code=0 SET TIMESTAMP=1468272540/*!*/; insert into students (id,name) values (1,'zhangsan'),(2,'lisi') /*!*/;
“at 248”表示這條記錄的起始位置(position)
“160711 17:29:00”表示記錄產生的時間
“server id 1”表示是哪個服務器產生的記錄
“end_log_pos 373”表示這條記錄的終止位置
最後還能看到執行的SQL。
可以根據記錄的起始位置和時間來恢復數據。
第二種查看方式:
mysql> show binlog events in "mysql_bin.000001";
用這種方式查看就簡潔明瞭了。同樣也能看到記錄的起始位置,執行的SQL等信息。
三、使用bin-log恢復數據
先把剛剛在test庫中創建的表students刪除掉:
mysql> drop table students; Query OK, 0 rows affected (0.01 sec)
刪除之後來恢復這個表,有下面兩種方法:
①根據操作的時間來恢復。
使用mysqlbinlog查看日誌文件,在記錄中找到創建這個表的時間是160711 17:24:00,最後刪除此表的時間是160711 19:10:38,利用這兩個時間點來恢復此表。
[root@zhen ~]# /usr/bin/mysqlbinlog --start-date="2016-07-11 17:24:00" --stop-date="2016-07-11 19:10:38" /var/lib/mysql/mysql_bin.000001 | /usr/bin/mysql -uroot -p
如果沒有設定數據庫密碼,則/usr/bin/mysql
亦可以先導出爲sql文件,再將sql文件導入到數據庫:
[root@zhen ~]# /usr/bin/mysqlbinlog --start-date="2016-07-11 17:24:00" --stop-date="2016-07-11 19:10:38" /var/lib/mysql/mysql_bin.000001 > /tmp/1.sql mysql> source /tmp/1.sql;
②根據操作的起止位置來恢復。
[root@zhen ~]# /usr/bin/mysqlbinlog --start-position=106 --stop-position=373 /var/lib/mysql/mysql_bin.000001 | /usr/bin/mysql -uroot -p
四、小結
1、爲了能在發生災難時恢復數據庫,要現在配置文件中添加log_bin=mysql_bin。“mysql_bin”是日誌文件的格式,可以自定義;
2、使用“mysql> show master status;”來確定數據庫當前使用的是哪個日誌文件。