开启Mysql二进制在线日志需要配置这几个参数
log_bin=ON #开启Mysql二进制在线日志
log_bin_index=… #二进制文件位置
log_bin_index=…#二进制索引文件位置
server-id = 1 #Mysql实例编号
expire_logs_days=10 #日志文件有效天数
打开my.ini或my.cnf文件
server-id = 1
expire_logs_days=21
binlog_format=row
log_slave_updates=ON
log_bin=D:/mysql-5.7.16-winx64/data/binlog
log_bin_index=D:/mysql-5.7.16-winx64/data/binlog_index
重新启动Mysql
连接Mysql
mysql -uroot -proot
查看在线日志
show master logs
查看当前生效日志状态
show master status
新建日志文件
flush logs;
清空全部日志,重新记录
reset master;
查看在线日志中事件记录
show binlog events in ‘binlog.000001’;
数据备份与恢复
Mysql数据库安全需要依赖Mysql数据库的全量备份和在线日志来保证,全量备份提供每个时间点的数据快照,在线日志能够保证数据微量变化的恢复,需要两者相互配合保证Mysql的数据安全。
恢复误删除的数据正确的操作步骤是:
1、将数据库全量恢复到2号,使用备份集backup2.sql恢复数据库。
2、重新生成在线日志3,使用命令flush logs;保证在线日志3记录所有后续操作,而在线日志2中保留错误删除操作,不再更新。
3、查看在线日志2中事件记录,找出删除操作前面位置编号pos=1,
4、将当前数据恢复到在线日志2的pos=1处,此时误删除的数据尚未删除,相当于找回了数据。
5、开启数据库上的应用,正常使用数据库。
例程:
T0时刻:
重建在线日志,方便在线日志中事件查询
flush logs;
T1时刻:
创建数据库表test
create table test (id int,name varchar(20));
T2时刻:
向表test添加数据
insert into test(id,name) values(1,‘java’);
insert into test(id,name) values(2,‘c++’);
T3时刻:
备份数据库
mysqldump -uroot -proot test > test.sqlT4时刻:
向数据库表test添加数据
insert into test(id,name) values(3,‘python’);
删除表test中id=1的数据
delete from test where id=1;
T5时刻:
需要恢复误删除数据id=1查看在线日志
show master logs;
查看当前日志
show master status;
查看在线日志binlog.000003中的事件
使用全量备份文件test.sql恢复数据库
mysql -uroot -proot test < test.sql;
当前数据库中没有id=3的数据
使用在线日志重演数据库
从pos=4 到 pos=1263的日志记录中包含了
创建表test记录,备份文件test.sql已经包含了test数据库表,所以从4-1263恢复数据会报错误,你可以在当前数据库中删除表test
drop table test;
再执行
mysqlbinlog …/data/binlog.000003 --start-position=4 --stop-position=1263 | mysql -uroot -proot test
数据id=1和id=3的数据都恢复回来。