-
做好主从的mysql,mysql中有db1这个库,且已经存在表和数据.
-
安装mycat
- 下载对应的tar安装包,以及对应的jar包
tar包 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip
jar包 http://dl.mycat.org.cn/2.0/1.20-release/mycat2-1.20-jar-with-dependencies.jar - 把这个jar放进解压的tar中的mycat\lib文件夹下
- 修改mycat的prototype的配置
启动mycat之前需要确认prototype数据源所对应的mysql数据库配置,修改对应的user(用户),password(密码),url中的ip
{ "dbType":"mysql",// 数据库类型 "idleTimeout":60000, "initSqls":[], "initSqlsGetConnection":true, "instanceType":"READ_WRITE",// 数据库读写类型:READ、WRITE、READ_WRITE。Mycat 对数据库需要是可读可写的 "logAbandoned":true, "maxCon":1000, "maxConnectTimeout":30000, "maxRetryCount":5, "minCon":1, "name":"prototypeDs", "password":"123456", "queryTimeout":0, "removeAbandoned":false, "removeAbandonedTimeoutSecond":180, "type":"JDBC", "url":"jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai&autoReconnect=true", "user":"root", "weight":0 }
- 启动mycat
以下三种均为启动mycat服务的方式,根据环境选择以下即可
linux启动命令
注:Linux启动前修改bin目录下 mycat、wrapper-linux-x86-64、 wrapper-linux-x86-32这3个文件的权限chmod 777,不然启动报错 cd mycat/bin ./mycat start ./mycat status ./mycat start 启动 ./mycat stop 停止 ./mycat console 前台运行 ./mycat install 添加到系统自动启动(暂未实现) ./mycat remove 取消随系统自动启动(暂未实现) ./mycat restart 重启服务 ./mycat pause 暂停 ./mycat status 查看启动状态
windows启动命令
cd mycat/bin #PowerShell ./mycat install ./mycat start ./mycat status #CMD mycat install mycat start mycat status
jar执行
java -DMYCAT_HOME=mycat2\src\main\resources -jar mycat2-0.5-SNAPSHOP.jar Mycat2\mycat2\src\main\resources #是配置文件所在文件夹
- 测试
利用mysql command进行连接测试,默认的mycat的用户: root,密码: 123456, 端口8066
mysql -uroot -p123456 -h192.168.28.130 -P8066
- 下载对应的tar安装包,以及对应的jar包
-
配置读写分离
-
修改mycat默认密码
打开conf/users/root.user.json,修改username和password即可 -
新增schema的配置(没有这一步看不到源数据库里面的库)
#指定db2逻辑库默认的targetName, mycat会自动加载db1下已经有的物理表或者视图作为单表. /*+ mycat:createSchema{ "customTables":{}, "globalTables":{}, "normalTables":{}, "schemaName":"db1", "shardingTables":{}, "targetName":"prototype" } */; 看修改之后的schema的配置,已经自动加载单表boradtable了在normalTables中了
- 查看创建的schema的配置
#linux下查看 [root@localhost mycat]# cat conf/schemas/db1.schema.json { "customTables":{}, "globalTables":{}, "normalTables":{}, "schemaName":"db1", "shardingTables":{}, "targetName":"prototype" "views":{} } customTables放置的是mycat默认的表的配置 globalTables放置的是全局表的配置 shardingTables放置分片表的配置 normalTables放置普通表的配置
- 添加数据源
/*+ mycat:createDataSource{ "instanceType":"READ",//从库只给只读权限 "name":"two", "url":"jdbc:mysql://localhost:3307/db1?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai&autoReconnect=true, "user":"root", "password":"123456" } */; 查询配置数据源结果 /*+ mycat:showDataSources{} */;
- 更新集群信息,添加two从节点.
/*! mycat:createCluster{"name":"prototype","masters": ["prototypeDs"],"replicas":["two"]} */; /*+ mycat:showClusters{} */;
- 配置数据源的集群(cluster)信息
vim /mycat/conf/clusters/prototype.cluster.json { // 集群类型:SINGLE_NODE(单节点)、MASTER_SLAVE(普通主从)、GARELA_CLUSTER(garela cluster/PXC集群)等 "clusterType":"MASTER_SLAVE", "heartbeat":{ "heartbeatTimeout":1000, "maxRetry":3, "minSwitchTimeInterval":300, "slaveThreshold":0 }, "masters":[ // 主节点数据源名称,多个逗号隔开 "prototypeDs" ], "replicas":[ // 从节点数据源名称,多个逗号隔开 "two" ], "maxCon":200, // 集群名称。在配置物理库(schema)时会用到 "name":"prototype", //查询负载均衡策略 "readBalanceType":"BALANCE_ALL_READ", // NOT_SWITCH(不进行主从切换)、SWITCH(进行主从切换) "switchType":"NOT_SWITCH" } readBalanceType: 查询负载均衡策略 BALANCE_ALL(默认值) 获取集群中所有数据源 BALANCE_ALL_READ 获取集群中允许读的数据源 BALANCE_READ_WRITE 获取集群中允许读写的数据源,但允许读的数据源优先 BALANCE_NONE 获取集群中允许写数据源,即主节点中选择 switchType: 主从切换设置 NOT_SWITCH:不进行主从切换 SWITCH:进行主从切换
-
-
进行数据库表结构的新增,修改,查询,插入
新建表
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
修改表
mysql> ALTER TABLE db1.`travelrecord`
-> ADD COLUMN `col` varchar(255) NULL AFTER `blob`;
Query OK, 0 rows affected (0.52 sec)
插入数据
mysql> insert into db1.travelrecord(user_id)values ("1");
Query OK, 1 row affected (0.03 sec)
查询
mysql> select * from db1.travelrecord limit 10;
+----+---------+------------+------+------+------------+------+
| id | user_id | traveldate | fee | days | blob | col |
+----+---------+------------+------+------+------------+------+
| 1 | 1 | NULL | NULL | NULL | NULL | NULL |
+----+---------+------------+------+------+------------+------+
1 row in set (0.01 sec)
问题记录:
1.通过mycat查询到的时间与原数据库时间有差别
解决:修改prototype下的配置,数据连接里面serverTimezone的值调整时区
2.测试读写分离报错
ERROR:
Communications link failure
The last packet successfully received from the server was35,267 milliseconds ago. The last packet sent successfully to the server was 35,267 milliseconds ago.
解决:mycat2安装包tar包和jar包版本问题,参考的博客说jar下载最新,发现先写后读或者先读后写会报错,日志里面也可以看到相关报错信息,调整版本即可此博客使用的都是1.20版本
参考链接:
mycat2快速搭建
mycat2读写分离配置
mycat2搭建主从教程
Q.E.D.