• MySQL-使用bin-log日志不停主库,恢复主从同步


    之前编者在前面写过「 Mysql - 主从复制不一致,不停库不锁表恢复主从同步」的文章。但,编者当时觉得太繁琐,恢复速度巨慢(特别是对于大数据的数据库)。所以,在那之后,编者就捣鼓了使用 bin-log 恢复主从同步的方法与大家分享。

    1、搭建 MySQL 主从同步架构

        MySQL 主从同步具体搭建步骤,请参考 CentOS下搭建 MySQL + Keepalived 主从高可用

    2、确认主从的状态,如下图

    主库:

    [root@seichung1 ] mysql -uroot -p
    mysql> show master statusG
    *************************** 1. row ***************************
                 File: skon-binlog.000006
             Position: 582096
         Binlog_Do_DB:
     Binlog_Ignore_DB:
    Executed_Gtid_Set: 6b756fde-4c48-11e9-955f-000c29a9ef8c:1-9428
    1 row in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从库:

    [root@seichung2 ] mysql-uroot -p
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.16.253
                      Master_User: seichung
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: skon-binlog.000006
              Read_Master_Log_Pos: 588147
                   Relay_Log_File: seichung2-relay-bin.000011
                    Relay_Log_Pos: 465208
            Relay_Master_Log_File: skon-binlog.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running Yes
    					……
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    3、修改 my.cnf 文件

        为了保证不会使得 bin-log 日志文件过大,致使后面恢复困难,所以需要在 my.cnf 添加 max_binlog_size = 1G 参数

    [root@seichung1 ] vim /etc/my.cnf
    	max_binlog_size = 1G
    [root@seichung1 ] systemctl restart mysqld
    
    • 1
    • 2
    • 3

    4、模拟从库宕掉,然后创建数据库,导入数据。

    从库:

    [root@seichung2 ] mysql-uroot -p
    mysql> stop slave;
    
    • 1
    • 2

        主库创建 seichung 库,并查看主从同步情况,主从出现不同步,这是因为已经将从库 stop , 所以主从不会进行同步

    主库:

    [root@seichung1 ] mysql-uroot -p
    mysql> create database seichung charset=utf8;
    mysql> show database;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

        接下来,启动 slave ,查看主从的状态。如图:

    [root@seichung2 ] mysql-uroot -p
    mysql> start slave;
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State:
                      Master_Host: 192.168.16.253
                      Master_User: seichung
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: skon-binlog.000006
              Read_Master_Log_Pos: 2365741
                   Relay_Log_File: seichung2-relay-bin.000011
                    Relay_Log_Pos: 2243113
            Relay_Master_Log_File: skon-binlog.000006
                 Slave_IO_Running: No
                Slave_SQL_Running: No
                  Replicate_Do_DB:
                  			……
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    5、恢复主从同步结构。

    5.1、将主库上的 bin-log 日志传到从库上,利用 bin-log 进行数据恢复。

    主库:

    [root@seichung1 ] scp /data/mysql/skon-binlog.000006 root@192.168.18.112:/data/
    
    • 1

    从库:停止从库的 slave,利用 bin-log 恢复数据

    [root@seichung2 ] mysql -uroot -p
    mysql> stop slave;
    [root@seichung2 ] mysqlbinlog /data/skon-binlog.000006 | mysql -uroot -p
    
    • 1
    • 2
    • 3
    5.2、这里有人可能会有疑问,生产环境下,主库是时时刻刻都在写入数据等操作,那么怎么主从同步的数据是一致的呢?

        先不 start slave ,在主从上模拟时刻写入数据(导入数据)。看下主从同步最后是否会恢复。之前只是创建了 seichung 库,seichung库并没有数据。接下来,导入数据到 seichung 库。如下图

    主库:

    [root@seichung1 ]  mysql -uroot -p < seichung.sql
    
    • 1

    在这里插入图片描述

    5.3、校验之前,先来查看下,主库与从库里的数据一致性。

    会发现,主从的数据是不一致的。

    主库:

    [root@seichung1 ] mysql -uroot -p
    mysql> show databases;
    
    • 1
    • 2

    从库:

    [root@seichung2 ] mysql -uroot -p
    mysql> show databases;
    
    • 1
    • 2

    在这里插入图片描述

    5.4、启动 slave ,校验 MySQL 主从同步是否恢复。

    从库:

    [root@seichung2 ] mysql -uroot -p
    mysql> start slave;
    mysql> show slave statusG
    
    • 1
    • 2
    • 3

    主库:

    [root@seichung1 ] mysql -uroot -p
    mysql> drop database ycm;
    
    • 1
    • 2

    在这里插入图片描述
        最后,检查主从的数据一致性。可以看到,主从已经恢复,删除 ycm 库,从库上也会一起删除。如图

    在这里插入图片描述

    from:https://blog.csdn.net/Scirhh/article/details/89480177?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-8.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-8.control

  • 相关阅读:
    Git_创建版本库
    Git_安装Git
    Git_集中式vs分布式
    Git_git的诞生
    echartShow
    微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的
    vue2.0 $router和$route的区别
    vue移动端开发全家桶
    干货分享:vue2.0做移动端开发用到的相关插件和经验总结
    优秀的基于VUE移动端UI框架合集
  • 原文地址:https://www.cnblogs.com/lidabo/p/14292815.html
Copyright © 2020-2023  润新知