1.下载mycat源码
下载地址:https://github.com/MyCATApache/Mycat-Server,我下载的版本是1.7。
下载完成后使用eclipse导入工程,并刷好maven。
2.mysql配置主从同步参考:https://blog.csdn.net/u011943534/article/details/87868939
3.配置resources/server.xml
其中
user
表示mycat的用户名密码,
schemas
表示mycat逻辑库名称,
readOnly
表示此用户只读
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
</system>
<user name="root">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
4.配置schema.xml
schema
说明:
name
与server.xml中schemas一致
dataNode
该属性用于绑定逻辑库到某个具体的database上
dataNode
说明:
name
定义数据节点的名称
dataHost
定义该分片属于哪个数据库实例
database
实际数据库名称
dataHost
说明:
balance
0 不读写分离,1全部的readHost与standbywriteHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。2所有读操作都随机的在writeHost、readhost上分发。3所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。
writeType
0所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties。2所有写操作都随机的发送到配置的writeHost
switchType
-1表示不自动切换,1默认值,自动切换,2基于MySQL主从同步的状态决定是否切换
心跳语句为showslavestatus,3基于MySQLgalarycluster的切换机制(适合集群)
heatbeat
心跳的sql
writeHost
写的实际数据库配置
readHost
读的实际数据库配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.100.87:3306" user="root" password="ROOT_iscas123">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.100.91:3306" user="root" password="ROOT_iscas123" />
</writeHost>
</dataHost>
</mycat:schema>
5.从
MycatStartup
类启动
6.测试连接
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.100.88:8066/TESTDB", "root", "123456");
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select name from test1");
while (resultSet.next()) {
System.out.println(resultSet.getString("name"));
}
resultSet.close();
statement.close();
conn.close();
}
7.MYCAT日志报Unknown charsetIndex:255错误
index_to_charset.properties
在配置文件最后加入255=utf8mb4,重启服务即正常