Mysql主从配置和Mycat配置读写分离

主从配置需要注意的地方

1、主DB server和从DB server数据库的版本一致
2、主DB server和从DB server数据库数据名称一致
3、主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一(一般我们采用服务器ip地址的尾数)

https://blog.csdn.net/weixin_43231076/article/details/83515054 的基础上,进行mysql主从配置。
根据上述要注意的地方,所以在192.168.25.134 服务器上的mysql中创建一个数据库:db1。以 192.168.25.132 服务器上的mysql为主服务器,192.168.25.134上的mysql为从服务器。

Mysql主服务器配置

1.修改my.conf文件(文件地址:/etc/my.conf),在[mysqld]段下添加:

binlog-do-db=db1
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=132

2.重启mysql服务:执行命令

service mysqld restart

3.建立帐户并授权 slave,执行命令,这些命令需要登录mysql

mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456'; 

backup用户就是从服务器来连接主服务器的用户,一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确。
4. 刷新权限:命令:mysql> FLUSH PRIVILEGES;
5. 查看mysql现在有哪些用户:mysql>select user,host from mysql.user;
6. 查询master的状态:mysql> show master status;得到的结果为:
在这里插入图片描述
这里得到的结果,会在配置从服务器上用到。
至此,主服务器的配置就完成了。

Mysql从服务器配置

1.修改my.conf文件,在[mysqld]段下添加 server-id=134,指明server-id
2.登录mysql,执行下面的命令:
change master to master_host=‘192.168.25.132’,master_port=3306,master_user=‘backup’,master_password=‘123456’,master_log_file=‘mysql-bin.000001’,master_log_pos=606
注意:这些命令中间不能断开,master_host为主服务器的ip(要用引号括起来),master_port是主服务器的端口号,无引号,master_user和master_password是主服务器中创建并授予slave权限的用户密码。master_log_file就是在主服务器执行how master status得到的File的值,master_log_pos就是在主服务器执行how master status得到的position的值。
3.重启mysql服务:执行命令 service mysqld restart
4.启动从服务器复制功能:Mysql>start slave;
5.检查从服务器复制功能状态:mysql> show slave status
这个可以在mysql客户端的Navacat中执行,得到结果:在这里插入图片描述
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

错误处理:

如果出现此错误:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。
解决方法:
删除/var/lib/mysql/auto.cnf文件,重新启动服务。

以上操作过程,从服务器配置完成。

测试

在192.168.25.132服务器的mysql的db1的tb_item表中插入一条数据之后,192.168.25.134里面的db1数据中的tb_item表会自动把插入的那条数据复制过来。(注意:192.168.25.134里面的db1中,必须有一个和192.168.25.132服务器的mysql的db1里的tb_item结构,表名一样的表)

Mycat配置读写分离

Mycat 1.4 支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下:
在schema.xml中配置:

<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
		writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
	<heartbeat>show slave status</heartbeat>
	<writeHost host="hostM" url="192.168.25.132:3306" user="root"
			password="root">
			<!--添加一个服务器用来读数据,这个标签可以配置多个-->
			<!--这样就表示,通过mycat时,插入数据会插入到192.168.25.132中,因为主从配置,134上也会有数据,而读数据就只从134上读取-->
			<readHost host="hostS" url="192.168.25.134:3306" user="root" password="root" />
	</writeHost>
</dataHost>

设置 balance="1"与writeType=“0”

Balance参数设置:
1. balance=“0”, 所有读操作都发送到当前可用的writeHost上。
2. balance=“1”,所有读操作都随机的发送到readHost。
3. balance=“2”,所有读操作都随机的在writeHost、readhost上分发

WriteType参数设置:
1. writeType=“0”, 所有写操作都发送到可用的writeHost上。
2. writeType=“1”,所有写操作都随机的发送到readHost。
3. writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。

“readHost是从属于writeHost的,即意味着它从那个writeHost获取同步数据,因此,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了。基于这个考虑,目前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在Mycat里配置为两个writeHost并设置banlance=1。”

设置 switchType=“2” 与slaveThreshold=“100”
switchType 目前有三种选择:
-1:表示不自动切换
1 :默认值,自动切换
2 :基于MySQL主从同步的状态决定是否切换

测试

通过mycat,往逻辑表tb_item中插入一条数据,控制id的值,让它插入到db1中,因为配置了主从配置,所以134的db1里面的tb_item表也有一条相同的数据
但是,如果通过mycat,查询逻辑表,查询132的tb_item表中有的数据,但是134的db1里面的tb_item中没有的的数据,就查询无结果,就表示,读数据是从从服务器读取的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值