bboyjing's blog

Mysql分库分表之Mycat学习笔记三【模拟场景、运行Mycat】

上一章我们对Mycat配置有了个初步的了解,现在我们就基于之前的配置,并且模拟一个简单的订单场景,来跑通Mycat。假设我们构建2000万条订单数据,需要以id mod运算之后存储到两台Mysql中,下面我们就一步一步的来实现。

启动Docker中的两台Mysql容器

1
2
3
4
5
6
#因为之前已经启动过容器,如果没有主动删除过,先查看下其状态
sudo docker ps -a
#若容器处于Exited状态下,将其启动即可(示例是本人自己的CONTAINER ID)
sudo docker start d1f418414648
sudo docker start 9d9674cc4fa7

连接两台Mysql并分别新建数据库order_db

1
2
3
4
5
6
7
mysql -h127.0.0.1 -P3306 -uroot -pbboyjing
create database order_db;
exit
mysql -h127.0.0.1 -P3316 -uroot -pbboyjing
create database order_db;
exit

启动Mycat

1
2
3
4
#进入Mycat安装目录
cd /opt/mycat
#启动Mycat
bin/mycat start

通过Mysql客户端连接Mycat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查看启动日志(出现connected successfuly MySQLConnection表示启动成功)
vim logs/mycat.log
#由日志可以看出Mycat端口为8066和9066,其中8066为数据端口、9066为管理端口
#下面我们通过server.xml中配置的用户来连接Mycat,出现mysql交互界面表示连接成功
mysql -h127.0.0.1 -P8066 -uroot -pbboyjing
#查看databases
mysql> show databases;
+----------+
| DATABASE |
+----------+
| OrderDB |
+----------+
#出现的是server.xml中配置的逻辑库(schema)

到此表示Mycat服务正常启动,并且通过Mysql客户端可以连通,上面最后一步show databases的结果如下图所示:
图5

设计Order表

简单地设计一张order表,位于order_db库中,表结构如下:

1
2
3
4
5
6
7
CREATE TABLE `order` (
`id` int(11) NOT NULL,
`status` tinyint(4) NOT NULL,
`price` int(11) NOT NULL,
`create_time` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

基于上一步Mysql客户端中操作

1
2
3
4
5
6
7
8
9
10
11
#切换至OrderDB库
mysql> use OrderDB;
#执行简表语句,成功后会在两台Mysql中都新建相同的order表
mysql> CREATE TABLE `order` (
-> `id` int(11) NOT NULL,
-> `status` tinyint(4) NOT NULL,
-> `price` int(11) NOT NULL,
-> `create_time` bigint(20) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

成功的输出如下:
图6

环境准备工作已经差不多了,下面一章将准备新建一个Java项目来使用Mycat。