需求背景
数据库误操作(删除/更新)恢复。
思路
利用MySQL binlog来恢复指定时间范围的数据,一般来说生产环境有定期备份数据库,先用备份数据库恢复到相近的时间节点,再用binlog恢复备份时间点到故障发生的时间点这段时间的数据。
步骤
开启binlog
创建新数据表(数据库)
插入测试数据并备份数据库
插入测试数据
清空表(模拟数据库误操作)
利用相近备份数据恢复大部分数据
利用biglog恢复备份时间点到故障发生时间点的数据
开启binlog
登陆mysql,检查是否开启binlog, 如果是log_bin对应value是off 就说明没有开启
开启binlog只需要在my.cnf中增加如下配置
特别说明:mysql-bin生成文件的前缀,错误会启动不了mysql,不能只写路径不写前缀
创建新数据表(数据库)
用navicat在已有的数据库(study)创建了一个表(bin_log_test)
插入测试数据并备份数据库
利用navicat新增两条数据
备份数据库命令:
mysqldump -uroot -p123789jt study bin_log_test > /usr/2021-08-14-study-binlogtest;
插入测试数据
清空表(模拟数据库误操作)
利用相近备份数据恢复大部分数据
mysql -uroot -p123789jt study < /usr/2021-08-14-study-binlogtest
利用biglog恢复备份时间点到故障发生时间点的数据
命令(mysqlbinlog 这个命令在安装目录的bin文件夹):mysqlbinlog --start-position=0 --stop-position=469 /var/lib/mysql/mysql-bin.000002 | mysql -uroot -p123789jt
特别说明:这里先用mysqlbinlog 命令查看binlog内容,确定需要恢复的数据在那个范围,再用-start-position --stop-position 来指定范围,这样就可以恢复想恢复的数据啦
补充:可以通过时间恢复,利用start-datetime/stop-datetime参数指定时间范围
总结:
以上步骤就是学习MySQL利用binlog来恢复数据的全过程,供大家入门学习参考。