前提,准备3至4台服务器,如果3台的话,其中一台既是mysql,也是mycat服务器
并在每台服务器上 安装好jdk1.8和mysql
jdk1.8安装步骤,可查看博文
linux系统 安装jdk1.8_chown -r root:root /usr/local/jdk1.8-CSDN博客
mysql安装步骤,可查看博文,mysql的远程访问权限,最好开启,方便测试,方法自行baidu
linux系统 yum方式安装mysql5.7_linux下yum安装mysql5.7-CSDN博客
mycat的使用,基本上按以下步骤进行操作
1 修改 mycat的配置文件,主要是 schema.xml,server.xml,rule.xml
-
schema.xml 管理着MyCat的逻辑库、逻辑表以及对应的分片规则、DataNode以及DataSource。
-
server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。
2 根据上面的 schema.xml中的配置文件,在 mysql服务器中【211,212,213】,共3台,新建 实际库 actual_db1
3 启动 mycat服务
后台启动
./bin/mycat start
普通启动,直接看日志
./bin/mycat console
./bin/mycat stop
./bin/mycat status
./bin/mycat restart
4 根据上面的server.xml配置文件中的账号,密码,连接到 mycat 服务器,注意端口是8066
mysql -h 172.16.208.214 -P 8066 -u root -p
5 根据上面的 schema.xml中的配置文件,在 mycat中新建逻辑库 【看版本,也许不用】,新建逻辑表
再查看MySQL的3个库,发现表都自动创建好啦
(如果实际库中已经有表,且逻辑表和实际表名也相同,就可省略此步骤)
CREATE TABLE logic_table_1 (
id BIGINT (20) NOT NULL,
title VARCHAR (100) NOT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARSET = utf8 ;
6 在 mycat中,对逻辑表做增删改查操作,测试,至于数据会如何分布,就是rule.xml中的配置,这里使用默认
因为我们采用的分片规则是每节点存储500万条数据,所以当ID大于5000000则会存储到第二个节点
上。
# 会添加到 211机器
INSERT INTO logic_table_1(ID,TITLE) VALUES(1,'goods1');
INSERT INTO logic_table_1(ID,TITLE) VALUES(2,'goods2');
INSERT INTO logic_table_1(ID,TITLE) VALUES(3,'goods3');
# 会添加到 212机器
INSERT INTO logic_table_1(ID,TITLE) VALUES(5000001,'goods5000001');
以下是配置文件的详细情况
schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 逻辑库配置 -->
<schema name="logic_db1" checkSQLschema="false" sqlMaxLimit="100">
<!-- 逻辑表配置,rule用于指定分片规则 -->
<table name="logic_table_1" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
</schema>
<!-- 数据节点配置,通常说所的数据分片 -->
<dataNode name="dn1" dataHost="localhost1" database="actual_db1" />
<dataNode name="dn2" dataHost="localhost2" database="actual_db1" />
<dataNode name="dn3" dataHost="localhost3" database="actual_db1" />
<!-- 节点主机配置 ,具体的数据库实例、读写分离配置和心跳语句 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.16.208.211:3306" user="root"
password="ProphetClouds.com2017">
</writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="172.16.208.212:3306" user="root"
password="ProphetClouds.com2017">
</writeHost>
</dataHost>
<dataHost name="localhost3" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM3" url="172.16.208.213:3306" user="root"
password="ProphetClouds.com2017">
</writeHost>
</dataHost>
</mycat:schema>
server.xml修改如下
<!-- 添加两个用户,一个为只读权限 -->
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">logic_db1</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="logic_db1" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">logic_db1</property>
<property name="readOnly">true</property>
</user>