You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04下MySQL异常后无法启动(错误13权限拒绝)及WordPress问题

解决Ubuntu 20.04上MySQL启动失败+WordPress数据库连接异常问题

我来帮你梳理这个复合问题的解决思路——你遇到的是MySQL频繁重启后直接启动失败(权限错误),同时连带WordPress上传媒体时出现数据库连接中断的问题,咱们一步步来修复:

先厘清已出现的核心现象

  1. WordPress上传媒体时间歇性弹出「Error establishing a database connection」,Apache日志提示「WordPress database error MySQL server has gone away for query...」,说明MySQL在频繁崩溃重启
  2. 手动重启MySQL失败,执行sudo service mysql start返回:

    Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

  3. systemctl status mysql.service明确指出权限错误:
    ● mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Sat 2020-12-19 12:45:50 UTC; 1min 3s ago
    Process: 192068 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
    Process: 192076 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
    Main PID: 192076 (code=exited, status=1/FAILURE)
    Status: "Server startup in progress"
    Error: 13 (Permission denied)
    
  4. journalctl -xe出现pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory的错误,同时你已经确认/var/lib/mysql属主是mysql、/usr/sbin/mysqld属主是root,和正常服务器一致

分步修复方案

1. 先补全缺失的/etc/securetty文件

这个文件看似和MySQL无关,但PAM认证异常会干扰系统的权限上下文,先补上:

sudo touch /etc/securetty
sudo chmod 600 /etc/securetty

它负责控制哪些终端允许root直接登录,缺失会导致PAM认证逻辑紊乱,间接影响MySQL启动时的权限检查。

2. 深度检查MySQL核心目录权限

除了/var/lib/mysql,还有两个关键目录容易出权限问题:

  • 检查/var/run/mysqld(MySQL运行时的socket文件目录):
    ls -ld /var/run/mysqld
    
    正常应该是属主mysql:mysql、权限755,如果不对就修复:
    sudo chown mysql:mysql /var/run/mysqld
    sudo chmod 755 /var/run/mysqld
    
  • 检查MySQL日志目录/var/log/mysql:
    ls -ld /var/log/mysql
    
    确保属主是mysql:mysql、权限750左右,异常的话执行:
    sudo chown mysql:mysql /var/log/mysql
    sudo chmod 750 /var/log/mysql
    

3. 排查Ubuntu特有的AppArmor安全模块干扰

AppArmor经常会阻止MySQL访问必要文件,先检查状态:

sudo aa-status

如果看到mysql的profile处于enforced状态,先临时禁用AppArmor测试:

sudo systemctl stop apparmor
sudo systemctl disable apparmor

然后尝试启动MySQL:

sudo service mysql start

如果启动成功,说明是AppArmor规则的问题,重新配置它:

sudo apt install apparmor-utils
sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld

之后再重新启用AppArmor:

sudo systemctl start apparmor
sudo systemctl enable apparmor

4. 修复WordPress的「MySQL server has gone away」问题

当MySQL恢复正常后,解决上传媒体时的连接中断问题:

  • 修改MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,添加/调整以下参数:
    wait_timeout = 600
    interactive_timeout = 600
    max_allowed_packet = 64M
    
    延长连接超时时间,同时增大允许的数据包大小(上传媒体需要更大的传输包)
  • 重启MySQL:
    sudo service mysql restart
    
  • 在WordPress的wp-config.php中添加连接优化配置:
    define('WP_ALLOW_REPAIR', true);
    define('DB_CONNECT_TIMEOUT', 10);
    
    访问http://你的域名/wp-admin/maint/repair.php修复数据库表,之后记得注释掉WP_ALLOW_REPAIR避免安全风险

验证步骤

  1. 启动MySQL后,执行sudo systemctl status mysql.service确认服务正常运行
  2. 上传测试媒体文件到WordPress,检查是否还出现数据库连接错误
  3. 查看Apache和MySQL日志,确认无异常报错

内容的提问来源于stack exchange,提问作者user16421

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:04:32