首先开启binlog。
修改mysql配置/etc/mysql/mysql.conf.d/mysqld.cnf(window环境是mysql安装目录的my.ini)
server-id = 10 //mysql服务器的唯一标示
log_bin = /var/log/mysql //存放二进制log文件的路径
重启mysql。
进入Mysql执行下面命令。
show variables like '%log_bin%';
显示这些信息就表示配置成功。
log_bin ON
log_bin_basename /var/log/mysql/mysql-bin
log_bin_index /var/log/mysql/mysql-bin.index
log_bin_trust_function_creators OFF
log_bin_use_v1_row_events OFF
sql_log_bin ON
查看日志文件
show master status;
mysql-bin.000001 154
mysql-bin.000001 文件是二进制文件。
我们可以在终端使用Mysql的 mysqlbinlog 工具。
查看log命令
mysqlbinlog /var/log/mysql/mysql-bin.000001;
导出命令
mysqlbinlog /var/log/mysql/mysql-bin.000001 > /var/log/mysql/000001.txt;
导出某段时间命令
mysqlbinlog --start-datetime='2016-11-15 00:00:00' --stop-datetime='2016-11-16 00:00:00' /var/log/mysql/mysql-bin.000001 > /var/log/mysql/000001.txt
导出某段位置命令
mysqlbinlog --start-position='50' --end-position='100' /var/log/mysql/mysql-bin.000001 > /var/log/mysql/000001.txt
其他操作可以查看MySQL的帮助手册。
下面实现误操作的数据恢复。
重新生成bin-log
flush logs;
查看日志文件
show master status;
mysql-bin.000002 154
创建测试表
create table test(id int(11) auto_increment not null primary key, val varchar(20));
插入数据
insert into test(val) values('liang');
insert into test(val) values('jia');
误删除了这个表
drop table test;
然后是查看binlog文件。
show master status;
导出binlog
mysqlbinlog /var/log/mysql/mysql-bin.000002 > /var/log/mysql/000002.txt;
打开000001.txt 可以看到位置1123执行删除操作。
#161116 15:10:41 server id 10 end_log_pos 996 CRC32 0xe8c2dd15 Anonymous_GTIDlast_committed=3sequence_number=4
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 996
#161116 15:10:41 server id 10 end_log_pos 1123 CRC32 0x8956ff72 Querythread_id=7exec_time=0error_code=0
SET TIMESTAMP=1479309041/*!*/;
DROP TABLE `test` /* generated by server */
执行命令恢复数据。
sudo mysqlbinlog mysql-bin.000002 --stop-position=996 | mysql -uhomestead -p
输入数据库密码。重新进入mysql,数据恢复了。