• MySQL update回滚 mysqlbinlog回复数据


    是否启用了日志
    show variables like 'log_%';
    怎样知道当前的日志
    mysql> show master status;
    显示二进制日志数目
    mysql> show master logs;
    
    看二进制日志文件用mysqlbinlog
    shell>mysqlbinlog mail-bin.000001
    或者shell>mysqlbinlog mail-bin.000001 | tail

    重点文档:https://github.com/danfengcao/binlog2sql

    mysqlbinlog: 未找到命令

    打开方法:mysql配置文件中找到#log-bin=mysql-bin,并取消注释即可。

    要用到mysqlbinlog,mysqlbinlog在mysql目录bin里,切换目录后执行mysqlbinlog提示

    -bash: mysqlbinlog: command not found

    找不到命令,那就先解决这个问题,解决方法:

    find  / -name mysqlbinlog -print

    如图:

    只有/www/server/mysql/bin/mysqlbinlog 一条记录,这是我mysql的目录

    然后把mysqlbinlog做个软连接到/usr/bin

     ln -fs /www/server/mysql/bin/mysqlbinlog /usr/bin

    然后再执行find  / -name mysqlbinlog -print查看

    你会发现多了一条,报错忽略。现在,就可以正常使用mysqlbinlog了。

    我的做法是导出sql文本,在本地恢复,导出方法是:

    mysqlbinlog /www/server/linshi/mysql-bin.000087 --start-datetime='2018-01-09 00:00:00' --stop-datetime='2018-01-10 00:00:00' > /www/server/linshi/1233.sql

    /www/server/linshi/mysql-bin.000087  是日志文件所在

    /www/server/linshi/1233.sql 是要导出的位置

    很快执行完毕,切换到相应目录后就会看到1233.sql文件,再导入数据库恢复吧

    执行的语句

    sudo mysqlbinlog /usr/local/mysql/var/mysql-bin.000116 --start-datetime='2020-04-02 10:00:27' --stop-datetime='2020-04-02 10:18:27'>/tmp/123.sql

    获取文件进行恢复
    1、直接进行恢复
    mysqlbinlog /usr/local/mysql/data/binlog.123456 | mysql -u root -p
    2、按位置进行恢复 主要参数[–stop-position –start-position]
    mysqlbinlog –stop-position=368312 –start-position=368315 /usr/local/mysql/data/binlog.123456 | mysql -u root -p
    这里的位置可以通过读取binlog文件进行查看,不过这个也必须自己知道进行了那些操作。后面说如果看到的文件都是乱码或者看不到真正sql的问题
    3、按时间点进行恢复 主要参数 [–stop-datetime –start-datetime]
    mysqlbinlog –stop-datetime=”2005-04-20 9:59:59” –start-datetime=”2005-04-20 10:01:00” /usr/local/mysql/data/binlog.123456 | mysql -u root -p
    时间点恢复跟位置恢复道理一样,也必须知道具体操作的时间和要恢复到什么时间
    4、不同的方式进行恢复
    1、如果是登录到了mysql并且binlog也是在一台服务器上切一般binlog的目录会在mysql安装目录下data文件下那么就可以直接进行恢复
    这种情况可以直接在mysql下执行命令
    2、如果是只拿到了binlog文件,并且是线下的服务器需要先尝试数据正确后再导入生产的
    这种情况可以先把binlog文件输出到你制定的sql文件如:
    mysqlbinlog /usr/local/mysql/data/binlog.123456 > /tmp/mysql.sql
    这样的输出有可能是看不到任何有价值的sql如果想看到标准的sql可以使用
    mysqlbinlog –base64-output=DECODE-ROWS -v /usr/local/mysql/data/binlog.123456 > /tmp/mysql.sql

    上面的情况也可能得到的sql不是想要的需要进行替换,那么如果数据量少手动替换@1@2就可以如果比较多建议使用开源工具mysql2binlog github地址:https://github.com/danfengcao/binlog2sql

    最后一点线上数据一定要当心,虽然mysql有binlog机制,但还是希望人尽量少用它!

    问题:

    binlog2sql 回滚sql 产生的sql 为空,错误的sql 找到了,生成回滚sql 的时候为空,这是为什么呢

    就是找到日志文件了,但是在生成回滚sql 的时候,生成的sql 为空,有人遇到过吗 欢迎大佬指正,小弟感激不尽!

    my.cnf配置文件如下:

    参考:https://blog.csdn.net/flower_vip/article/details/79032999

    参考:https://my.oschina.net/u/3486280/blog/1605031

    Mysql binlog 查看方法

    查看二进制文件,并搜索关键字

    mysqlbinlog master-bin.000014|grep -5a "DROP TABLE"

  • 相关阅读:
    POJ2142:The Balance——题解
    POJ1061:青蛙的约会——题解
    接口测试结束后的小结
    接口测试结束后的小结
    如何进行需求测试/需求评审
    如何进行需求测试/需求评审
    测试人员掌握代码的重要性
    测试人员掌握代码的重要性
    测试人员掌握代码的重要性
    软件自动化测试开发-开班啦
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452863.html
Copyright © 2020-2023  润新知