CentOS:无法远程连接到 mysql 服务器,但我可以“nc”到它

CentOS:无法远程连接到 mysql 服务器,但我可以“nc”到它

我有两台虚拟机,都运行 CentOS。

一个是 Web 服务器:10.2.2.59——我在此服务器中放置了 Moodle Web 应用程序文件。

一个是DB服务器:10.2.2.58 我安装了MySQL并且运行良好,改为my.conf注释#skipping-network并注释 #bind-address

我已将防火墙配置为接受端口 3306

-A INPUT -s 10.3.2.59 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

在(.59)上我尝试了nc -z 10.2.2.58 3306 ,输出是

Connection to 10.2.2.58 3306 port [tcp/mysql] succeeded!

我还尝试使用以下方法从 (.59) 远程连接到 mysql (.58)mysql -u moodle_XXXX_ur -p -h 10.2.2.58

并且它确实连接了,并且mysql>显示提示。

我授予“moodle_XXXX_ur”对 moodle_XXX_DB 的所有权限


主要问题是当我尝试使用这些参数在 (.59) 中安装 moodle 时

Database host : 10.2.2.58
Database name : moodle_XXX_DB
Database user : moodle_XXXX_ur
Database password: XXXXXXXXXXXXX
Tables prefix: mdl_
Unix socket: true

false我也尝试设置 Unix 套接字。

显示错误,内容如下:

Error: Database connection failed

It is possible that the database is overloaded or otherwise not running properly.

The site administrator should also check that the database details have been correctly specified in config.php

Warning: mysqli::mysqli(): (HY000/2002): Permission denied in /var/www/html/lib/dml/mysqli_native_moodle_database.php on line 76

第 76 行如下所示:

$conn = new mysqli($dbhost, $dbuser, $dbpass, '', $dbport, $dbsocket); // Connect without db

有任何帮助吗,或者有什么方法可以追踪问题???

答案1

就像声明的那样这里这可能是由于 selinux 策略。尝试在两台服务器上关闭 selinux。在 CentOs 上启用或禁用 SELinux

答案2

这似乎是 “SELinux 布尔值” 使用以下命令显示布尔值的状态

$getsebool -a | grep httpd_can_network

并且“httpd_can_network_connect_db”应该打开

httpd_can_network_connect_db --> on

否则你必须打开这个命令

$setsebool -P httpd_can_network_connect_db 1

答案3

您似乎说您已在 MySQL 中启用了“skip-networking”选项。如果是这样,服务器将不会监听网络。换句话说,如果您启用了“skip-networking”,您将只能通过本地 UNIX 套接字与此服务器通信,而不能通过网络与另一台服务器通信。

要修复此问题,请删除“skip-networking”配置行并重新启动 MySQL,然后您就应该能够连接。

有关“skip-networking”选项的更多详细信息,请参阅 MySQL 文档 -MySQL 5.5 服务器选项 - skip-networking

如果您没有启用“skip-networking”选项,您需要仔细检查您提供给 Moodle 安装程序的数据库参数,特别是确保“UNIX socket”设置为 false。

答案4

我确实在数据库服务器上关闭了 selinux。

解决方案是关闭 selinux两个都服务器。

非常感谢 Kewa @kewa

相关内容