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命令清除即可
上一篇:MySQL数据库的主从架构(一)
下一篇:react 表单方案一览
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号