在 NAS 上用 1Panel 部署 MySQL?别再只改 my.cnf 了!这样修改配置才真正生效

作者:doxwant 发布时间: 2025-12-20 阅读量:1 评论数:0

适用场景:群晖 / 飞牛 / TrueNAS 等 NAS 设备 + 1Panel 面板 + 自建 MySQL 应用
问题现象:明明在 1Panel 的 MySQL 配置文件中加了 skip_name_resolve=ON,但日志仍疯狂报 DNS 警告;max_connect_errors 改了也没用,IP 动不动就被 block。
根本原因:1Panel 生成的容器使用官方 MySQL 镜像,其内部配置加载机制会“吃掉”你的部分设置。
解决方案:通过 修改容器启动命令(command) 强制注入参数——本文手把手教你操作。

一、为什么你在 1Panel 里改 my.cnf 不生效?

当你在 1Panel 中创建 MySQL 应用时,它会自动生成如下结构:

/your-app-path/
├── data/               # 数据目录
├── conf/
│   └── my.cnf         # 你编辑的配置文件
├── log/               # 日志
└── docker-compose.yml

你很可能已经做了这些事:

  • conf/my.cnf 中添加:

[mysqld]
skip_name_resolve = ON
host_cache_size = 0
max_connect_errors = 999999
  • 在 1Panel 界面点击“重启”容器。

但问题依旧:

  • 日志不断出现:

[Warning] IP address '172.19.0.1' has been resolved to the host name...
  • 执行 SHOW VARIABLES 发现参数仍是默认值。

🔍 根本原因

  1. 1panel 在 docker 环境部署,存在配置链接挂载错误的问题;

二、正确做法:通过 command 强制指定启动参数

✅ 这是目前在 1Panel + Docker 环境下最可靠、100% 生效的方式。

步骤 1:进入应用目录

通过 SSH 登录你的 NAS,找到 1Panel 创建的 MySQL 应用目录;

步骤 2:编辑 docker-compose.yml

image: mysql:8.4.7
command: >
   mysqld
   --skip-name-resolve
   --host-cache-size=0
   --max-connect-errors=999999

⚠️ 注意:

  • 必须写 mysqld 开头(某些镜像要求完整命令)。

  • 参数用中划线--skip-name-resolve),不是下划线。

  • 使用 > 可多行书写,避免一行过长。

步骤 3:在 1Panel 中“重建”容器

⚠️ 不要只点“重启”!

  1. 进入 1Panel → 应用 → 找到你的 MySQL 应用。

  2. 点击「更多」→「重建」(或「更新」)。

    • 这会重新读取 docker-compose.yml 并启动新容器。

  3. 等待状态变为“运行中”。

🔄 “重建” ≠ “重启”!只有重建才会应用 command 的修改。

五、总结

在 NAS 上通过 1Panel 使用 MySQL 时,请牢记:关键启动参数必须通过 command 显式声明。这是目前最稳定、最兼容的方案。

评论