1. 做好主从的mysql,mysql中有db1这个库,且已经存在表和数据.

  2. 安装mycat

    1. 下载对应的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
    2. 把这个jar放进解压的tar中的mycat\lib文件夹下
    3. 修改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
    	}
    
    1. 启动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 
    	#是配置文件所在文件夹
    
    1. 测试
      利用mysql command进行连接测试,默认的mycat的用户: root,密码: 123456, 端口8066
    	mysql -uroot -p123456 -h192.168.28.130 -P8066
    
  3. 配置读写分离

    1. 修改mycat默认密码
      打开conf/users/root.user.json,修改username和password即可

    2. 新增schema的配置(没有这一步看不到源数据库里面的库)

    	#指定db2逻辑库默认的targetName, mycat会自动加载db1下已经有的物理表或者视图作为单表.
    
    	/*+ mycat:createSchema{
    	 "customTables":{},
    	"globalTables":{},
    	"normalTables":{},
    	"schemaName":"db1",
    	"shardingTables":{},
    	"targetName":"prototype"
    	} */;
    
    	看修改之后的schema的配置,已经自动加载单表boradtable了在normalTables中了
    
    1. 查看创建的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放置普通表的配置
    
    1. 添加数据源
    	/*+ 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{} */;
    
    1. 更新集群信息,添加two从节点.
    	/*! mycat:createCluster{"name":"prototype","masters":	["prototypeDs"],"replicas":["two"]} */;
    
    	/*+ mycat:showClusters{} */;
    
    
    
    1. 配置数据源的集群(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:进行主从切换
    
    
  4. 进行数据库表结构的新增,修改,查询,插入

新建表
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.