• binlog开启和查看


    1. 首先需要将mysql的binlog日志打开。默认是关闭的。

    参考网址:Windows下Mysql5.7开启binlog步骤及注意事项(https://www.cnblogs.com/wangwust/p/6433453.html)

    参考网址:https://blog.csdn.net/zjerryj/article/details/77152226

    参考网址:mysql row日志格式下 查看binlog sql语句

    参考网址:GTID binlog解析后导入无效

    使用mysql Command Line Clinet。

    查看是否已开启binlog日志输出。

         --》 show binary logs;      ERROR 1381 (HY000): You are not using binary logging (表示未开启)

                ※注意: my.ini 存放在 C:ProgramDataMySQLMySQL Server 5.7 而非 Program文件目录下,注意ProgramData文件夹默认是隐藏不显示。

                 Windows下MySQL的配置文件是my.ini 在主目录下

                 Linux下是/etc/my.conf

     用管理员身份打开my.ini,添加binlog输出

    # binlog node
    log_bin = mysql-bin
    binlog_format = ROW
    server_id=1

    注意有可能server_id已经存在,这个ID要唯一,不能和别的slave_id重复。

    #修改UTF8         

    default-character-set=UTF8

    character-set-server=UTF8

    ※   注意不是UTF-8

    由于binlog日志不会自动清除,因此需要手动设置过期删除,防止文件过大占用内存。

    expire-logs-days=30

    重启mysql57服务。

    mysql服务添加到path中则直接在控制台:

    --》C:WINDOWSsystem32>net stop mysql57

    --》C:WINDOWSsystem32>net start mysql57

    此时在mysql Command Line Client:

                    --> show binary logs;   可查看binlog日志

                     -->  show variables like '%log_bin%';   这个亦可说明log是否有开启

                     -->   set global expire_logs_days=30;     //防止binlog积压,占用内存,设置失效30天

                     -->  show variables like '%expire_logs_days%';  //查看

    生成的binlog日志默认就在log_bin 给的文件位置下,如果没有路径就是my.ini对应的data文件夹下。

    log_bin = D:logmysqlmysql-bin

      ※注意:对应的文件夹要存在,否则无法启动。

    mysql-bin.000001
    mysql-bin.index

    查看:

        --》show binlog events;     //获取第一个binlog的日志

       --》 show binlog events in 'mysql-bin.000002';      //获取指定的binlog日志

       --》 show master statusG;                                  //查看当前正在写入的binlog日志

       --》 show binlog events from 219;                         //根据pos获取日志

    在cmd下使用mysqlbinlog转化binlog二进制日志还原为sql:

           -》mysqlbinlog -d [schemal] --start-datetime="2018-10-15 8:10:01" --stop-datetime="2018-10-15 18:10:00" d:logmysqlmysql-bin.000001 > d:loginsert.sql

    这样就可以还原之前被处理掉的数据。

    如果查看到的sql文件中并不能直接看到insert或update,delete语句,而有base64加码的数据,则需要在导出sql时做转化。

          -》 mysqlbinlog --base64-output=decode-rows -v -d [schemal] --start-datetime="2018-10-15 8:10:01" --stop-datetime="2018-10-15 18:10:00" d:logmysqlmysql-bin.000002 > d:loginsert2.sql

        也可以使用position代替date。

        --start-position

        --stop-position

    可以直接执行binlog进行还原:

        --》mysqlbinlog -d [schema] --start-datetime="2018-10-15 8:10:01" --stop-datetime="2018-10-15 18:10:00" d:logmysqlmysql-bin.000004 |mysql -u root -p

    我们可以直接将还原的sql直接执行。

        --》mysql source  D:loginsert4.sql

    ※  执行后发现数据并未同步到数据库中,提示信息正常。

         打开 insert4.sql发现里面有好多SET @@SESSION.GTID_NEXT= [序列码]

         此内容为事务控制用的信息,但这些信息已经被用过了,被记入到Executed_Gtid_Set中,因此执行被跳过。

        在导出sql的语句中添加  --skip-gtids=true

                 

    
    
    
  • 相关阅读:
    NHibernate版本不一致问题
    .NET中AOP的几种实现方案
    转播
    看来不得不来谈谈这个首页精华区了
    事件与委托
    关于字符集和字符编码以及代码页的前前后后(续)
    让电脑像人脑一样思考,谁养鱼问题断言推理解法
    关于那个脑袋的很漂漂的图形的C#版本
    大家都有头像,我来测试下我的新头像。
    浅谈JavaScript中的对象和类型(上)
  • 原文地址:https://www.cnblogs.com/DennyZhao/p/9789809.html
Copyright © 2020-2023  润新知