• mysql5.7版本数据库主主同步


    双主模式定义

    双主模式是指两台服务器互为主从,任何一台服务器数据变更,都会通过复制应用到另外一方的数据库中。

    在这里插入图片描述

    随着业务发展,架构会从主从模式演变为双主模式,建议用双主单写,再引入高可用组件,例如 Keepalived和MMM等工具,实现主库故障自动切换。

    前提配置

    两台mysql服务器作为master1 和 master2

    一、master_1配置

    修改配置文件:

     1 | vim /etc/my.cnf
    
    • 1

    在主从配置的基础上追加配置

    #主从配置
    log_bin=mysql-bin
    server-id=1
    sync-binlog=1
    binlog-ignore-db=performance_schema
    binlog-ignore-db=information_schema
    binlog-ignore-db=sys
    
    #追加双主配置
    relay_log=mysql-relay-bin
    log_slave_updates=1
    
    auto_increment_offset=1
    auto_increment_increment=2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    请添加图片描述

    1、配置完后重启mysql

    service mysqld restart
    
    • 1

    2、登录master1的mysql数据库

    mysql -uroot -p
    
    • 1

    3、在master1服务器上创建用于复制的用户,并授权:

    mysql> grant replication slave on *.* to 'root'@'%' identified by 'Admin@123';
    mysql> grant all privileges on *.* to 'root'@'%' identified by 'Admin@123';
    mysql> flush privileges;
    
    • 1
    • 2
    • 3

    将“root”替换为你自定义的用户名,将“Admin@123”替换为对应的密码。

    4、查看master1状态

    mysql> show master status;
    
    • 1

    请添加图片描述

    master_1的File和Position这两个参数在mater_2上要用到,用于建立关系。

    二、master_2配置

    1、修改配置文件

    vi /etc/my.cnf
    
    • 1

    2、master2配置如下

    log-bin=mysql-bin
    server-id=3
    sync-binlog=1
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    binlog-ignore-db=sys
    
    relay_log=mysql-relay-bin
    log_slave_updates=1
    auto_increment_offset=2
    auto_increment_increment=2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    请添加图片描述

    3、配置完重启master2

    service mysqld restart
    
    • 1

    4、登录master2数据库

    mysql -uroot -p
    
    • 1

    5、在master2服务器上创建用于复制的用户,并授权:

    mysql> grant replication slave on *.* to 'root'@'%' identified by 'Admin@123';
    mysql> grant all privileges on *.* to 'root'@'%' identified by 'Admin@123';
    mysql> flush privileges;
    
    • 1
    • 2
    • 3

    6、查看master2状态

    mysql> show master status;
    
    • 1

    请添加图片描述

    master2的File和Position这两个参数在mater1上要用到,用于建立关系。

    三、双主配置

    1、master1建立和master2的关系

    mysql> change master to master_host='172.16.100.233',master_port=3306,master_user='root',master_password='Admin@123',master_log_file='mysql-bin.000008',master_log_pos=3802974;
    
    • 1

    master_host:master2的host
    master_port:master2的port
    master_user:master2的用户名
    master_password:master2的密码
    master_log_file:master2的log_file,即之前查询出的master2的File
    master_log_pos:master2的log_pos,即之前查询出的master2的Position

    2、master1启动slave,并查看状态

    mysql> start slave;
    mysql> show slave status \G;
    
    • 1
    • 2

    请添加图片描述

    注意没报错并且Slave_IO_Running和Slave_SQL_Running都为YES,则配置成功。

    3、master2建立和master1的关系

    mysql> change master to master_host='172.16.106.200',master_port=3306,master_user='root',master_password='Admin@123',master_log_file=='mysql-bin.000003',master_log_pos=6021336;
    
    • 1

    master_host:master1的host
    master_port:master1的port
    master_user:master1的用户名
    master_password:master1的密码
    master_log_file:master1的log_file,即之前查询出的master2的File
    master_log_pos:master1的log_pos,即之前查询出的master2的Position

    4、master2启动slave,并查看状态

    mysql> start slave;
    mysql> show slave status \G;
    
    • 1
    • 2

    请添加图片描述

    注意没报错并且Slave_IO_Running和Slave_SQL_Running都为YES,则配置成功。

    四、验证主主同步

    1、登录master1,创建数据库 test_slave

    CREATE DATABASE test_slave;
    
    • 1

    2、创建表

     CREATE TABLE `test_tbl` (
       `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
       `title` varchar(100) NOT NULL,
       `update_date` date DEFAULT NULL,
       PRIMARY KEY (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3、插入数据

    INSERT INTO `test_slave`.`test_tbl`(`id`, `title`, `update_date`) VALUES (1, '白色', '2020-07-10');
    
    • 1

    4、更新数据

    UPDATE `test_slave`.`test_tbl` SET `title` = '黑色', `update_date` = '2020-07-10' WHERE `id` = 1;
    
    • 1

    查看master1、master2 节点数据是否相同

  • 相关阅读:
    volatile原理及happens-before规则
    SpringBoot的shiro实现认证
    Flink / SQL - 7.一文搞懂常规 Sql TopN 与 Sql Window TopN
    git工具基本操作命令
    可能是入门高阶数学的好通道 —— 很直观易记,又很难判断的真假的数学命题们
    如何获取cat_get-淘宝分类详情API接口
    [附源码]java毕业设计流浪动物救助网站
    JAVA后台 SpringBoot 配置
    【环境搭建】linux docker-compose安装gitlab和redis
    python爬虫代理ip关于设置proxies的问题
  • 原文地址:https://blog.csdn.net/weixin_44006354/article/details/132759951