使用mycat进行mysql的读写分离

背景

眼看还有一天多这个月就过去了,这个月还没有产出博客。坚持这么久,不能就这样放弃了。最近在部署一个应用,需要用mycat做读写分离,成热打铁,学了点mycat的皮毛。马上操刀!

前期准备

  1. 三台机器为192.168.1.133, 192.168.1.134, 192.168.1.135,133为mycat服务器,134为master,135为slave
  2. 三台机器都安装mysql8
  3. 134和135同时创建fucker数据库,并导入数据。
  4. 134创建fucker_master用户,135创建fucker_slave用户,并授予该有的权限,比如fucker_master允许创建数据库,主从复制等待。

配置MySQL主从复制

主从复制的原理:主库每次增删改操作,会产生二进制日志binlog,从库的IOthread轮询binlog,将binlog的操作写入中继日志relaylog中,Sqlthread轮询relaylog并进行一系列的sql操作。

主节点设置

mysql配置文件配置

vim /etc/my.cnf

server_id=134
log_bin=fucker_binlog
binlog-do-db=fucker

重启mysql服务

service mysqld restart

登录mysql

mysql -ufucker_master -pP@ssword123

查看主节点状态

show master status;
从节点设置

配置mysql配置文件

vim /etc/my.cnf

server_id=135
relay_log=fucker_relaylog
relay_log_index=fucker_relaylog.index
read_only=1
replicate-do-db=fucker

由于slave实例是从master复制过来的,server_uuid相同,而这个配置在auto.cnf上,删除即可(谨慎操作,注意备份)

rm -rf /var/lib/mysql/auto.cnf

重启mysql服务

service mysqld restart

登录mysql

mysql -uroot -pP@ssword123
change master to
master_host='192.168.157.134',master_port=3306,master_user='fucker_master',master_password='P@ssword123',master_log_file='fucker_binlog',master_log_pos=0;

开启从节点

# stop和reset在出问题的时候可以试下
# stop slave;
# reset slave;
start slave;

查看从节点的状态,注意看Slave_IO_Running和Slave_SQL_Running是否为YES,再看看有没有报错信息

show slave status\G;

如果发现错误导致sql线程中断,这个错误又无伤大雅,可以选中跳过一个错误

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
测试

master库改数据,看slave库是否同步更新

可能有用的命令
# 测试是否能连通master
mysql -ufucker_master -h 192.168.157.134 -pP@ssword123 -P3306
# 查看server_id
SHOW VARIABLES LIKE '%server%id%';
# 查看log
show variables like 'relay%';

配置mycat读写分离

安装mycat

在官网下载mycat压缩包,在133解压,并进入mycat目录

cd /develop/server/mycat
配置server.xml

这里是配置逻辑库的连接,对于逻辑库,我的理解是,逻辑库由多个物理库组成。应用通过连接逻辑库可以访问多个物理库节点,类似于在应用和数据库之间加一个中介。

<user name="my_cat_user">
	<property name="password">root</property>
	<property name="schemas">my_cat_fucker</property>
</user>
配置schema.xml

主要是配置逻辑库,以及对应哪些物理库

<schema name="my_cat_fucker" checkSQLschema="false" sqlMaxLimit="100" dataNode="myDataNode">
</schema>

<dataNode name="myDataNode" dataHost="myDataHost" database="master_slaver_db">
</dataNode>

<dataHost name="myDataHost" maxCon="1000" minCon="10"
	balance="0" writeType="0" dbType="mysql" dbDriver="native"
	switchType="1" slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<writeHost host="myWriteHost" url="192.168.1.134:3306" user="fucker_master" password="P@ssword123">
		<readHost host="myReadHost" url="192.168.1.135:3306" user="root" password="P@ssword123"/>
	</writeHost>
</dataHost>

总结

以前江湖上经常流传读写分离、分库分表等各种高大上名词,一次一次的吓走了我,其实如果接触了这些技术,就会觉得非常合理。就像当初接触redis一样,现在反而觉得不用缓存的应用根本不敢写。分表的实践以后有时间再补上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值