我有一台运行 WordPress 的 Linux 服务器 (Centos 7) 和另一台运行 MySQL 的 Linux 服务器 (Ubuntu)。WordPress 和数据库之间的通信正常。然而,在 Web 服务器重新启动后,我在浏览器中看到以下消息:
通过以下方式确定 Apache 没有运行:ps -ef | grep http
我通过以下方式手动启动了 Apache:服务 httpd 启动
**** 我确实希望 Apache 在服务器重启后自动启动 ****
现在Apache在浏览器中返回以下消息:建立数据库连接时出错
尝试通过以下方式测试连接后:mysql
Linux 返回错误:错误 2002 (HY000):无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)
目录“/var/lib/mysql/”是空的。我在网上看到,当 MySQL 服务运行时,它会创建套接字。退出时,套接字文件会被删除。不确定这是否属实。
因此这似乎是一个 MySQL 套接字问题。
希望得到大家的帮助...
答案1
如果您使用的是 Centos/Red Hat/Fedora/Suse,并且有些东西似乎可以以 root 或其他登录用户身份运行,但不能从 Web 服务器之类的应用程序运行,那么请检查您的实例是否启用了 selinux sestatus
。
sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current Mode: enforcing
如果处于模式执行然后您可以检查审计日志以查看是否存在问题。例如,查看程序中运行的某些错误httpd
:
ausearch -c "httpd" -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -i
和/或使用:
sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt
对于一些常见问题存在布尔值调整默认策略的工作方式。完整列表使用getsebool -a
对于 httpd 服务器,您可以选择通过网络访问某些常用数据库端口,httpd_can_network_connect_db
以及更通用的全网络访问httpd_can_network_connect
。如果您使用 php 作为 httpd 中的模块,并且它必须通过网络连接访问数据库,则适用此方法。
如果您不想更改它们,请使用setsebool -P <boolean_name_> {0|1|on|off}
。如果没有 ,则-P
设置将在重启时恢复。
如果您确实想了解 selinux,这是一个很好的起点:https://wiki.centos.org/HowTos/SELinux