第三章 数据库与应用排错
先说一句大实话
数据库和应用排错的核心,是分清“容器的事”还是“数据的事”。 1Panel 里几乎所有应用都以 Docker 容器方式运行,数据库也一样。容器坏了可以重建、可以重启,大不了重装;数据坏了就是真的坏了。所以这一章的每一节,都会优先保护数据,再谈修复。
一个数据库请求要闯几道关
和第二章的网站排错一样,先把路径画出来。以“网站连不上 MySQL”为例:
网站代码
↓ 读取连接信息(地址、端口、账号、密码)
Docker 网络
↓ 容器之间能不能互通
MySQL 容器
↓ 端口监听、服务存活
数据库账号权限
↓ 这个用户能不能从客户端的 IP 连进来
具体数据库
↓ 有没有这个库、表
“连不上数据库”这五个字,在这条链上至少有五个不同的故障点。第三章的方法论就是:别问“为什么连不上”,问“连到哪一步断了”。
举个具体的例子:网站报“数据库连接失败”,可能的原因包括——MySQL 容器没起来、网站和 MySQL 不在同一个 Docker 网络、数据库账号的访问权限只允许本地、连接信息里的端口填错了、磁盘满了导致 MySQL 拒绝写入。症状完全一样,处理方式完全不同。 所以这一章请你先记住一件事:症状不能定位问题,日志才能。
三类问题,三种处理方式
| 问题类型 | 典型代表 | 处理原则 |
|---|---|---|
| 连接类 | 数据库连不上、远程访问不通 | 先看网络和账号,再改配置 |
| 数据类 | 备份失败、恢复失败、数据损坏 | 先备份现状,再做任何操作 |
| 应用类 | 应用装不上、容器起不来、升级失败 | 先看容器日志,数据不动 |
一个不变的铁律:不管是哪类问题,在动任何“修复”动作之前,先想办法把当前状态备份下来。1Panel 的备份是文件级别的,数据库用 mysqldump,网站和应用也各有备份入口。备份花了三分钟,能救你三个小时。
两个最常用的排错入口
第一个:容器日志。 应用商店安装的应用、数据库,点进详情基本都能看日志;服务器上也可以直接 docker logs 容器名。容器起不来,日志第一行往往就写着原因——端口冲突、权限不足、配置文件错。
第二个:任务日志。 日志审计 → 任务日志,应用安装、升级、备份、恢复都是异步任务,失败原因全在这里。“装到一半失败”、“备份失败”这类问题,先来这里看报错原文。
一个真实的工作习惯:数据库和应用出问题时,第一件事不是点“重启”,而是
docker ps看一眼容器状态。Exited和Restarting是两种完全不同的问题,日志会告诉你差别。
一个重要的区别:本地数据库与远程数据库
1Panel 的数据库管理支持两种来源:
| 类型 | 来源 | 特点 |
|---|---|---|
| 本地实例 | 应用商店安装的 MySQL / MariaDB 等 | 容器化运行,配置文件挂载在 /opt/1panel/apps/ 下 |
| 远程服务器 | 手动添加已有数据库地址 | 只做管理,服务本身不在本机 |
排错前先确认这个数据库是哪种。远程数据库挂了,你在这台服务器上重启 Docker 是没有用的——问题根本不在这儿。数据库列表上方的下拉菜单可以切换实例,别在错误的实例上查半天。
这一章解决四个问题
| 小节 | 问题 | 一句话答案 |
|---|---|---|
| 3.1 | 数据库连不上 / 远程访问通不了 | 先分清容器内、容器间、外网三个层次 |
| 3.2 | 备份和恢复失败 | 先看报错原文,恢复前一定先备份现状 |
| 3.3 | 应用商店安装失败、容器起不来 | 任务日志 + 容器日志,两个一起看 |
| 3.4 | 应用升级和数据迁移踩坑 | 升级前备份,迁移后验证,版本对版本 |
如果时间有限只能记一句话,就记这一句:这一章的所有问题,都先从“日志”开始查,不从“现象”开始猜。
一个警告:别在生产上现学
数据库和应用的操作有几个动作是不可逆的:删库、恢复备份(覆盖现有数据)、升级(数据结构可能变化)。在你不确定的时候,宁可多查十分钟文档,也别点那个“确认”。1Panel 的官方文档对每个功能都有说明,不确定的操作先查:1Panel 官方文档:数据库。
这一章反复出现的概念
| 概念 | 一句话解释 |
|---|---|
| 本地数据库 | 应用商店装的、跑在本机容器里的数据库 |
| 远程数据库 | 通过添加服务器地址纳入管理的、在别处的数据库 |
| mysqldump | 1Panel 备份 MySQL 用的方式,导出 SQL 文本 |
| 重建 | 删掉容器重新创建,持久化数据保留,容器内其他改动丢失 |
| compose | 应用的容器编排描述文件,应用参数可以编辑修改 |
| 权限(访问权限) | 数据库用户能从哪里连、能操作哪些库 |
一条有意思的规律
应用类问题和网站类问题(第二章)有个重要区别:网站的问题大多“看得见”——浏览器一开就知道;应用的问题大多“藏得深”——容器跑得好好的,接口可能已经报错。所以应用排错更依赖日志和任务状态,而不是界面。
养成两个小习惯会很有帮助:
- 装完任何应用,先打开一次再走,别等三天后才发现根本没装好;
- 重要应用定期看一眼容器状态,
Exited和Restarting的容器不会主动告诉你。
下一节:从最常见的“数据库连不上”开始——三个层次、三种症状,一套标准的排查流程。
