Ubuntu 20.04下MySQL停止后无法启动(错误13:权限拒绝)求助
我之前在DigitalOcean的1GB LAMP栈上遇到过几乎一模一样的问题,结合你给出的日志和症状,咱们一步步来排查解决:
问题核心诊断
从你的日志能看出两个关键问题:
- MySQL服务频繁自动重启(一会儿显示
ready for connections,一会儿又重新启动进程),这直接导致WordPress上传媒体时触发“数据库连接错误”; - 手动重启MySQL失败,提示
Error: 13 (Permission denied)——虽然你说/var/lib/mysql属mysql用户、/usr/sbin/mysqld是root所有,但还有几个容易忽略的权限细节。
分步解决方案
1. 先排查AppArmor权限限制(Ubuntu默认启用)
Ubuntu 20.04自带的AppArmor会限制进程的文件访问范围,哪怕文件本身权限正确,也可能被拦截:
- 先查看MySQL的AppArmor状态:
sudo aa-status | grep mysql - 如果输出显示
/usr/sbin/mysqld处于enforced状态,先临时切换到“投诉模式”测试:
然后尝试重启MySQL:sudo aa-complain /usr/sbin/mysqld
如果能成功启动,说明是AppArmor规则的问题。接下来调整规则:sudo systemctl start mysql
确保文件中包含以下路径的访问权限(没有的话就添加):sudo nano /etc/apparmor.d/usr.sbin.mysqld
保存后重新加载规则:/var/lib/mysql/ r, /var/lib/mysql/** rwk, /var/log/mysql/ r, /var/log/mysql/** rw, /var/run/mysqld/ rw,sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
2. 修复MySQL目录的深层权限问题
有时候表面看/var/lib/mysql权限正确,但子目录或文件的所有者/权限可能异常:
- 递归重置
/var/lib/mysql的所有者:sudo chown -R mysql:mysql /var/lib/mysql - 同时设置正确的目录执行权限(MySQL需要执行权限才能进入目录):
⚠️ 不要用sudo chmod -R 750 /var/lib/mysql777,会带来严重安全风险。
3. 查看MySQL启动的具体权限报错
直接手动启动mysqld,能得到更详细的错误提示,定位具体哪个文件/目录没权限:
sudo -u mysql /usr/sbin/mysqld
比如可能是/var/log/mysql的权限不对,或者临时目录/tmp的权限异常,根据提示修复即可。
4. 解决MySQL频繁重启+WordPress连接问题
当MySQL能稳定启动后,还要处理“MySQL server has gone away”的根源——1GB VPS内存不足:
- 编辑MySQL配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf,调整参数适配小内存:max_allowed_packet = 64M # 解决大文件上传时的数据包问题 wait_timeout = 600 interactive_timeout = 600 innodb_buffer_pool_size = 256M # 1GB内存建议设为物理内存的1/4-1/3 key_buffer_size = 64M - 修复WordPress数据库并优化连接:
在wp-config.php中添加:
访问define('WP_ALLOW_REPAIR', true); define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);http://你的域名/wp-admin/maint/repair.php完成数据库修复,之后记得把WP_ALLOW_REPAIR改为false。
5. 处理/etc/securetty的警告
这个警告虽然和MySQL启动无关,但可以解决掉避免干扰:
sudo touch /etc/securetty sudo chmod 600 /etc/securetty sudo chown root:root /etc/securetty
总结
先解决MySQL启动的权限问题(重点排查AppArmor和深层目录权限),再调整MySQL配置适配1GB内存的VPS,最后修复WordPress的数据库连接问题,应该就能彻底解决你的问题了。
内容的提问来源于stack exchange,提问作者user16421
相关产品推荐
相关产品推荐

