异构数据库的分布式搭建
分布式数据库配置水平分片
一、实验方案
shardingsphere 作为逻辑数据库,实际的物理数据库由 MySQL 和 openGauss 组成。其中,shardingsphere 安装在宿主机上,两个物理数据库由 docker 来构建。
二、搭建
1.安装 ShardingSphere-Proxy
我们通过二进制发布包的方式安装,我下载的是5.3.2,注意版本号,不同版本之间的配置不同:
点击 链接 后,选择93M那个:

上传至服务器解压安装:
1 | |
进入 bin/ 目录:
1 | |
2.docker 启动 MySQL和 openGauss 数据库
2.1 换源
如果下面的步骤 2.2、2.3 拉取超时,可以换国内的源:
1 | |
vim 打开 daemon.json,按 i 进入插入模式,把里面的内容替换为下面的:
1 | |
按 Esc 切换到普通模式,按 : 切换到底行模式,输入 wq 保存并退出。
2.2 启动 MySQL
注意先启动 docker
1systemctl start docker
1 | |
2.3 启动 openGauss
1 | |
此时,命令行输入 docker ps,发现两个容器都在正常运行:

3. 配置水平分片
配置水平分片时,仅需要配置 config-sharding.yaml 和 server.yaml。
3.1 配置 server.yaml
1 | |
3.2 配置 config-sharding.yaml
ip地址需要查询:
1
2docker inspect -f '{{ .NetworkSettings.IPAddress }}' ahwei_db0
docker inspect -f '{{ .NetworkSettings.IPAddress }}' ahwei_db1
1 | |
4.数据库建库建表
4.1 MySQL
进入 mysql 客户端:
进入 docker 容器:
1
docker exec -it ahwei_db0 bash连接 MySQL 客户端:
1
mysql -uroot -p123456

建库
1
2create database wenjw_db0 charset = 'utf8';
use wenjw_db0;建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29CREATE TABLE wenjw_Stu0 (
Sno INT PRIMARY KEY,
Sname VARCHAR(100),
Sdept VARCHAR(100),
Stel VARCHAR(20),
Sex VARCHAR(10),
Sage INT,
Saddr VARCHAR(200),
Spost VARCHAR(10)
);
CREATE TABLE wenjw_Cou (
Cno INT PRIMARY KEY,
Cname VARCHAR(100),
Cdept VARCHAR(100),
Ctea VARCHAR(100),
Cdate VARCHAR(20),
CScore INT,
Caddr VARCHAR(200)
);
CREATE TABLE wenjw_SC0 (
Sno INT,
Cno INT,
Grade DECIMAL(4, 1) NOT NULL CHECK (Grade BETWEEN 0 AND 100),
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES wenjw_Stu0(Sno),
FOREIGN KEY (Cno) REFERENCES wenjw_Cou(Cno)
);退出
\q退出 MySQL,exit退出容器:
4.2 openGauss
进入 openGauss 客户端:
1
2docker exec -it ahwei_db1 bash
gsql -d postgres -U omm新建用户
1
2
3
4CREATE USER ahwei WITH PASSWORD 'Ahwei@123';
GRANT CONNECT ON DATABASE postgres TO ahwei;
GRANT ALL PRIVILEGES ON SCHEMA public TO ahwei;
ALTER USER ahwei WITH SYSADMIN;退出后用 ahwei 连接:
1
gsql -d postgres -U ahwei建库
1
2CREATE DATABASE wenjw_db1 WITH ENCODING 'UTF8';
\c wenjw_db1建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29CREATE TABLE wenjw_Stu1 (
Sno INT PRIMARY KEY,
Sname VARCHAR(100),
Sdept VARCHAR(100),
Stel VARCHAR(20),
Sex VARCHAR(10),
Sage INT,
Saddr VARCHAR(200),
Spost VARCHAR(10)
);
CREATE TABLE wenjw_Cou (
Cno INT PRIMARY KEY,
Cname VARCHAR(100),
Cdept VARCHAR(100),
Ctea VARCHAR(100),
Cdate VARCHAR(20),
CScore INT,
Caddr VARCHAR(200)
);
CREATE TABLE wenjw_SC1 (
Sno INT,
Cno INT,
Grade DECIMAL(4, 1) NOT NULL CHECK (Grade BETWEEN 0 AND 100),
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES wenjw_Stu1(Sno),
FOREIGN KEY (Cno) REFERENCES wenjw_Cou(Cno)
);退出
5.插入数据
在shardingsphere 文件夹的 bin/ 目录下,启动这个中间件:
1 | |
如果看到如下日志就说明成功了:

用 MySQL 客户端连接:
1 | |
进入数据库后,插入数据:
1 | |
1 | |

1 | |

1 | |

其实每一条逻辑 SQL 都被转换成了对应的实际 SQL 在各自的数据库中执行。
三、注意
- 我这里实际上是一台机器上模拟出两个节点配置的分布式数据库,实际如果是多台服务器(或服务器 + 虚拟机,参考我大三那次的 文档),应注意端口号开放问题
- 我的服务器是阿里云的学生服务器,2核2G,因为开了两个 docker 容器,加上我用 vscode 连接的服务器,以及我下载过很多插件等等,服务器出现过死机的情况,我是在控制台重启后解决的
- 日志文件中详细记录了 shardingsphere 的运行情况
异构数据库的分布式搭建
http://example.com/2025/11/26/异构数据库的分布式搭建/
