因为一些意外操作,用旧的备份覆盖了最新的数据库 数据,导致 最近几天内的数据被覆盖掉了。
百度了一圈。。用mysqlbinlog恢复比较靠谱,网上查 感觉 操作也比较简单。。实际吧。费点劲。。
MySQL 的Binlog是用于记录数据库中所有操作的日志文件。通过检查日志文件,可以找到误删除的数据,并进行恢复。
1.进入到数据库中,通过"SHOW BINARY LOGS;" 或者 "SHOW MASTER LOGS;" ,可查看所有可用的binlog文件,两种命令查询结果一致(具体没研究)
2.通过"SHOW MASTER STATUS;",查看master状态,即最后(最新)一个binlog日志的编号名称。
3.我们可以将该文件导出为 sql 或者 txt 文件:
3.1 全部导出(不建议)
eg:mysqlbinlog --set-charset=utf8 /www/server/data/mysql-bin.000004 > tmp.sql
3.2 制定一个时间区间来导出(因为我是明确知道我是在什么时间点误操作的,可以快速进行定位)
eg:mysqlbinlog --base64-output=decode-rows -v --database='数据库名' --start-datetime="2023-10-25 11:00:00" --stop-datetime="2023-10-25 12:00:00" /www/server/data/mysql-bin.000004 > tmp.sql
ps:tmp.sql 打开后可以很明显看到具体都进行了哪些sql操作。
4.使用mysqlbinlog命令进行恢复数据操作(实际是把这个(时间)区间内所有的数据库操作 增删改 操作一遍。)
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
mysqlbinlog常用参数
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2016-9-25 22:01:08" 起始时间点
--stop-datetime="2019-9-25 22:09:46" 结束时间点
--database=ops指定只恢复ops数据库(一台主机上往往有多个数据库,只限本地log日志)
eg:mysqlbinlog --start-datetime="2023-10-20 11:00:00" --stop-datetime="2023-10-25 11:50:00" /www/server/data/mysql-bin.000004 --database=数据库名 | mysql -uroot -p密码
PS:可能遇到的问题。
1.mysqlbinlog 如果显示找不到命令(-bash:mysqlbinlog:command not found),可以通过映射方式去解决,
简单说下,通过which mysqlbinlog 确认是不是这个原因,
一般mysqlbinlog和mysql 安装在同一路径,可以查看mysql/bin目录下是否有mysqlbinlog。
进入映射文件夹 cd /usr/local/bin
做映射:ln -s /www/server/mysql/bin/mysqlbinlog mysqlbinlog
标签:00,--,恢复,数据库,datetime,mysql,mysqlbinlog From: https://www.cnblogs.com/cheatingcat/p/17838303.html