Ubuntu20.04下MySQL异常后无法启动(错误13权限拒绝)及WordPress问题
解决Ubuntu 20.04上MySQL启动失败+WordPress数据库连接异常问题
我来帮你梳理这个复合问题的解决思路——你遇到的是MySQL频繁重启后直接启动失败(权限错误),同时连带WordPress上传媒体时出现数据库连接中断的问题,咱们一步步来修复:
先厘清已出现的核心现象
- WordPress上传媒体时间歇性弹出「Error establishing a database connection」,Apache日志提示「WordPress database error MySQL server has gone away for query...」,说明MySQL在频繁崩溃重启
- 手动重启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.
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)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/mysqldmysql:mysql、权限755,如果不对就修复:sudo chown mysql:mysql /var/run/mysqld sudo chmod 755 /var/run/mysqld - 检查MySQL日志目录
/var/log/mysql:
确保属主是ls -ld /var/log/mysqlmysql: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避免安全风险
验证步骤
- 启动MySQL后,执行
sudo systemctl status mysql.service确认服务正常运行 - 上传测试媒体文件到WordPress,检查是否还出现数据库连接错误
- 查看Apache和MySQL日志,确认无异常报错
内容的提问来源于stack exchange,提问作者user16421
相关产品推荐
相关产品推荐

