这是我第一次使用 PuTTY + 专用 Linux 服务器。
我已经在我的专用 Linux 服务器 上安装了 MySQL 服务器客户端:
apt-get install mysql-server
安装后,我必须设置 MySQL 服务器密码,这就是我所做的。 然后我创建了一个数据库和一个表,我在其中插入了一行。
CREATE DATABASE frag_huans;
use frag_huans;
CREATE TABLE hero_data (
-> ID int(2),....);
INSERT INTO hero_data VALUES ('1',...);
这实际上是到目前为止我对 PuTTY 所做的一切。
我现在试图实现的是通过我的 C# 类(在 Unity3D 中)连接到数据库。
我已经用我的本地主机 (xampp) 服务器完成了此操作,并且运行良好。
string constr = "Server=localhost;Database=letzter;User ID=root;Password=;Pooling=true";
现在我想以同样的方式连接到 Linux MySQL 数据库:
string constr = "Server=myServerIP;Database=frag_huans;Uid=root@serverIP;Pwd=myPassword";
其中“myServerIP”绝对是我的服务器 IP,Uid 是在命令行开始时在 PuTTY 中显示的 ID。
无法建立连接,Unity调试器提示:
MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts. ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it.
at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP, Boolean requireSocketPolicy) [0x00000] in <filename unknown>:0
at System.Net.Sockets.Socket+Worker.Connect () [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at MySql.Data.MySqlClient.NativeDriver.Open () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.Driver.Open () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.Driver.Create (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection () [0x00000] in <filename unknown>:0
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver () [0x00000] in <filename unknown>:0
UnityEngine.Debug:Log(Object)
HeroDB:Awake() (at Assets/Preload/HeroDB.cs:51)
在“Server=...”处使用另一个值告诉我找不到主机,这确保我我的主机地址似乎是正确的。
我还尝试为 MySQL 服务器创建另一个“用户” + 授予这个所有权限:
CREATE USER fh@myServerIP IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES on frag_huans.* to fh@myServerIP;
FLUSH PRIVILEGES;
将连接字符串更改为上面显示的用户并没有改变结果。
我认为 Linux 服务器/MySQL 数据库阻止了我的访问。是否有任何我必须为连接设置权限?导致此问题的可能原因是什么?我见过很多人遇到“无法建立连接,因为目标机器主动拒绝”的问题,但似乎有太多不同的情况。
如果你能以任何方式帮助我,我会很高兴
提前致谢,Cshaprest
最佳答案
- 从客户端计算机尝试以下命令
# telnet <serverip> 3306
- 如果第一点失败,检查是否有防火墙规则接受端口 3306 上的所有传入 mysql 连接。
- 服务器接受来自所有 ip 的连接,如果 mysql id 绑定(bind)到 0.0.0.0 检查它在/etc/my.cnf
这只是为了确认,我假设您在下面的用户创建命令中添加了客户端 IP[不是服务器 IP]。
GRANT ALL PRIVILEGES on frag_huans.* to fh@myclientServerIP; FLUSH PRIVILEGES;
关于连接到 MySQL Linux 数据库的 C# 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262344/