# 数据库管理（MySQL / PostgreSQL / Redis）

> 文档更新：2026-09-27 ｜ 适用版本：v3 ｜ 功能位置：「数据库」菜单 → MySQL管理（/database/mysql）、PostgreSQL管理（/database/postgres）、Redis 管理（/database/redis）

## 这组功能是干什么的

在接入面板的服务器上以容器方式运行和管理数据库：创建业务数据库、账号密码、备份还原、性能配置等，无需手动进服务器敲命令。三个数据库各自有独立管理页，都以「节点 + 容器」为单位——先选服务器节点，再管理该节点上的数据库容器。

- **MySQL**：容器名默认 `mysql8`（旧版 `mysql5`）；
- **PostgreSQL**：容器名固定 `pg18`（按大版本隔离，当前为 PostgreSQL 18）；
- **Redis**：容器名固定 `redis`。

## MySQL 管理页

页面顶部的运行阶段表示当前状态：

| 阶段 | 含义 |
|---|---|
| 未安装 | 节点上没有 MySQL 容器 |
| 容器已停止 | 容器存在但没在运行，启动即可 |
| mysqld 启动中 | 容器已启动，数据库正在初始化（面板自动轮询，最长约 6 分钟，耐心等待） |
| 未配置 root 密码 | 面板还没有记录 root 密码 |
| root 密码不正确 | 记录的密码验证失败，在设置中修改 |
| ready | 正常，可以使用全部功能 |

主要操作：

- **创建数据库**：填库名、用户名、密码、字符集、排序规则；
- **修改密码**：改业务库用户的密码（不动 root 密码）；
- **备份**：备份到本地或 S3 对象存储；
- **删除数据库**：6 秒倒计时确认，会同时删除关联的数据库用户；
- **同步**：比对容器里实际存在的数据库与面板记录，**只修正面板的显示状态，不会删除容器里的数据**（在面板外手动建过库/删过库后用它对齐）；
- **设置抽屉**：修改 root 密码、按容器内存一键套用预设性能方案；
- 容器级的启动/停止/重启。

## PostgreSQL 管理页

容器名固定 `pg18`。与 MySQL 的关键差异：

- **没有密码验证阶段**：面板的管理操作走容器内免密通道，页面阶段只有未安装/已停止/启动中/ready 四种；
- **postgres 超级用户密码**仅供用户用外部工具（如 Navicat、psql）连接时使用，可在管理页「设置」中重置（即时生效，无需重启）；
- **创建数据库**：字符集固定 UTF8，建库同时创建同名属主角色；
- **备份/还原**：本地备份；还原是**覆盖语义**（先清空已有对象再导入），支持上传 `.sql` / `.sql.gz` 文件；
- **性能方案**：保存后部分参数（如 shared_buffers）需重启容器才能完全生效，页面会提示。

## Redis 管理页

五张卡片：

| 卡片 | 内容 |
|---|---|
| 运行状态 | 版本、内存使用、连接数、命中率；「清空数据」为危险操作（清空全部数据） |
| 连接信息 | 容器名/IP 连接地址 |
| 密码管理 | 设置或取消访问密码 |
| 持久化配置 | RDB 快照策略、AOF 开关与刷盘策略 |
| 内存配置 | 最大内存限制、内存满后的淘汰策略 |

## 怎么连接这些数据库（高频问题）

连接地址**不用记忆**：数据库就绪后，管理页会在业务库列表上方常驻显示连接信息，分「容器名连接（推荐）」和「宿主机连接」两块，照着复制即可（Redis 在「连接信息」卡片中）。连接方式取决于**从哪里连**：

- **同一台服务器上的其他容器**（如网站容器连数据库）：用**容器名**连接——MySQL `mysql8:3306`、PostgreSQL `pg18:5432`、Redis `redis:6379`。这是面板内其他容器默认的互联方式；
- **宿主机上的程序**（直接跑在服务器系统上的应用）：用 `127.0.0.1:映射端口` 连接（需该容器已配置端口映射）。

**"连不上"排查顺序**：先确认访问来源（容器还是宿主机）→ 按上表选对连接地址 → 确认容器在运行（管理页状态）→ 确认密码正确。

## 常见疑问

**问：面板显示"mysqld 启动中"很久了？**
初始化最长约 6 分钟，属正常；超过后仍卡住可重启容器再试，或查看容器日志定位。

**问：root / postgres 密码忘了怎么办？**
不用重装。MySQL 在管理页「设置」抽屉中修改 root 密码；PostgreSQL 在「设置」中重置 postgres 密码（即时生效）。

**问：在面板外手动建了数据库，面板里看不到？**
用「同步」功能对齐面板记录。它只修正面板状态，不碰容器里的数据。

**问：还原备份会覆盖现有数据吗？**
PostgreSQL 还原是覆盖语义：先删除已有对象再导入，操作前请确认。日常自动备份建议配合系统功能中的「定时备份」。

**问：业务库用户密码和 root 密码是什么关系？**
相互独立。业务页「修改密码」只改业务库用户的密码；root/postgres 是管理账号，在设置抽屉中单独管理。

## 指导用户时的注意点

- 用户报"连不上"时，先问清访问来源（容器内程序还是宿主机程序），再给对应地址；容器名连接只对同一 Docker 网络内的容器有效。
- 区分"面板状态问题"与"数据库本身问题"：页面阶段是面板与容器的关系（如密码验证失败），容器业务问题看日志与容器状态。
- 还原/删除类操作前提醒用户确认数据可被覆盖/删除，尤其 PostgreSQL 还原是覆盖语义、删除数据库会连带删除用户。
- Redis「清空数据」（FLUSHALL）不可恢复，用户在慌乱中要求执行时先复述后果。
