环境
虚拟机01 ubuntu16.04、mysql5.7、mycat1.6
虚拟机02 ubuntu16.04、mysql5.7、mycat1.6
主从同步配置
参考:https://blog.csdn.net/weixin_43789195/article/details/109644026
读写分离配置
一些配置,目录 /usr/local/mycat/conf/
server.xml
主要配置mycat服务的参数,比如端口号,myact用户名和密码使用的逻辑数据库等。修改以下部分
<!--以下四项取消注释 -->
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<property name="maxStringLiteralLength">65535</property>
<property name="sequenceHandlerType">0</property>
<property name="backSocketNoDelay">1</property>
<property name="frontSocketNoDelay">1</property>
<property name="processorExecutor">1</property>
<!-- 登录名、密码、权限和逻辑库配置 -->
<user name="root" defaultAccount="true">
<property name="password">111222</property>
<property name="schemas">testdb</property>
<property name="defaultSchema">testdb</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges> -->
</user>
<user name="user">
<property name="password">111222</property>
<property name="schemas">testdb</property>
<!-- readOnly true:只读权限 -->
<property name="readOnly">true</property>
<property name="defaultSchema">testdb</property>
</user>
schema.xml
主要配置数据库的信息,例如逻辑数据库名称,物理上真实的数据源以及表和数据源之间的对应关系和路由策略等。修改以下部分
ps:主从服务器上配置读写用户user,应给予相应的权限
<!-- 逻辑库表配置 -->
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="host1" database="db1" />
<!-- 物理库连接配置 -->
<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="127.0.0.1:3306" user="root" password="123456">
<!-- 可以多个主机 -->
<readHost host="hostS2" url="192.168.146.129:3306" user="root" password="123456" />
</writeHost>
</dataHost>
<dataHost>标签详解
schema.xml schema:与server.xml中schema的值是多对1的关系,server.xml中schema的值可以是多个、schema.xml schema的值是唯一,可以有多个schema。schema 相对于mysql中的database。
dataNode:数据分片。一个dataNode标签就是一个独立的数据分片。
dataHost:物理主机。
balance:负载均衡类型,目前的取值有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没有。
writeType:负载均衡类型,目前的取值有3种:
1. writeType="0",所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties 。
2. writeType="1",所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐。
switchType
-1 表示不自动切换
1 默认值,自动切换
2 基于MySQL主从同步的状态决定是否切换
3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1)心跳语句为 show status like 'wsrep%';
重启服务并连接mycat,配置成功
sudo /usr/local/mycat/bin/mycat restart
mysql -uroot -p -h127.0.0.1 -P8066
测试
连接mycat创建表,并插入一条数据。(已配置主从同步)
create table tb (id int(11), username varchar(255));
insert into tb (id, username) values (1, 'tom');
去从库单独插入一条数据
insert into tb (id, username) values (2, 'jerry');
此时主库tb表有一条数据,从库有两条数据。证明mycat插入是在主库完成,数据成功同步到从库
mycat查询验证,结果为两条数据。证明查询是在从库
select * from tb;
OK.