- 启动Mycat
- 进入 /mycat/conf/datasources目录下,修改prototypeDs.datasource.json文件
- 去mycat/bin目录用启动mycat ./mycat start (关闭mycat ./mycat stop)
- 连接mycat 默认端口8066 用户名root 密码123456
注意:这里ip设为null表示任何ip都可以访问
transcationType: xa表示跨库的事务 proxy表示本地事务(效率高)
- Mycat配置
- mysql.schema.json
- customTables 用自定义分片算法的表
- globalTables 全局表,广播表
- normalTables 正常主从复制/读写分离的表
- shardingTables 分片的表
- mycat搭建读写分离
- 读写分离架构
- 创建数据源(可以通过mycat语法设定/也可以通过该配置文件设定)这里我们采用mycat推荐的语法
- 创建主节点数据源dw0
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"dw0",
"password":"root",
"type":"JDBC",
"url":"jdbc:mysql://10.20.2.29:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;
- 创建从节点数据源dr0
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"dr0",
"password":"root",
"type":"JDBC",
"url":"jdbc:mysql://10.20.2.29:3308?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;
- 去检查一下配置文件是否创建成功
- 也可以通过mycat语法去查询 /*+ mycat:showDataSources*/;
- 创建集群(去指定哪些数据源)
/*! mycat:createCluster{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"dw0" //主节点
],
"maxCon":2000,
"name":"c0",
"readBalanceType":"BALANCE_ALL",
"replicas":[
"dr0" //从节点
],
"switchType":"SWITCH"
} */;
- 这里一样可以去配置文件上查看有没有生成c0的配置
- 也可以通过mycat语法查询
- 创建逻辑表(指向集群)
- 创建Schema
/*+ mycat:createSchema{
"customTables":{},
"globalTables":{},
"normalTables":{},
"schemaName":"masterToSlave",
"shardingTables":{},
"targetName":"c0",
} */;
- 创建逻辑库 create database masterToSlave;
- 创建逻辑表 CREATE TABLE masterToSlave.`test` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT ' ', `remark` varchar(255) DEFAULT NULL COMMENT ' ', PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COMMENT='test';
- 测试主从
- INSERT INTO masterToSlave.`test` VALUES (2,'3333'); 插入数据查看主从节点是否都有数据
- 测试读写分离
- 由于集群中配置的"readBalanceType":"BALANCE_ALL",因此主从节点上它都会去读
- 测试的时候,可以把从库的一笔数据update一下,使它和主库不一致,方便测试Mycat当前读取是从主库还是从库上读取的
- 如果只想从主节点上读取数据,就把集群中的"readBalanceType":"BALANCE_NONE"
- 当有事务强一致性要求时,需要从主节点读取数据,我们可以在程序中@Transactional动态的设定这个值,它是立马生效的,无需重启。