在完成mycat安装后, 开始一个示例来尽快熟悉mycat
| 服务器名称 | 地址 | 说明 |
|---|---|---|
| mycat服务器 | 10.211.55.13 | mycat中间件服务器 |
| mysql服务器 | 10.211.55.9 | mysql服务器 |
| 库名称 | 说明 |
|---|---|
| db01 | 只有一个user表 |
| db02 | item表 |
| db03 | item表 |
db02,db03上的item表根据id%2取模保存数据, 也就是进行了数据分片
db01 创建表语句
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`indate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
CREATE TABLE `item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` int(11) NOT NULL DEFAULT '0',
`indate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mycat目录: /usr/local/mycat
至此, 我们的环境就配置好了
路径在 /usr/local/mycat/conf/server.xml
0
0
1
0
8066
9066
300000 0.0.0.0
4096 32
0
1
1m
1k
0
384m
true
123456
TESTDB
user
TESTDB
true
路径在: /usr/local/mycat/conf/rule.xmlfunction必须在tableRule的下面, 否则会报错找不到
id
mod-long
2
160
路径在: /usr/local/mycat/conf/schema.xml
声明也必须按照顺序, 最不需要调用的, 放在最后。
select user()
> cd /usr/local/mycat/bin
> ./mycat start
如果发生错误可以查看/usr/local/mycat/logs/wrapper.log日志
账号和密码都是server.xml声明的
> /usr/local/mysql/bin/mysql -h20.211.55.13 -uroot -P8066 -p123456
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 row in set (0.00 sec)
发现有TESTDB库
mysql> use TESTDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| item |
| users |
+------------------+
2 rows in set (0.00 sec)
看到了item和users表, 这就是我们在schema.xml中声明的逻辑表, 实际对应的是mysql服务器上的表
mysql> insert into users (`id`, `name`, `indate`)values(1, 'test_name', '2017-01-01');
Query OK, 1 row affected (0.08 sec)
mysql>
去实际的users表中看, 数据也存在。
mysql> select * from users;
+----+-----------+---------------------+
| id | name | indate |
+----+-----------+---------------------+
| 1 | test_name | 2017-01-01 00:00:00 |
+----+-----------+---------------------+
1 row in set (0.06 sec)
也可以查到, 说明执行成功了
因为id分布式的话,id无法自增判断, 所以必须指定id, 否则提示错误。这个在稍后会介绍如何解决
mysql> insert into item(`id`, `value`, `indate`)values(1, 1, '2017-01-01');
Query OK, 1 row affected (0.01 sec)
查看实际的库, 发现写在了db03库中,
再写入一条
mysql> insert into item(`id`, `value`, `indate`)values(2, 2, '2017-01-01');
Query OK, 1 row affected (0.01 sec)
发现写在了db02库中, 所以分片的方式也成功了
+----+-------+---------------------+
| id | value | indate |
+----+-------+---------------------+
| 2 | 2 | 2017-01-01 00:00:00 |
| 1 | 1 | 2017-01-01 00:00:00 |
+----+-------+---------------------+
2 rows in set (0.03 sec)
也有了两条记录
欢迎访问我的博客
