版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qzqanzc/article/details/84033452
安装mycat
- 安装JDK;
下载jdk 解压 放到/opt/jdk目录下
配置环境变量
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
- 安装mysql;
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
yum install -y mysql-community-server
- 启动mysql 并且修改root密码;
systemctl status mysqld.service
#获得初始root 密码
grep 'temporary password' /var/log/mysqld.log
#修改root 账户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
#授权其他机器登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 安装mycat;
cd /opt
#下载
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#解压
tar -xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
# 启动mycat
cd mycat/bin
./mycat start
测试分库分表
- 创建数据库
create database db01;
use db01;
CREATE TABLE user (
id INT NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL default '',
indate DATETIME NOT NULL ,
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
create database db02;
use db02;
CREATE TABLE goods(
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
indate DATETIME NOT NULL ,
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
create database db03;
use db03;
CREATE TABLE goods(
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
indate DATETIME NOT NULL ,
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.配置mycat
conf/server.xml 中定义用户以及系统相关变量,如端口等.
conf/schema.xml 中定义逻辑库,表、分片节点等内容.
conf/rule.xml 中定义分片规则.
#server.xml
#添加用户
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">TESTDB</property>
</user>
#schema.xml
<!-- 设置表的存储方式.schema name="TESTDB" 与 server.xml中的 TESTDB 设置一致 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="user" primaryKey="id" dataNode="node_db01" />
<table name="goods" primaryKey="id" dataNode="node_db02,node_db03" rule="rule1" />
</schema>
<!--设置DataNode-->
<dataNode name="node_db01" dataHost="dataHost01" database="db01" />
<dataNode name="node_db02" dataHost="dataHost01" database="db02" />
<dataNode name="node_db03" dataHost="dataHost01" database="db03" />
<!--设置DataHost-->
<dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="server1" url="127.0.0.1:3306" user="root" password="123456"/>
</dataHost>
#rule.xml
<!--修改rule-->
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<!-- 分片规则为模2运算 -->
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
3.重启mycat
./mycat restart
4.测试插入数据
insert into user(name,indate) values('hello',now());
insert into user(name,indate) values('world',now());
insert into goods(id,value,indate) values(1,100,now());
insert into goods(id,value,indate) values(2,100,now());
5.连接数据库查看结果
分库分表成功