Docker 安装 ShardingSphere-Proxy
大纲
前言
本文将介绍如何通过 Docker 安装 ShardingSphere-Proxy。
安装方式
目前 ShardingSphere-Proxy 官方提供了三种安装方式:
- Docker
- Helm(K8s)
- 二进制发布包
安装步骤
step1:在宿主机中创建目录
- 在宿主机中创建以下目录,后续 Docker 挂载数据卷时会使用到
1 | # 创建 ShardingSphere-Proxy 的日志目录 |
step2:在宿主机中下载 MySQL 驱动
- 在宿主机中下载 MySQL 驱动 mysql-connector-java-8.0.22.jar
1 | # 下载 MySQL 驱动 |
spte3:在宿主机中创建 ShardingSphere-Proxy 配置文件
- 在宿主机中创建 ShardingSphere-Proxy 的服务器配置文件(完整的配置示例,可以从 ShardingSphere 官网 下载 ShardingSphere-Proxy 的二进制包,然后参考解压后得到的
conf/server.yaml和conf/config-xxx.yaml配置文件)
1 | # 创建 ShardingSphere-Proxy 的服务器配置文件,添加以下配置内容 |
1 | rules: |
配置文件说明
- ShardingSphere-Proxy 有两种类型的配置文件,包括:
server.yaml:ShardingSphere-Proxy 的服务器配置,用于配置注册中心、认证信息以及公用属性等,必须挂载配置文件的路径到 Docker 容器内的/opt/shardingsphere-proxy/conf目录。config-xxx.yaml:ShardingSphere-Proxy 的分配规则配置,要求以config-作为配置文件的前缀命名,必须挂载配置文件的路径到 Docker 容器内的/opt/shardingsphere-proxy/conf目录。
step4:启动 ShardingSphere-Proxy 容器
1 | # 创建并启动 ShardingSphere-Proxy 容器(Docker 会自动在宿主机上创建不存在的目录) |
- 或者通过环境变量
-e PORT自定义端口(3308表示 ShardingSphere-Proxy 端口,13308表示宿主机端口)
1 | # 创建并启动 ShardingSphere-Proxy 容器(Docker 会自动在宿主机上创建不存在的目录) |
step5:远程连接 ShardingSphere-Proxy
- ShardingSphere-Proxy 容器中默认情况下没有安装
mysql命令行客户端,因此需要远程访问
1 | mysql -h192.168.2.191 -P3307 -uroot -p |
step6:测试访问 ShardingSphere-Proxy
1 | show databases; |

- ShardingSphere-Proxy 在启动时就内置了 MySQL 系统 Schema 元数据(包含以下四个库):
| Schema | 作用 |
|---|---|
information_schema | SQL 元数据查询 |
performance_schema | 兼容性能相关 SQL |
sys | MySQL 系统视图 |
mysql | 用户 / 权限 / 系统表 |
- 即使 ShardingSphere-Proxy 未配置任何真实 MySQL 数据源,通过
show databases;仍然会看到information_schema、performance_schema、sys、mysql这 4 个库,是因为它们是 ShardingSphere-Proxy 内置的虚拟系统库。这些库的存在仅用于兼容 MySQL 协议和客户端行为,并不表示 ShardingSphere-Proxy 已经连接了真实的 MySQL 实例。 - MySQL 客户端、JDBC 驱动以及 ORM 框架在连接 MySQL 后,都会自动执行如
show databases;、select database();、select @@sql_mode;、select * from information_schema.tables;相关查询。如果这些系统库不存在或返回异常,客户端和驱动将无法正常工作,导致 JDBC 报错、ORM 启动失败、交互体验极差。 - 因此,ShardingSphere-Proxy 必须在启动时提供这些虚拟系统库来保证对 MySQL 生态的透明兼容;ShardingSphere-Proxy 只有在配置了数据源并定义了逻辑库(Schema)之后,才会在
show databases中看到真正的业务库。
注意事项
- ShardingSphere-Proxy 使用
conf/server.yaml配置注册中心、认证信息以及公用属性等。 - ShardingSphere-Proxy 支持多逻辑数据源,每个以
config-前缀命名的 YAML 配置文件(比如config-xxx.yaml),即为一个逻辑数据源。 - ShardingSphere-Proxy 默认使用
3307端口,Docker 容器可以通过环境变量-e PORT=3308指定自定义的端口。 - ShardingSphere-Proxy 默认集成了 ZooKeeper Curator 客户端,生产环境中必须配置并使用 ZooKeeper(或 Etcd)来持久化 ShardingSphere-Proxy 的元数据,即生产环境必须使用集群模式(Cluster Mode)。
- ShardingSphere-Proxy 默认以内存模式(Memory Mode)启动。在该模式下,初始化配置或执行 SQL 导致的元数据变更只在当前进程内生效,不会持久化到磁盘或注册中心,适合开发、调试和功能测试,无需手动清理运行痕迹。。
常见问题
远程连接失败
Docker 容器可以成功的创建并启动,但是 MySQL 客户端无法远程连接 ShardingSphere-Proxy。排除防火墙和网络等问题后,建议排查是不是因为 Docker 容器内存不足导致。
- 进入 Docker 容器内部,然后查看 ShardingSphere-Proxy 的日志,如果有
cannot allocate memory这样的错误日志信息(如下图所示),则说明容器内存不足
1 | # 进入容器内,其中环境变量 "env LANG=C.UTF-8" 用于避免容器内显示中文乱码的问题 |

- 解决方案:创建 ShardingSphere-Proxy 容器的时候,使用
JVM_OPTS环境变量指定堆内存的大小
1 | docker run -d \ |
