mycat读写分离 初体验

公司项目要做数据库读写分离,直接代码撸读写分离工作量太庞大了,还是考虑用mycat中间件来做。

下载

mycat安装目录

目录说明
binmycat命令,启动、重启、停止等
catletcatlet为Mycat的一个扩展功能
conf配置文件,核心
lib引用jar包
logs日志

启动

  • 运行 bin目录 下的startup_nowrap.bat
#连接mycat
mysql -uroot -p123456 -h127.0.0.1 -P8066
#查看数据库
mysql>show databases;
#切换数据库
mysql>use travelrecord
#查看数据表
mysql>show tables;

配置本地数据库

  • schema.xml
# 配置数据库 逻辑表
<schema name="db1" checkSQLschema="true" sqlMaxLimit="100">
	<table name="app_user" dataNode="dn1"  />
</schema>

# 配置dataNode 数据库名称
<dataNode name="dn1" dataHost="dn119" database="db1" />

# 配置 数据库实例
<dataHost name="dn119" maxCon="1000" minCon="10" balance="0" dbType="mysql"
		dbDriver="jdbc"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="mysql119"
		url="jdbc:mysql://localhost:3306" user="root" password="1130"> 
		</writeHost>
</dataHost>
  • server.xml
# 配置mycat db1的schemas的连接账号
<user name="root" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">db1</property>
</user>
  • 测试结果
use db1

show tables;
select * from app_user;

配置读写分离

  • 修改 schema.xml

负载均衡类型,目前的取值有 3 种:1. balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。2. balance=“1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双
主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
均衡。3. balance=“2”,所有读操作都随机的在 writeHost、readhost 上分发。4. balance=“3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

<dataHost name="dn119" maxCon="1000" minCon="10" balance="3" dbType="mysql"
		dbDriver="jdbc"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="hostWrite1"
		url="jdbc:mysql://localhost:3306" user="root" password="1130"> 
			<readHost host="hostRead1" url="jdbc:mysql://192.168.0.133:3306" user="root" password="123456" />
		</writeHost>
		</dataHost>
  • 测试结果
#读
mysql>select * from app_user where user_id='10000255';
#写
mysql>update app_user set user_name='testtt3' where user_id='10000255';

核对对应数据表 读库(133)数据没改 写库(localhost)数据已经修改

  • 配置bin log 复制
    • 主库(localhost)
# my.cnf 调整配置 需要重启
server-id=1       
log-bin=mysql-bin 
binlog-do-db=hjlottery       #需要同步的数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)        
binlog-ignore-db = mysql,information_schema
sync_binlog = 1   

# 登录mysql,授予slave从机复制权限
 mysql>grant replication slave,replication client on *.* to slave@'192.168.0.215' identified by "slave@123";
 

  • 从库(192.168.0.215)
# my.cnf 调整配置 需要重启
server-id=2
log-bin=mysql-bin
replicate-do-db=hjlottery    #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
replicate-ignore-db=mysql
slave-skip-errors = all

# 登录slave节点的mysql,进行主从同步设置
mysql>stop slave;
mysql>change  master to master_host='192.168.0.119',master_user='slave',master_password='slave@123',master_log_file='mysql-bin.000001',master_log_pos=1349; 
mysql>start slave;
mysql>show slave status \G;

#然后把mycat中的读数据库实例改成 从库 再次查询效果
#读
mysql>select * from app_user where user_id='10000255';
#写
mysql>update app_user set user_name='testtt4' where user_id='10000255';

参考:mycat读写分离

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值