文档/ 数据库/ 数据库配置

数据库配置

sh0 以托管容器(称为数据库服务器)运行 PostgreSQL、MySQL、MariaDB、MongoDB 和 Redis:每个容器一个引擎,配有持久卷、自动生成的凭据和稳定的内部主机名。

支持的数据库

共有五种引擎可用。控制面板提供下列版本并预选默认版本;sh0 会拉取所选版本的官方镜像。

引擎可选版本默认Docker 镜像端口
PostgreSQL17, 16, 15, 1416postgres:<version>-alpine5432
MySQL8.4, 8.08.4mysql:<version>3306
MariaDB11.4, 11.2, 10.1111.4mariadb:<version>3306
MongoDB8.0, 7.0, 6.07.0mongo:<version>27017
Redis7.4, 7.27.4redis:<version>-alpine6379
Note
API 和 CLI(--version)会把版本字符串直接作为镜像标签交给 Docker,不会与此列表核对。列表之外的版本未经 sh0 测试;若标签不存在,拉取镜像时创建会失败。
Note
创建数据库服务器以及修改其资源限制需要 Pro 或更高级别的许可证。没有许可证时,控制面板会显示升级提示,API 会拒绝请求。

创建数据库

数据库服务器可通过控制面板、CLI 或 API 创建。只有 owner 和 admin 角色可以创建。

  1. 在侧边栏打开 Services,然后打开 Database Servers。
  2. 点击 Create Server 并选择引擎。
  3. 填写 Server name:3 到 63 个字符,仅限小写字母、数字和连字符,且不能以连字符开头或结尾。
  4. 选择 Version,然后点击 Create Server 确认。

sh0 会按需拉取镜像、启动容器,并最多等待 60 秒直到引擎可以接受连接,然后打开服务器页面。同时还会生成:

  • 管理员凭据:用户名为 postgres(PostgreSQL)、root(MySQL、MariaDB)、admin(MongoDB)或 default(Redis),密码为 32 位随机字符,并以实例主密钥加密存储。
  • 内部主机名 <name>.internal,位于每个应用都会加入的 sh0-net 网络上。
  • 数据卷 sh0-dbsrv-<name>-data,挂载到引擎的数据目录。容器本身名为 sh0-dbsrv-<name>。

也可以通过 CLI 完成(sh0 db 是 sh0 database-servers 的别名)。引擎取值为 postgres、mysql、mariadb、mongodb 和 redis:

Terminal
$ sh0 db create --name my-db --engine postgres
Database server 'my-db' created (id: 3afde175-12d6-4614-94ca-e504737a7cc4, engine: postgres 16)

$ sh0 db info 3afde175-12d6-4614-94ca-e504737a7cc4
Database Server: my-db
  ID:       3afde175-12d6-4614-94ca-e504737a7cc4
  Engine:   postgres 16
  Status:   running
  Host:     my-db.internal
  Port:     32965
  Databases: 0
  Users:    0

$ sh0 db create-database 3afde175-12d6-4614-94ca-e504737a7cc4 --name appdb
Database 'appdb' created (id: 90083652-6e9c-44fe-afb8-a173284847ad).
Note
应用通过引擎端口(此处为 5432)连接 my-db.internal。sh0 db info 显示的 Port 是仅绑定到 127.0.0.1 的主机端口,其他机器无法访问。参见连接字符串。

新服务器是空的。可在其 Databases 和 Users 标签页中添加数据库和用户,或使用 sh0 db create-database、sh0 db create-user 和 sh0 db grant。Redis 没有数据库标签页。

资源限制

每个数据库服务器从创建起就带有 CPU 和内存限制。没有磁盘配额:数据卷随数据增长,直到占满主机的可用空间。

设置默认值允许范围
CPU0.5 核(所有引擎)0.1 核至主机核数
内存1 GB;Redis 为 256 MB64 至 16384 MB
磁盘无配额不可配置

在新建的 PostgreSQL 服务器上读取到的 Docker 实际限制(先是字节,然后是 nano-CPU):

Terminal
$ docker inspect sh0-dbsrv-my-db --format '{{.HostConfig.Memory}} {{.HostConfig.NanoCpus}}'
1073741824 500000000

如需修改,请打开服务器的 Scaling 标签页,设置 Memory Limit(MB)和 CPU Limit(核)并保存。保存的值不会作用于正在运行的容器:点击 Apply & Restart 以新限制重建容器。数据卷会保留;重启期间连接会中断。

数据库状态与健康

数据库服务器的状态为 running(运行中)或 stopped(已停止)。其 Overview 标签页实时显示 CPU、内存和网络用量、内部主机名以及连接信息。

管理数据库

  • 启动 / 停止:在服务器页面操作,或使用 sh0 db start 和 sh0 db stop。主机重启后容器会自动重新启动(Docker 策略 unless-stopped)。
  • 重建:sh0 db recreate 根据已保存的设置(版本、限制、挂载)重建容器,并保留数据卷。
  • 更改版本:sh0 db update <id> --version <v> 会记录新版本,下次重建时生效。控制面板不提供此操作。数据库引擎不支持降级,部分大版本升级需要先导出再恢复:请先做备份。
  • 备份:参见备份与恢复。

要删除服务器及其数据,请打开其 Settings 标签页,在 Danger Zone 中勾选 Delete volumes,然后删除。对应的 API 为 DELETE /api/v1/database-servers/:id?delete_volumes=true。

Warning
从服务器列表删除或使用 sh0 db delete 删除时,只会移除容器,数据卷 sh0-dbsrv-<name>-data 仍保留在磁盘上,尽管列表中的确认消息声称数据会被删除。删除数据卷不可撤销:请先备份。