序
因为使用Nicat连接服务器的MySQL,经常需要添加和删除一些测试数据,但是因为不小心,不需要删除的数据被不小心删除了。具体恢复过程如下。
平稳运转
1、第一步
显示变量,如& # 39;% log _ bin % & # 39;
如果log_bin开启,表示可以恢复;如果关闭,则不会打开binlog,也不会提前生成回滚SQL,所以可能无法快速回滚,但似乎可以通过ibd恢复。详情请参考blog.csdn.net/hanjun0612/article/d….
2.检查数据文件存储路径。
显示变量,如& # 39;% datadir % & # 39;
打开数据库所在的路径,查看mysql-bin等文件。****,注意删除时间,对比mysql-bin文件的修改时间。
3.找到mysql安装路径。
显示变量,如& # 39;% basedir % & # 39;
mysqlbinlog.exe-无默认值-开始日期时间= & # 34;2021-11-10 15:30:00"-停止日期时间= & # 34;2019-11-26 18:10:00"-vv D:\\ MySQL-8 . 0 . 26-winx 64 \\ data \\ bin log . 000009 & gt;D:\\update\\mysqllog.sql
mysqlbinlog命令的参数描述
-base64-output = decode-rows//Characters,正常数据转换。如果未设置该参数,将显示base64的数据。
-vv将二进制转换成可读文本。
-database = DBName///数据库名(mysql数据库比较多,恢复起来比较方便)。
-开始日期时间= & # 34;2019-11-26 18:00:00"//恢复开始时间
-停止日期时间= & # 34;2019-11-26 18:10:00"//恢复结束时间
d:\\ MySQL \\ data \\ MySQL-bin _ copy . 000028//用于数据恢复的日志文件。
Mysqllog.sql //恢复后我们需要的文件名。
当使用mysqlbinlog将binlog文件转换为可读内容时,您可能会得到一个错误:
mysqlbinlog MySQL-bin . 000004 mysqlbinlog:未知变量& # 39;default-character-set = utf8 & # 39;
原因是工具mysqlbinlog无法识别binlog中配置中的命令default-character-set=utf8。
有两种方法可以解决这个问题。
首先在MySQL configuration /etc/my.cnf中把默认的-character-set=utf8改为character-set-server = utf8,但这需要重启MySQL服务。如果你的MySQL服务比较忙,成本会比较高。
其次,使用mysqlbin log–no-defaults MySQL-bin . 000004命令打开它。
4.恢复sql语句
执行
$ cat MySQL log . SQL | LC _ CTYPE = C sed-n & # 39;/# # #/p & # 39;| sed & # 39s/# # #//g;s/\\/\\*。*/,/g;s/从/g中删除/插入/g;s/WHERE/SELECT/g;'| sed-r & # 39;s/(@6。*),/;/g & # 39;| sed & # 39s/@[1-9]=//g & # 39;| sed & # 39s/@[1-9][0-9]=//g & # 39;& gt结果. sql
结论
一定要打开mysql中的binlog函数,打开binLog函数方法(windows),打开my.ini文件,添加以下配置,重启Mysql打开。
#垃圾箱
log-bin=mysql-bin
binlog_format = ROW
另外,操作前必须打开事务,操作结果达到预期后才能提交事务,遇到问题可以回滚。在执行DML操作之前,用begin或START TRANSACTION启动一个事务。如果有必要回滚事务,请使用rollback来确认已提交的事务使用了commit。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。