• 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 节点数据是否相同

  • 相关阅读:
    Python学习日记-第三十八天-生成器
    【chrome扩展开发】消息通讯之onMessage消息监听
    世界上最便宜好用的服务器低至 $9.99 / 年
    全自动调节灯光强度的实现(仿真+程序+文档)
    c++语言核心及进阶
    离散数学复习:谓词逻辑
    html表格账号密码备忘录:表格内容将通过JavaScript动态生成。点击查看密码10秒关闭
    Linux CPU亲缘性
    Spark的任务调度
    led护眼灯哪种品牌质量好?2022什么牌子的护眼灯最好推荐
  • 原文地址:https://blog.csdn.net/weixin_44006354/article/details/132759951