MyCat学习:使用MySQL搭建主从复制(双主双从模式)

6 篇文章 0 订阅
2 篇文章 0 订阅

首先,上一篇我们建立了一主一丛模式的MySQL读写分离 点击这里 那么接下来,我们搭建双主双从模式的读写分离,并且使用MyCat登录访问

原理:master1,master2,slave1,slave2 —> master1 和 slave1主从复制,master2 和 slave2主从复制,同时 master2 做为master1的从机,进行互备主从

当然,如果你之前没有搭建过主从复制,下面这两步骤可以不需要做

  • 首先需要清除当前之前设置的主从模式,删除testdb数据库
  • stop slave; reset master;(可以主机从机都执行)
    一、master1配置文件:
server-id=1 # 定义服务器唯一ID
log-bin=mysql-bin # 启用二进制日志
binlog-ignore-db=mysql # 忽略 mysql 库(如果配置了binlog-do-db的话可以不需要设置这个)
binlog-do-db=testdb # 设置需要主从复制的库
binlog_format=STATEMENT
log-slave-updates # 在做为从数据库的时候,有写入的操作也需要记录下二进制日志文件
auto-increment-increment=2 #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1~65535
auto-increment-offset=1 # 表示自增字段从哪个数开始,一次递增多少,取值范围是 1~65535

二、master2配置文件:

server-id=3
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-do-db=testdb
binlog_format=STATEMENT
log-slave-updates
auto-increment-increment=2
auto-increment-offset=2 # 注意起始值不一样

三、slave1配置文件:

server-id=2
relay-log=mysql-relay

四、slave1配置文件:

server-id=4
relay-log=mysql-relay

五、双主机,双从机重启 mysql 服务
六、主机从机都必须关闭防火墙
七、在两台主机上建立账户并授权 slave

create user 'slave'@'%' identified by 'qkm19981013';
grant replication slave on *.* to 'slave'@'%';
flush privileges;

八、查看 master1 的主机状态,记录下binlog日志文件名和position点的值,在slave1上执行以下语句:

change master to master_host='192.168.0.12',master_port=3307,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;

九、查看 master2 的主机状态,记录下binlog日志文件名和position点的值,在salve2上执行以下语句:

change master to master_host='192.168.0.12',master_port=3309,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;

十、在slave1和slave2上开启主从复制

start slave;
show slave status\G;

十一、最后一步,搭建 master1和master2的互备主从,即master1复制master2,master2复制,master1:

master1设置master2为主机:
change master to master_host='192.168.0.12',master_port=3309,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;
start slave;
show slave status\G;
master2设置master1为主机:
change master to master_host='192.168.0.12',master_port=3307,master_user='slave',master_password='qkm19981013',master_log_file='mysql-bin.000001',master_log_pos=156;
start slave;
show slave status\G;

最后的效果就是,我们在 master1上面建立 testdb 数据库之后,其他三个MySQL都同步建立 testdb 数据库了,接着再建立 mytbl 表,其他三个也都建立,往表中插入 insert into mytbl values(1, @@hostname); 之后出现了四个数据库的数据不一致,@@hostname是系统变量,每个系统不一样,所以不同,这也验证了bin-log默认的格式是复制 SQL 语句这一说法。
在这里插入图片描述

需要注意的一点

mysql 8.0 默认使用 caching_sha2_password 身份验证机制 —— 从原来的 mysql_native_password 更改为 caching_sha2_password。
从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。
所以在 slave 连接 master的时候,show slave status\G; 可能会出现:authentication plugin 'caching_sha2_password’的异常,这是因为MySQL8.0之后改变了密码验证器,我们只需要把在主机建立的授权用户的密码验证器改成mysql_native_password就好了,语句如下:

ALTER USER 'slave'@'192.168.0.12' IDENTIFIED WITH mysql_native_password BY 'qkm19981013';
MyCat登录访问
balance 设置成 1,再添加上 写主机信息
<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="192.168.0.12:3307" user="root" password="qkm19981013">
		  <readHost host="hostS1" url="192.168.0.12:3308" user="root" password="qkm19981013"/>
		</writeHost>

		<writeHost host="hostM2" url="192.168.0.12:3309" user="root" password="qkm19981013">
		  <readHost host="hostS2" url="192.168.0.12:3310" user="root" password="qkm19981013"/>
		</writeHost>
	</dataHost>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值