mysql数据库恢复

场景:虽然每天凌晨3点都会使用mysqldump命令备份爱乐会员俱乐部的数据库,但是有可能数据库备份完成以后,用户又做了很多操作,然后数据库服务器出现问题,所有数据都没有了,那么只使用备份的数据无法完全恢复数据,只能恢复到凌晨3点的数据。

想要恢复完整数据,需要用到log-bin二进制日志,二进制日志用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息。

 

二进制日志的作用

MySQL Binary Log也就是常说的log-bin, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: 

  • 数据恢复
  • 主从数据库。用于slave端执行增删改,保持与master同步。

 

1、查看是否开启二进制日志

使用mysql -uroot -p命令进入后,执行:show variables like '%log_bin%';

可以看到log_bin对应的值是ON,所以已经开启了。mysql数据库恢复_第1张图片

2、开启二进制日志

如果没有开启的话,需要修改mysql的my.ini(window系统)文件,或者my.cnf(Linux系统)文件。

在[mysqld]下面,添加一行内容,如下:

#设置日志格式

binlog_format = mixed

#设置日志路径,注意路经需要mysql用户有权限写

log-bin=D:\mysql\data\mysql_log_bin

#设置binlog清理时间

expire_logs_days = 7

#binlog每个日志文件大小

max_binlog_size = 100m

配置保存以后重启mysql,用show variables like  '%bin%'查看bin-log是否开启

3、查看二进制文件

第一种:

在客户端中使用  show binlog events in 'mysql_log_bin.000040'\G; 语句进行查看,为了排序美观,可以在结尾加\G使结果横变纵,此时结尾无需加;语句结束符。 

mysql数据库恢复_第2张图片

  • Log_name:此条log存在那个文件中,从上面可以看出这2条log皆存在与mysql_bin.000001文件中。
  • Pos:log在bin-log中的开始位置
  • Event_type:log的类型信息
  • Server_id:可以查看配置中的server_id,表示log是那个服务器产生
  • End_log_pos:log在bin-log中的结束位置
  • Info:log的一些备注信息,可以直观的看出进行了什么操作

第二种:

在CMD窗口,执行命令:mysqlbinlog D:\mysql\data\mysql_log_bin.000041mysql数据库恢复_第3张图片

 

第二种查看方式,有时会报错,查看的内容不全,推荐使用第一种方式查看。mysql数据库恢复_第4张图片

 

参考地址:https://www.jb51.net/article/76017.htm

4、重新生成一个二进制文件

日志更换策略

  使用索引来循环文件,在以下条件将循环至下一个索引

  a.服务器重启

  b.服务器被更新

  c.日志达到了最大日志长度max_binlog_size

  d.日志被刷新mysql> flush logs;

参考地址:https://www.cnblogs.com/Richardzhu/p/3225254.html

第一种:重启mysql服务。

第二种:在客户端执行命令flush logs,执行完成后,会看到D:\mysql\data目录下面添加了一个新的二进制文件mysql_log_bin.000040

 

5、利用bin_log恢复数据

1、恢复指定数据库的数据

mysqlbinlog --start-datetime="2018-10-15 16:30:00" --stop-datetime="2020-10-15 17:00:00" D:\mysql\data\mysql_log_bin.000040 | mysql -uroot -p

 

2、恢复指定开始位置和结束位置的数据

mysqlbinlog --start-position="199" --stop-position="326" D:\mysql\data\mysql_log_bin.000040 | mysql -uroot -p

 

参考地址:https://blog.51cto.com/kerry/146259

 

 

你可能感兴趣的:(数据库,mysql)