阿里巴巴Java开发手册:
【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
单表数据量太大, 分库不能解决,存在瓶颈,需要分表。
2库4表
2个库,每个库2个表(使用user_id进行分库,使用order进行分表)
可自行扩展 10库100表,100库10000表
server-order0(t_order0、t_order1)
server-order1(t_order0、t_order1)
第一个库 server-order0
docker run -d \
-p 4310:3306 \
-v /server/order0/conf:/etc/mysql/conf.d \
-v /server/order0/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name server-order0 \
mysql:8.0.30
#进入容器:
docker exec -it server-order0 env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -uroot -p
#修改默认密码插件
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
第二个库 server-order1
docker run -d \
-p 4311:3306 \
-v /server/order1/conf:/etc/mysql/conf.d \
-v /server/order1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name server-order1 \
mysql:8.0.30
#进入容器:
docker exec -it server-order1 env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -uroot -p
#修改默认密码插件
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
分别建表:
CREATE DATABASE db_order;
USE db_order;
CREATE TABLE t_order0 (
id BIGINT,
order_no VARCHAR(30),
user_id BIGINT,
PRIMARY KEY(id)
);
CREATE TABLE t_order1 (
id BIGINT,
order_no VARCHAR(30),
user_id BIGINT,
PRIMARY KEY(id)
);
查看是否创建成功
docker exec -it server-order0 bash
mysql -uroot -p
show databases;
use db_order;
show tables;


配置文件配置
# 默认是 Standalone ,不写也行 mode: type: Standalone repository: type: JDBC # 输出sql: props: sql-show: true # 哪些数据源 配置好 dataSources: user_ds: dataSourceClassName: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:4301/db_user username: root password: 123456 order_ds_0: # 2个订单库 0 dataSourceClassName: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:4310/db_order username: root password: 123456 order_ds_1: # 2个订单库 1 dataSourceClassName: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:4311/db_order username: root password: 123456 # 水平分片规则 rules: - !SHARDING tables: t_user: actualDataNodes: user_ds.t_user t_order: actualDataNodes: order_ds_${0..1}.t_order${0..1} # 分库、分表 databaseStrategy: # 分库策略 以用户 user_id 字段进行shard standard: shardingColumn: user_id shardingAlgorithmName: userid_inline # 指向下面的 userid_inline 规则 tableStrategy: # 分表策略 以 id(雪花算法)字段分,(不写的话 默认使用分库计算) standard: shardingColumn: id shardingAlgorithmName: order_id_inline shardingAlgorithms: userid_inline: # 制定 分库的算法 user_id type: INLINE props: algorithm-expression: order_ds_${user_id % 2} order_id_inline: # 制定 分表的策略 order_id type: INLINE props: algorithm-expression: t_order${id % 2}