之前潘老师写过一篇关于MySQL8主从复制(一主一从)配置搭建详解,今天整理一下MySQL主从复制双主的情况该如何实现配置。
一、介绍
首先说明下两者的区别:
1)一主一从:数据主要写入主库,从库作为备库,实时地将主库数据同步到备库
2)双主:两个数据库同时为主库和从库,互为主从,任意一个库数据更新都会同步到另外一个库
建议在配置搭建MySQL双主环境时,最好先看下一主一从的配置,因为里面有很多相似的地方,只有在配置上稍微有点不同。
二、前期准备
首先准备两个MySQL数据库,相关ip信息仍然如下:
名称 | IP |
111库 | 192.168.100.111 |
112库 | 192.168.100.112 |
三、搭建步骤
1、先配置111库
1)在 /etc/my.cnf
mysql核心配置文件的[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.cnf
mysql核心配置文件的[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 #忽略所有复制产生的错误
server-id
不一样,其他都是一样的,而且对比一主一从来看,就是把主的配置copy到从库,从库的再copy到主库,最后两库配置一样,这样就互为主从了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进行实现。