MySQL主从复制(双主)配置搭建详解

Java技术 潘老师 2年前 (2022-02-25) 1566 ℃ (0) 扫码查看

之前潘老师写过一篇关于MySQL8主从复制(一主一从)配置搭建详解,今天整理一下MySQL主从复制双主的情况该如何实现配置。

一、介绍

首先说明下两者的区别:
1)一主一从:数据主要写入主库,从库作为备库,实时地将主库数据同步到备库
2)双主:两个数据库同时为主库和从库,互为主从,任意一个库数据更新都会同步到另外一个库

建议在配置搭建MySQL双主环境时,最好先看下一主一从的配置,因为里面有很多相似的地方,只有在配置上稍微有点不同。

二、前期准备

首先准备两个MySQL数据库,相关ip信息仍然如下:

名称 IP
111库 192.168.100.111
112库 192.168.100.112

三、搭建步骤

1、先配置111库

1)在 /etc/my.cnfmysql核心配置文件的[mysqld]节点内,新增如下配置:

server-id=1    #服务器 id,随意,但要唯一
log-bin=mysql-bin   #二进制文件存放路径
binlog-do-db=scada    #待同步的数据库日志
binlog-ignore-db=mysql  #不同步的数据库日志
#双主多出的配置如下
replicate-do-db = scada #需要同步的库
replicate-ignore-db = mysql,information_schema,performance_schema #忽略同步的库
auto-increment-increment = 2   #字段变化增量值
auto-increment-offset = 1   #初始字段ID为1
slave-skip-errors = all   #忽略所有复制产生的错误

2)创建专门用于主从复制用户账号。因此使用root账户登录mysql,并执行一些指令:

#登录
mysql -u root -p密码
#创建用户 我这里用户名为copyuser,注意这里的ip是112库的ip
CREATE USER 'copyuser'@'192.168.100.112' IDENTIFIED WITH mysql_native_password BY '123456';
#给主从复制账号授权
grant replication slave on *.* to 'copyuser'@'192.168.100.112';

3)重启主库的mysql

service mysqld restart

4)再次登录mysql,使用如下指令查看master的状态:

show master status;

结果类似如下:我们需要关注File和Position的信息,后面要用到。

2、再配置112库

1)同样的,我们在 /etc/my.cnfmysql核心配置文件的[mysqld]节点内,新增如下配置:

server-id=2    #服务器 id,随意,但要唯一
log-bin=mysql-bin   #二进制文件存放路径
replicate-do-db=scada    #待同步的数据库
replicate-ignore-db=mysql,information_schema,performance_schema  #不同步的数据库
#双主多出的配置
binlog-do-db=scada
binlog-ignore-db = mysql   #忽略写入binglog日志的库
auto-increment-increment = 2   #字段变化增量值
auto-increment-offset = 1   #初始字段ID为1
slave-skip-errors = all   #忽略所有复制产生的错误

2)再接下来就和服务器A的配置步骤一样,创建一个copyuser用户,用于同步,只不过这里的所属是111库的ip:

#登录
mysql -u root -p密码
#创建用户 我这里用户名为copyuser,注意这里的ip是111的ip
CREATE USER 'copyuser'@'192.168.100.111' IDENTIFIED WITH mysql_native_password BY '123456';
#给复制账号授权
grant replication slave on *.* to 'copyuser'@'192.168.100.111';

3)然后我们重启112库的mysql

service mysqld restart

4)再次登录mysql,使用如下指令查看master的状态:

show master status;

同样记下服务器B的MySQL状态的Position和File。

3、实现双主同步

最后实现双主同步,在111库上具体执行如下:

#1,先登录mysql,然后执行后续代码
mysql -u root -p密码
#2,关闭状态
stop slave;
#3,设置同步,注意这里是112库的ip,日志名称和位置是112库上的记下的file和postion
change master to master_host='192.168.100.112',master_user='copyuser',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=157;
#4,开启从库
start slave; 
# 5,检查服务器状态
show slave status \G;

同样地,在112库上也和111库上执行的类似,只是将change master中的ip、file和position都换为111库上的即可。

最后在检测服务器状态时,应该都是类似如下图:
主从复制检测服务器状态正常

最后自己分别在两个库中写入数据,看看是否都同步给了对方,如果都能正常同步,说明就没有问题了。

总结

以上就是MySQL主从复制(双主)配置搭建详解,如果学会了一主一从的配置,这里的双主也就显得不复杂了,但是如果想要双主能够互相切换,比如111库的Mysql挂了,那么112库MySQL的就要成为主库,让系统变得高可用,后面我们可以使用keepalive进行实现。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/4568.html
喜欢 (2)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】