云服务器mysql分库分表环境搭建(2库4表)

阿里巴巴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}
相关推荐
zyseo85 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量
大数据·数据库·人工智能
码间留白6 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
Vex2une7 小时前
Docker Desktop WSL2后端:2026年性能调优与避坑实战指南
windows·docker·desktop·gpu容器·容器开发·virtiofs·buildkit
xiaogai_gai7 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
数据工匠老o7 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
L0017 小时前
MySQL5.7 DATE 字段无法设置默认日期?用触发器搞定|个人任务清单项目实战
mysql
程序员老赵8 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
TTATTC8 小时前
为什么单会话聊天做不好复杂工程?Claude Code 创作者的并发 Worktree 与记忆闭环实践
docker·开源
TTATTC8 小时前
状态机驱动长事务,还是 DAG 编排高并发?高可靠业务流程引擎的双核架构设计
docker·开源
殷忆枫8 小时前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker