因为mycat本身对于数据库主从同步还是依赖的其本身机制,所以这里我们使用mysql的时候,也需要配好主从同步,另外需要建好从库的只读账号
注意:如果配了双主同步,那么分库分表就不好做,所以如果想用分库分表,那么双主切记先别做同步。
目录 | 说明 |
---|---|
bin | mycat命令,启动、重启、停止等 |
catlet | catlet为Mycat的一个扩展功能 |
conf | Mycat 配置信息,重点关注 |
lib | Mycat引用的jar包,Mycat是java开发的 |
logs | 日志文件,包括Mycat启动的日志和运行的日志 |
conf配置相关文件如下:
文件 | 说明 |
---|---|
server.xml | Mycat的配置文件,设置账号、参数等 |
schema.xml | Mycat对应的物理数据库和数据库表的配置 |
rule.xml | Mycat分片(分库分表)规则 |
rule.xml配置参考:
<!-- 逻辑数据库名:mycatDatbase,与server.xml中对应;student 是物理数据库中的表,这里在两个库都有这个表 ; dataNode 是自己定义的,区别两个数据库-->
<schema name="CCTV_DB" checkSQLschema="false" sqlMaxLimit="100">
<table name="USERS" primaryKey="id" dataNode="masterNode1,masterNode2" rule="ruleById" autoIncrement="true"/>
</schema>
<!-- 设置dataNode 对应的数据库,name 和schema中对应 ,dataHost:自己定义的host配置 ,database是物理数据库,master1和master2是两个物理数据库 -->
<dataNode name="masterNode1" dataHost="masterHost1" database="CCTV" />
<dataNode name="masterNode2" dataHost="masterHost2" database="CCTV" />
<!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 balance 为1 表示读写分离-->
<dataHost name="masterHost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="server1" url="192.168.4.38:3306" user="test01" password="test01">
<readHost host="server1" url="192.168.4.40:3306" user="test01" password="test01"/>
</writeHost>
</dataHost>
<dataHost name="masterHost2" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="server1" url="192.168.4.39:3306" user="test02" password="test02">
<readHost host="server1" url="192.168.4.41:3306" user="test02" password="test02"/>
</writeHost>
</dataHost>
/*#mycat:db_type=master*/ SELECT * FROM tb_item ;
具体参考:mycat配置 Mysql 读写分离+强制走写节点+根据主从延时的读写分离
上面写的案例是做了双主双从,主从同步,并且双主之间也做了同步,那么如果要做分库分表的话,这里的双主同步就要关掉!