开启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

mysql线上练习平台 mysql在线_mysql


查看当前生效日志状态

show master status

mysql线上练习平台 mysql在线_数据库_02


新建日志文件

flush logs;

mysql线上练习平台 mysql在线_mysql_03


清空全部日志,重新记录

reset master;

mysql线上练习平台 mysql在线_mysql线上练习平台_04


查看在线日志中事件记录

show binlog events in ‘binlog.000001’;

mysql线上练习平台 mysql在线_数据库_05

数据备份与恢复

Mysql数据库安全需要依赖Mysql数据库的全量备份和在线日志来保证,全量备份提供每个时间点的数据快照,在线日志能够保证数据微量变化的恢复,需要两者相互配合保证Mysql的数据安全。

mysql线上练习平台 mysql在线_sql_06


恢复误删除的数据正确的操作步骤是:

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++’);

mysql线上练习平台 mysql在线_mysql_07


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;

mysql线上练习平台 mysql在线_mysql线上练习平台_08


T5时刻:

需要恢复误删除数据id=1查看在线日志

show master logs;

mysql线上练习平台 mysql在线_dba_09

查看当前日志

show master status;

mysql线上练习平台 mysql在线_mysql线上练习平台_10

查看在线日志binlog.000003中的事件

mysql线上练习平台 mysql在线_sql_11

使用全量备份文件test.sql恢复数据库

mysql -uroot -proot test < test.sql;

mysql线上练习平台 mysql在线_sql_12


当前数据库中没有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

mysql线上练习平台 mysql在线_mysql线上练习平台_13


数据id=1和id=3的数据都恢复回来。