mycat读写分离 初体验

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

下载

  • mycat官网
  • mycat下载地址 下载了 Mycat-server-1.6.7.3-release 版本发布
  • mycat监控
  • java运行环境不可少,安装略。本人用的是jdk1.8.0_131

mycat安装目录

目录 说明
bin mycat命令,启动、重启、停止等
catlet catlet为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
# 配置数据库 逻辑表

	

# 配置dataNode 数据库名称


# 配置 数据库实例
 
		select user() 
		 
		

 
  
  • server.xml
# 配置mycat db1的schemas的连接账号

		123456
		db1

  • 测试结果
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 没有。

 
		select user() 
		 
			
		
		
  • 测试结果
#读
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读写分离

你可能感兴趣的:(mysql)