当前位置: 首页 / 技术干货 / 正文
MySQL主主复制的实现

2023-02-02

   master mysql

  主主复制介绍

  MySQL的主从复制架构下,可以实现读写分离、业务分流,来降低单个数据库的压力。但是这种模式下会存在单点故障的问题,即如果主库节点宕机的情况下,对从库进行的操作并不会同步到主库中。这个数据库也就无效了。因此有的时候我们会搭建主主复制的架构,也叫做双主架构。

  双主架构的实现,是在主从架构的基础之上的。将两台MySQL之间护卫彼此的主库,同时又互为对方的从库。这样的实施方案下,既能做到分流,也能解决单点故障的问题。因为任何的一台节点故障,另外的一台都可以继续提供服务。

  主库1配置

  我们需要编辑MySQL配置文件,这个配置文件在不同的操作系统中的位置和名字都不同,需要根据自己的操作系统来查找这个文件:

  Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

  Linux: /etc/my.cnf

  macOS:

  dmg安装: /etc/my.cnf

  homebrew安装:

  Intel CPU: /usr/local/homebrew/etc/my.cnf

  AppleSilicon CPU: /opt/homebrew/etc/my.cnf

  # 在[mysqld]的下方添加或修改如下属性:

  # 服务节点的唯一标识,需要给集群中的每个服务分配一个单独的ID

  server-id=101

  # 打开binlog日志,并指定文件名

  log_bin=master-101-bin

  # binlog日志文件

  log_bin-index=master-101-bin.index

  # 打开relaylog日志

  relay_log=master-101-relay-bin

  relay_log-index=master-101-relay-bin.index

  skip-slave-start

  # 防止两个主库中同时操作自增的字段导致字段冲突

  auto_increment_increment=2 # 自增步长,一般有几个MySQL就设置为几

  auto_increment_offset=1 # 自增起始值

  修改完成之后,需要重启MySQL服务。

  为root用户分配replication slave的权限:

  # 登录到主库

  mysql -uroot -p

  # 为root用户分配权限

  # MySQL8中,需要先添加 'root'@'%' 这个用户

  # create user 'root'@'%' identified by '123456'

  mysql> grant replication slave on *.* to 'root'@'%';

  mysql> flush privileges;

  主库2配置

  我们需要编辑MySQL配置文件,这个配置文件在不同的操作系统中的位置和名字都不同,需要根据自己的操作系统来查找这个文件:

  Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

  Linux: /etc/my.cnf

  macOS:

  dmg安装: /etc/my.cnf

  homebrew安装:

  Intel CPU: /usr/local/homebrew/etc/my.cnf

  AppleSilicon CPU: /opt/homebrew/etc/my.cnf

  # 在[mysqld]的下方添加或修改如下属性:

  # 服务节点的唯一标识,需要给集群中的每个服务分配一个单独的ID

  server-id=102

  # 打开binlog日志,并指定文件名

  log_bin=master-102-bin

  # binlog日志文件

  log_bin-index=master-102-bin.index

  # 打开relaylog日志

  relay_log=master-102-relay-bin

  relay_log-index=master-102-relay-bin.index

  skip-slave-start

  # 防止两个主库中同时操作自增的字段导致字段冲突

  auto_increment_increment=2 # 自增步长,一般有几个MySQL就设置为几

  auto_increment_offset=2 # 自增起始值

  修改完成之后,需要重启MySQL服务。

  为root用户分配replication slave的权限:

  # 登录到主库

  mysql -uroot -p

  # 为root用户分配权限

  # MySQL8中,需要先添加 'root'@'%' 这个用户

  # create user 'root'@'%' identified by '123456'

  mysql> grant replication slave on *.* to 'root'@'%';

  mysql> flush privileges;

  设置同步

  查看master1的binlog

  +-----------------------+----------+--------------+------------------+-------------------+

  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

  +-----------------------+----------+--------------+------------------+-------------------+

  | master-101-bin.000001 | 156 | | | |

  +-----------------------+----------+--------------+------------------+-------------------+

  设置master2同步master1

  # 登录从库

  mysql -uroot -p

  # 设置同步主节点

  change master to

  master_host='192.168.10.101',

  master_port=3306,

  master_user='root',

  master_password='123456',

  master_log_file='master-101-bin.000001',

  master_log_pos=156;

  查看master2的binlog

  +-----------------------+----------+--------------+------------------+-------------------+

  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

  +-----------------------+----------+--------------+------------------+-------------------+

  | master-102-bin.000001 | 553 | | | |

  +-----------------------+----------+--------------+------------------+-------------------+

  设置master1同步master2

  # 登录从库

  mysql -uroot -p

  # 设置同步主节点

  change master to

  master_host='192.168.10.102',

  master_port=3306,

  master_user='root',

  master_password='123456',

  master_log_file='master-102-bin.000001',

  master_log_pos=553;

  开启同步

  # 分别启动两个数据库的slave

  start slave

  # 如果出现错误:Slave failed to initialize relay log info structure from the repository

  # 说明之前存在主从模式下的relay log,使用reset slave命令清除即可

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号