我正在build立到MySQL服务器的远程连接,但无论我尝试从远程服务器访问被拒绝错误。
我通过添加用户:
CREATE USER 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY '***';
然后我给了权限:
GRANT ALL PRIVILEGES ON databasename.* to username@REMOTE_IP_ADDRESS;
我在MySQL服务器上的用户表显示(除其他外):
+---------------+--------------------+ | user | host | +---------------+--------------------+ | username | REMOTE_IP_ADDRESS | +---------------+--------------------+
如果我向用户显示赠款,我会得到:
+------------------------------------------------------------------------------------+ | Grants for username@REMOTE_IP_ADDRESS +------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY PASSWORD '***' | GRANT ALL PRIVILEGES ON `databasename`.* TO 'username'@'REMOTE_IP_ADDRESS' +------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
然后在远程服务器上使用:
mysql -u username -p DB_SERVER_IP
并得到错误信息:
ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)
我已经做了“冲洗特权”,但我仍然无法连接 – 我注意到,错误是用户名@本地主机,我没有任何权限设置为用户名@本地主机,但我从来没有这样做过。 我有一些其他的远程帐户在同一台服务器上,他们都没有@本地主机,因为他们只在本地连接。
我错过了什么? 我忘了做什么,或者我可以检查什么?
该错误消息表明您根本不连接到远程MySQL,而是连接到本地主机。 确保使用选项-h连接到远程服务器。
mysql -u username -h DB_SERVER_IP
为了简单,让我们这样说:
计算机A =持有MySQL DB。 IPv4 = 192.168.11.1
计算机B =有一个Eclipse程序,想连接到计算机A,并为模式做东西。 Ipv4 = 192.168.22.2
在计算机上执行以下操作A:
它看起来像你试图通过'username'@192.168.22.2'的名字来创build一个新用户,但是一个不同的用户通过'username'@'localhost'这个名字正在阻止/优先。
做这个命令看用户:
SELECT user,host FROM mysql.user;
你应该看到两个条目:
1)user = username,host = localhost
2)用户=用户名,主机= 192.168.22.2
所以这些命令:
DROP User 'username'@'localhost'; DROP User 'username'@'192.168.22.2';
请注意,如果您看到“用户名”@“%”的用户,也可以删除/删除该行。
重新启动MySQL工作台
然后再次执行您的原始命令:
CREATE USER 'username'@'192.168.22.2' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'192.168.22.2';
我不明白你为什么使用“***”作为你的密码,所以我用“密码”代替了它。
然后去计算机B并打开你的命令提示符/terminal。 键入以下内容,并将其连接到计算机A.如果无法连接,请检查计算机A的防火墙的入站规则,并检查计算机A上是否正在运行MySQL服务。
mysql --host=192.168.11.1 --user=username --password=password
(确保你有mysql设置作为一个环境variables,否则命令提示符将不理解“mysql”命令)
有用的故障排除方法:closures计算机A上的所有防火墙规则。从计算机B的命令提示符/terminal执行“ping 192.168.11.1”或“telnet 192.168.11.1 3306”。
您需要单独添加本地主机用户。 你可以用一个命令(而不是两个)来完成。
GRANT ALL on database.* to 'user'@'localhost' identified by 'paswword';
如果你想添加用户,使其可以从任何地方连接(不太安全),使用这个:
GRANT ALL on database.* to 'user'@'%' identified by 'password';
小费:
注释掉pid和套接字文件,如果你不能连接到服务器.. mysql可能与不正确的pid和/或套接字文件连接,所以当你尝试通过命令行连接到服务器时,它会“看起来”不正确的pid /套接字文件…
###注释掉pid和套接字文件,如果无法连接到服务器..
#PID文件=在/ var /运行/ MySQL的/ mysqld.pid #sockets=的/ var / lib中/ MySQL的/的mysql.sock