MySQL数据库 分库分表技术
前言
本环境是基于 Centos 7.8 系统构建MySQL-5.7.14
具体构建,请参考 MySQL-5.7.14 环境构建
随着我们的系统运行,存储在关系型数据库的数据量会越来越大,系统的访问的压力也会随之增大,如果一个库中的表数据超过了一定的数量,比如说MySQL中的表数据达到千万级别,就需要考虑进行分库分表。
一、什么是分库分表技术
为什么需要分库分表?
随着我们的系统运行,存储在关系型数据库的数据量会越来越大,系统的访问的压力也会随之增大,如果一个库中的表数据超过了一定的数量,比如说MySQL中的表数据达到千万级别,就需要考虑进行分库分表;
其次随着表数据的不断增大,会发现,查询也随着变得缓慢,如果添加索引的话,会发现影响到了新增和删除的性能,如果我们将数据库分散到不同的表上,单表的索引大小就得到了控制,对索引以及表结构的变更会变得很方便和高效;
当数据库实例的吞吐量达到性能的瓶颈时,我们需要扩展数据库实例,让每个数据库实例承担其中一部分数据库的请求,分解总体的大请求量的压力;
在数据库进行扩容的时候对应用层的配置改变最少, 就需要在每个数据库实例中预留足够的数据库数量
什么是分库分表?
简而言之就是数据拆分:将一个表结构分为多个表,或者将一个表数据分片后放入多个表,这些表可以放在同一个数据库里,也可以放到不同的数据库中,甚至可以放到不同的数据库实例中数据拆分的方式
分库分表有哪些解决方案呢?
垂直拆分:根据业务的维度,将原本一个库中的表拆分多个表,每个库中表与原有的结构不同
水平拆分:根据分片算法,将一个库拆分成多个库,每个库依旧保留原有的结构
分库分表设计架构
垂直拆分、水平差分的优缺点
拆分方式 | 优点 | 缺点 |
---|---|---|
垂直拆分 | 1、拆分后业务清晰,拆分规则明确 2、系统之间进行整合或扩展容易 3、按照成本、应用等级、应用的类型等将表放到不同的机器上,便于管理 4、便于实现动静分离、冷热分离的数据库表的设计模式 5、数据维护简单 |
1、部分业务表无法进行关联、只能通过接口的方式来解决,提高了系统的复杂度 2、受每种业务不同的限制,存在单库性能瓶颈,对数据扩展和性能提升不友好 3、事务处理复杂 |
水平拆分 | 1、单库单表的数据保持一定的量级,有助于性能的提高 2、切分的表的结构相同,应用层改造较少,只需要增加路由规则即可 3、提高了系统的稳定性和负载能力 |
1、切分后数据是分散的,很难利用数据库的关联查询,跨库查询性能较差 2、拆分规则难以抽象 3、分片数据的一致性难以解决 4、数据扩容的难度和维护量极大 |
垂直拆分和水平拆分共同点
- 存在分布式事务问题
- 存在跨节点join的问题
- 存在跨节点合并排序、分页的问题
- 存在多数据源管理的问题
垂直拆分更偏向于业务拆分的过程,在技术上我们更倾向于水平切分的方案
二、垂直拆分 案例实战
垂直拆分架构
环境准备
几台部署有mysql环境的主机,具体部署,参考 MySQL-5.7.14 环境构建
角色 | 主机 | IP地址 |
---|---|---|
mycat | mysql-yum | 192.168.5.11/24 |
主库 | mysql-rpm | 192.168.5.12/24 |
从库1 | mysql-binary | 192.168.5.13/24 |
从库2 | mysql-source_code | 192.168.5.14/24 |
三个节点授权
mysql> grant all on *.* to 'root'@'192.168.5.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.09 sec
创建数据库
# 主库
mysql> create database db2;
Query OK, 1 row affected (0.00 sec)
mysql> use db2;
Database changed
# 分库一同执行
mysql> create database db2;
Query OK, 1 row affected (0.00 sec)
部署 mycat 环境
# 部署jdk
[root@mysql-yum ~]# ll jdk-8u144-linux-x64.rpm Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
-rw-r--r-- 1 root root 169971490 Feb 7 13:23 jdk-8u144-linux-x64.rpm
-rw-r--r-- 1 root root 15662280 Feb 7 13:22 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@mysql-yum ~]# yum install jdk-8u144-linux-x64.rpm -y
# 部署mycat
[root@mysql-yum ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@mysql-yum ~]# cd /usr/local/mycat/
[root@mysql-yum mycat]# ll
total 12
drwxr-xr-x 2 root root 190 Feb 7 13:25 bin
drwxrwxrwx 2 root root 6 Mar 1 2016 catlet
drwxrwxrwx 4 root root 4096 Feb 7 13:25 conf
drwxr-xr-x 2 root root 4096 Feb 7 13:25 lib
drwxrwxrwx 2 root root 6 Oct 28 2016 logs
-rwxrwxrwx 1 root root 217 Oct 28 2016 version.txt
# 配置mycat环境变量
[root@mysql-yum mycat]# vim /etc/profile.d/mycat.sh
export PATH=$PATH:/usr/local/mycat/bin
[root@mysql-yum mycat]# source /etc/profile.d/mycat.sh
# 配置mycat配置文件
[root@mysql-yum ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="emp" dataNode="sh" />
<table name="dept" dataNode="bj" />
</schema>
<dataNode name="sh" dataHost="db2" database="db2" />
<dataNode name="bj" dataHost="db3" database="db2" />
<dataHost name="db2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db2" url="192.168.5.13:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="db3" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db3" url="192.168.5.14:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
# 启动mycat
[root@mysql-yum ~]# mycat start
Starting Mycat-server...
# 查看mycat端口信息
[root@mysql-yum ~]# netstat -lnutp | egrep '[89]066'
tcp6 0 0 :::8066 :::* LISTEN 20274/java
tcp6 0 0 :::9066 :::* LISTEN 20274/java
测试分库效果
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [TESTDB]>
# 插入数据
# 创建表emp表并插入数据
CREATE TABLE `emp` (
`empno` int(4) NOT NULL,
`ename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`job` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`mgr` int(4) NULL DEFAULT NULL,
`hiredate` date NOT NULL,
`sai` int(255) NOT NULL,
`comm` int(255) NULL DEFAULT NULL,
`deptno` int(2) NOT NULL,
PRIMARY KEY (`empno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `emp` VALUES (1001, '甘宁', '文员', 1013, '2000-12-17',
8000, NULL, 20);
INSERT INTO `emp` VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-
20', 16000, 3000, 30);
INSERT INTO `emp` VALUES (1003, '殷天正', '销售员', 1006, '2001-02-
22', 12500, 5000, 30);
INSERT INTO `emp` VALUES (1004, '刘备', '经理', 1009, '2001-04-02',
29750, NULL, 20);
INSERT INTO `emp` VALUES (1005, '谢逊', '销售员', 1006, '2001-09-
28', 12500, 14000, 30);
INSERT INTO `emp` VALUES (1006, '关羽', '经理', 1009, '2001-05-01',
28500, NULL, 30);
INSERT INTO `emp` VALUES (1007, '张飞', '经理', 1009, '2001-09-01',
24500, NULL, 10);
INSERT INTO `emp` VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-
19', 30000, NULL, 20);
INSERT INTO `emp` VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-
17', 50000, NULL, 10);
INSERT INTO `emp` VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-
08', 15000, 0, 30);
INSERT INTO `emp` VALUES (1011, '周泰', '文员', 1006, '2007-05-23',
11000, NULL, 20);
INSERT INTO `emp` VALUES (1012, '程普', '文员', 1006, '2001-12-03',
9500, NULL, 30);
INSERT INTO `emp` VALUES (1013, '庞统', '分析师', 1004, '2001-12-
03', 30000, NULL, 20);
INSERT INTO `emp` VALUES (1014, '黄盖', '文员', 1007, '2002-01-23',
13000, NULL, 10);
INSERT INTO `emp` VALUES (1015, '张三', '保洁员', 1001, '2013-05-
01', 80000, 50000, 50);
# 创建dept表并插入数据:
CREATE TABLE `dept` (
`deptno` int NOT NULL ,
`dname` char(9) NOT NULL ,
`loc` char(6) NOT NULL
);
INSERT INTO `dept` VALUES (10, '教研部', '北京');
INSERT INTO `dept` VALUES (20, '学工部', '上海');
INSERT INTO `dept` VALUES (30, '销售部', '广州');
INSERT INTO `dept` VALUES (40, '财务部', '武汉');
查看记录
登录mycat查看:
主库:
分库–192.168.5.13:
分库–192.168.5.14:
分库成功!!!
三、水平拆分 案例实战
水平拆分:通俗来讲就是将大表按行还拆分
分片:对一个"bigtable",比如说t3表
- 行数非常多,800w
- 访问非常频繁
分片的目的:- 将大数据量进行分布存储
- 提供均衡的访问路由
分片策略:- 范围 range 800w 1-400w 400w01-800w
- 取模 mod 取余数
- 枚举
- 哈希 hash
- 时间 流水
- 优化关联查询
- 全局表
- ER分片
分片架构
基于*范围*分片
修改mycat配置文件
[root@mysql-yum ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t3" dataNode="sh,bj" rule="auto-sharding-long" />
</schema>
<dataNode name="sh" dataHost="db2" database="db2" />
<dataNode name="bj" dataHost="db3" database="db2" />
<dataHost name="db2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db2" url="192.168.5.13:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="db3" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db3" url="192.168.5.14:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
[root@mysql-yum ~]# vim /usr/local/mycat/conf/rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm></rule>
</tableRule>
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
</mycat:rule>
[root@mysql-yum ~]# vim /usr/local/mycat/conf/autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
#0-500M=0500M-1000M=1
#500M-1000M=1
#1000M-1500M=2
0-10=0
11-20=1
启动mycat
[root@mysql-yum ~]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@mysql-yum ~]# netstat -lnutp | egrep '[89]066'
tcp6 0 0 :::8066 :::* LISTEN 5359/java
tcp6 0 0 :::9066 :::* LISTEN 5359/java
测试
# mycat 创建t3库,并插入数据
MySQL [TESTDB]> create table t3(id int,name char(20));
Query OK, 0 rows affected (0.00 sec)
MySQL [TESTDB]> insert into t3(id,name) values(1,'a'),(2,'b'),(3,'c'),(4,'d');
Query OK, 4 rows affected (0.04 sec)
MySQL [TESTDB]> insert into t3(id,name) values(5,'xx'),(6,'yy'),(7,'zz'),(11,'aa'),(12,'bb'),(13,'cc'),(14,'dd');
Query OK, 7 rows affected (0.00 sec)
MySQL [TESTDB]> select * from t3;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | xx |
| 6 | yy |
| 7 | zz |
| 11 | aa |
| 12 | bb |
| 13 | cc |
| 14 | dd |
| 11 | aa |
| 12 | bb |
| 13 | cc |
| 14 | dd |
+------+------+
15 rows in set (0.03 sec)
# 分库查看
--- 192.168.5.13
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| emp |
| t3 |
+---------------+
2 rows in set (0.00 sec)
mysql> select * from t3;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | xx |
| 6 | yy |
| 7 | zz |
+------+------+
7 rows in set (0.00 sec)
--- 192.168.5.14
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| dept |
| t3 |
+---------------+
2 rows in set (0.00 sec)
mysql> select * from t3;
+------+------+
| id | name |
+------+------+
| 11 | aa |
| 12 | bb |
| 13 | cc |
| 14 | dd |
| 11 | aa |
| 12 | bb |
| 13 | cc |
| 14 | dd |
+------+------+
8 rows in set (0.00 sec)
分表成功!!!
基于*取模*分片
编辑mycat配置文件
[root@mysql-yum ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t4" dataNode="sh,bj" rule="mod-long" />
</schema>
<dataNode name="sh" dataHost="db2" database="db2" />
<dataNode name="bj" dataHost="db3" database="db2" />
<dataHost name="db2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db2" url="192.168.5.13:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="db3" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db3" url="192.168.5.14:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
[root@mysql-yum ~]# vim /usr/local/mycat/conf/rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">2</property>
</function>
</mycat:rule>
# 启动mycat
[root@mysql-yum ~]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
# 查看mycat端口状态
[root@mysql-yum ~]# netstat -lnutp | egrep '[89]066'
tcp6 0 0 :::8066 :::* LISTEN 21276/java
tcp6 0 0 :::9066 :::* LISTEN 21276/java
测试
mycat 创建数据库、表,并插入数据
MySQL [TESTDB]> create table t4(id int,name char(20));
Query OK, 0 rows affected (0.05 sec)
MySQL [TESTDB]> insert into t4(id,name) values(1,'a'),(2,'b'),(3,'c'),(4,'d');
Query OK, 4 rows affected (0.02 sec)
mycat 端查看数据
从库查看
192.168.5.13
192.168.5.14
分表成功!!!
基于*枚举*分片
编辑mycat配置文件
[root@mysql-yum ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t5" dataNode="sh,bj" rule="sharding-by-intfile" />
</schema>
<dataNode name="sh" dataHost="db2" database="db2" />
<dataNode name="bj" dataHost="db3" database="db2" />
<dataHost name="db2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db2" url="192.168.5.13:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="db3" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db3" url="192.168.5.14:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
[root@mysql-yum ~]# vim /usr/local/mycat/conf/rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="sharding-by-intfile">
<rule>
<columns>name</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type">1</property>
<property name="defaultNode">0</property>
</function>
</mycat:rule>
[root@mysql-yum ~]# vim /usr/local/mycat/conf/partition-hash-int.txt
#10000=0
#10010=1
bj=0
sh=1
DEFAULT_NODE=1
# 启动mycat
[root@mysql-yum ~]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
# 查看mycat端口状态
[root@mysql-yum ~]# netstat -lnutp | egrep '[89]066'
tcp6 0 0 :::8066 :::* LISTEN 23729/java
tcp6 0 0 :::9066 :::* LISTEN 23729/java
测试:
mycat 创建数据库、表,并插入数据
MySQL [TESTDB]> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| t5 |
+------------------+
1 row in set (0.00 sec)
MySQL [TESTDB]> create table t5(id int,name char(20));
Query OK, 0 rows affected (0.13 sec)
MySQL [TESTDB]> insert into t5(id,name) values(1,'bj'),(2,'sh'),(3,'bj'),(4,'sh'),(5,'tj');
Query OK, 5 rows affected (0.01 sec)
mycat 段查看数据
mycat 端查看数据
从库查看
192.168.5.13
192.168.5.14
分表成功!!!
基于*mycat 全局表*分片
Mycat中表的类型中,定义了全局表和普通表,全局表,可以说就是在每一个数据库节点中都存在,在mycat中,对全局表的变更 操作,都会发送到每一个节点上,全局表的特点是,变化小,数据量不是特别多,而且全局都是依赖于它的,这种表在系统中,常见的是基础表,比如菜单、网站系统信息,数据字典等。全局表在mycat中,也是很有优先权的,可以和任何的表进行join操作全局表的作用。
在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题。
考虑到字典表具有以下几个特性:
- 变动不频繁
- 数据量总体变化不大
- 数据规模不大,很少有超过数十万条记录。
鉴于此,MyCAT 定义了一种特殊的表,称之为“全局表”,全局表具有以下特性:
- 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
- 全局表的查询操作,只从一个节点获取
- 全局表可以跟任何一个表进行 JOIN 操作
使用场景:
如果你的业务中有些数据类似于数据字典,比如配置文件的配置,
常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大,
而且大部分的业务场景都会用到,那么这种表适合于Mycat全局表,无须对数据进行切分,
要在所有的分片上保存一份数据即可,Mycat 在Join操作中,业务表与全局表进行Join聚合会优先选择相同
分片内的全局表join,
避免跨库Join,在进行数据插入操作时,mycat将把数据分发到全局表对应的所有分片执行,在进行数据读取
时候将会随机获取一个节点读取数据。
编辑mycat配置文件
[root@mysql-yum ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t_area" primaryKey="id" type="global" dataNode="sh,bj" />
</schema>
<dataNode name="sh" dataHost="db2" database="db2" />
<dataNode name="bj" dataHost="db3" database="db2" />
<dataHost name="db2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db2" url="192.168.5.13:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="db3" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="db3" url="192.168.5.14:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
[root@mysql-yum ~]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@mysql-yum ~]# netstat -lnutp | egrep '[89]066'
tcp6 0 0 :::8066 :::* LISTEN 24913/java
tcp6 0 0 :::9066 :::* LISTEN 24913/java
测试:
mycat 创建数据库、表,并插入数据
MySQL [TESTDB]> create table t_area(id int primary key,name char(20));
Query OK, 0 rows affected (0.01 sec)
MySQL [TESTDB]> insert into t_area(id,name) values(1,'a'),(2,'b'),(3,'c'),(4,'d');
Query OK, 4 rows affected (0.00 sec)
mycat 端查看数据
查看mycat 数据插入状况
查看mycat 数据读取状况
从库查看
192.168.5.13
192.168.5.14
结论:mycat 全局表水平分表方式:插入数据所有从节点,都执行插入动作,读取数据时,则由mycat随机调用任意从服务器读取
分表成功!!!