在配置Mycat请求路由时请先自行配置好 Mysql读写分离 及 Mycat运行环境
修改逻辑节点文件 (/usr/local/mycat/conf/schema.xml)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 定义逻辑库 -->
<!--
schema 参数解释
name = 定义标签名称
checkSQLschema = 是否忽略库名
sqlMaxLimit = 查询语句不携带limit时最大返回数据条数
dataNode = 选择需要调用数据节点
-->
<schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!-- 定义逻辑库结束 -->
<!-- 定义数据节点 -->
<!--
dataNode 参数解释
name = 定义标签名称
dataHost = 选择需要调用的dataHost标签
database = 数据库名称
-->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!-- 定于数据节点注释结束 -->
<!-- 定义物理数据源 -->
<!--
dataHost 参数解释
name = 定义标签名称
maxCon = 最大连接数
minCon = 最小连接数
balance = 是否开启读写分离 (
0 = 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
1 = 全部的readHost与stand by writeHost参与select语句的负载均衡
2 = 所有读操作都随机在writeHost、readHost上分发
3 = 所有读请求随机分发到writeHost对应的readHost执行,writeHost不负担读压力
)
writeType = 负载均衡类型 (
0 = 所有写操作发送到配置的第一个writeHost,当第一个writeHost宕机时,切换到第二个writeHost,重新启动后以切换>后的为准,切换记录在配置文件:dnindex.properties中
1 = 所有写操作都随发送到配置的writeHost
)
switchType = 切换方式 (
1 = 自动切换
2 = 基于MySql主从同步的状态来决定是否切换
)
dbType = 数据库类型
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--
heartbeat 用于检测主 (写) 数据库连接是否正常
使用 select user() 语句进行检查 (语句可进行更换)
当检测语句没有响应时则表示主库出现故障,mycat自动将写操作转入其他服务器
-->
<heartbeat>select user()</heartbeat>
<!--
writeHost 定义主服务器
readHost 定义服务器
-->
<!-- 写操作服务器 -->
<writeHost host="hostS1" url="192.168.101.95:3306" user="root" password="root">
<!-- 读操作服务器 -->
<readHost host="hostS2" url="192.168.254.211:3306" user="root" password="root" />
</writeHost>
</dataHost>
<!-- 定义物理数据源注释结束 -->
</mycat:schema>
修改规则及web用户文件 (/usr/local/mycat/conf/server.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
<property name="nonePasswordLogin">0</property>
<property name="useHandshakeV10">1</property>
<!-- 1为开启实时统计、0为关闭 -->
<property name="useSqlStat">0</property>
<!-- 1为开启全一致性检测、0为关闭 -->
<property name="useGlobleTableCheck">0</property>
<property name="sequnceHandlerType">2</property>
<!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
<property name="subqueryRelationshipCheck">false</property>
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!-- <property name="processors">1</property> -->
<!-- <property name="processorExecutor">32</property> -->
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
<property name="processorBufferPoolType">0</property>
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!-- <property name="maxStringLiteralLength">65535</property> -->
<!-- <property name="sequnceHandlerType">0</property> -->
<!-- <property name="backSocketNoDelay">1</property> -->
<!-- <property name="frontSocketNoDelay">1</property> -->
<!-- <property name="processorExecutor">16</property> -->
<property name="serverPort">3308</property>
<property name="managerPort">9066</property>
<!-- <property name="idleTimeout">300000</property> -->
<!-- <property name="bindIp">0.0.0.0</property> -->
<!-- <property name="frontWriteQueueSize">4096</property> -->
<!-- <property name="processors">32</property> -->
<!--
handleDistributedTransactions 分布式事务开关
0为不过滤分布式事务
1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤)
2为不过滤分布式事务,但是记录分布式事务日志
-->
<property name="handleDistributedTransactions">0</property>
<!-- off heap for merge/order/group/limit 1开启 0关闭 -->
<property name="useOffHeapForMerge">1</property>
<!-- 单位为m -->
<property name="memoryPageSize">64k</property>
<!--单位为k-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--单位为m-->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">false</property>
<!-- XA Recovery Log日志路径 -->
<!--<property name="XARecoveryLogBaseDir">./</property>-->
<!-- XA Recovery Log日志名称 -->
<!--<property name="XARecoveryLogBaseName">tmlog</property>-->
</system>
<! --
user 标签解释
name = 后端服务器访问账号
passsword = 后端服务器访问密码
schemas = 需要调用的配置实例
-->
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">test</property>
</user>
</mycat:server>
重启Mycat
# 重启进程
'/usr/local/mycat/bin/mycat restart'
# 修改后端程序连接方式
sql账号:'root'
sql密码:'123456'
sqlport: '3308'
总结
- 如果走到这一步了你的请求路由应该也是配置好了,大家可以用'Mysql'自带的运行记录检查自己的SQL执行记录
# 开启运行日志
'mysql> set global log_output = 'TABLE'; set global general_log = 'ON'; '
# 查询SQL运行日志
'select * from mysql.general_log where argument != 'select user()' order by event_time desc;'
# 关闭运行日志
'set global log_output = 'TABLE'; set global general_log = 'OFF';'
# 清空运行日志
'truncate table mysql.general_log;'