博客 / WordPress/ WordPress 数据库权限错误导致功能异常的修复方法

WordPress 数据库权限错误导致功能异常的修复方法

WordPress 数据库权限错误导致功能异常的修复方法

问题背景

在一次服务器安全事件后,我通过 SSH 登录受影响的 VPS,第一时间对 MySQL 数据文件(非 phpMyAdmin 导出)和网站文件进行了压缩备份。随后,我重新配置了 LNMP 环境,上传并解压了网站文件,并直接上传了备份的 MySQL 数据文件。完成这些操作后,我重启了服务器。

问题现象

访问网站后,发现 WordPress 出现了以下异常:

  • 虽然可以使用原有管理员账号登录控制面板,但管理员权限似乎丢失。
  • 在撰写新文章时,右侧的“发布”按钮变成了“提请审核”。
  • 评论(留言)功能无法正常工作。
  • 插件管理功能出现异常。

问题原因

经过排查,问题的根源在于:通过 SFTP 直接上传原网站的 MySQL 数据文件(通常是位于 /usr/local/mysql/var/ 或类似路径下的数据库目录)到新服务器后,这些文件的所有权和用户组权限不正确。新上传的文件默认归属于 root 用户和 root 组,而 MySQL 服务进程(mysqld)通常以 mysql 用户身份运行,导致其无法正常读写这些数据库文件,从而引发了一系列权限错误。

修复步骤

要解决此问题,需要将数据库目录的所有权更正为 MySQL 服务运行的用户(通常是 mysql)。请按照以下步骤操作:

步骤一:修正数据库文件权限

通过 SSH 登录您的服务器,执行以下命令。请将 your_database_name 替换为您 WordPress 实际使用的数据库名称(通常可以在 wp-config.php 文件的 DB_NAME 定义中找到)。

chown -R mysql:mysql /usr/local/mysql/var/your_database_name

命令解释:

  • chown -R:递归地更改文件所有权。
  • mysql:mysql:将所有者改为 mysql 用户,所属组改为 mysql 组。
  • /usr/local/mysql/var/your_database_name:您的 WordPress 数据库文件所在的实际路径。如果您的 MySQL 数据目录不同(例如,/var/lib/mysql/),请相应调整路径。

步骤二:重启 Web 服务

权限更改后,需要重启 LNMP 服务栈(或至少重启 MySQL 服务)以使更改生效。如果您使用的是 LNMP 一键安装包,可以运行:

/root/lnmp restart

或者,更通用的方法是分别重启服务:

systemctl restart mysql  # 或 service mysql restart
systemctl restart nginx   # 或 service nginx restart
systemctl restart php-fpm # 或 service php-fpm restart (如果使用)

验证结果

完成上述步骤后,重新登录 WordPress 后台。此时,管理员权限应已恢复,“发布”按钮功能正常,评论和插件管理功能也应能如常使用。

经验总结与建议

  • 备份最佳实践:在迁移或恢复数据库时,强烈建议使用 mysqldump 命令导出 SQL 文件,而不是直接复制原始数据文件。这可以避免文件权限、存储引擎兼容性等问题。命令示例:mysqldump -u username -p database_name > backup.sql
  • 安全加固:服务器被入侵后,务必彻底检查所有文件是否被植入恶意代码,并修改所有相关密码(数据库密码、WordPress 后台密码、SSH 密码等)。
  • 权限原则:Web 目录文件所有权应设置为 Web 服务器运行用户(如 wwwnginx),而数据库文件所有权应设置为数据库服务运行用户(如 mysql),遵循最小权限原则。
  1. avatar
    肖振杰博客

    现在的人真的无孔不入啊

回复 肖振杰博客 取消回复

您的邮箱不会公开。必填项已用 * 标注。