无法与远程用户连接到 MySQL(托管在 Ubuntu VPS 上)
Can't connect with remote user to MySQL (hosted on Ubuntu VPS)
我正在尝试为我的 MySQL 数据库设置一个远程用户,以便我可以从任何 IP 访问它。
MySQL 服务器托管在 Ubuntu VPS 服务器上。
我已经创建了一个远程用户,您可以在此处看到:
login as: root
root@xx.xx.xx's password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-108-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
82 packages can be updated.
42 updates are security updates.
Last login: Fri Mar 2 19:47:15 2018 from xxxxxxx
root@vpsxxxxxx:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW variables WHERE Variable_name = 'hostname' OR Variable_name = 'port';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| hostname | vps520749 |
| port | 3306 |
+---------------+-----------+
2 rows in set (0.01 sec)
mysql> SELECT Host,User from mysql.user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| % | user |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql>
但是一旦我尝试通过 Navicat 或 MySQL Workbench 以用户 user
登录,我得到这个错误:
即使我尝试通过 SSH 连接到 SQL 服务器,我仍然收到错误消息:
顺便说一下我的连接设置:
我在这里错过了什么?
也许防火墙设置不允许访问端口 3306?
您可以在命令提示符下通过使用 netcat (nc) 等实用程序连接到端口来检查这是网络问题还是应用程序问题。
例如,从机器 运行 Navicat/MySQLWorkbench,连接到地址为 192.168.0.100 的数据库服务器:
user@server1:~> nc -zvn 192.168.0.100 3306
nc: connect to 192.168.0.100 port 3306 (tcp) failed: Connection refused
user@server1:~>
-----
user@server1:~> nc -zvn 192.168.0.100 3306
Connection to 192.168.0.100 3306 port [tcp/*] succeeded!
user@server1:~>
要通过服务器的主机名连接,省略 -n 选项:
您的远程权限可能存在问题。如果是这种情况,请在命令行中打开 MySQL 并输入:
GRANT ALL PRIVILEGES
ON my_database_name.*
TO 'user'@'%'
IDENTIFIED BY 'new_remote_password';
FLUSH PRIVILEGES;
'%' 是通配符,因此 TO
行表示具有任何 IP 地址的用户名 'user' 都可以访问。但他们需要密码 new_remote_password
。如您所见,ON
行限制了对一个数据库的访问,my_database_name.
这样做存在一些明显的安全风险,因此请确保您知道自己在这方面所做的事情。
以下是一些其他可能的修复方法:
在配置文件中更改一两行。通常,配置文件位于 Ubuntu 上的 /etc/mysql/my.cnf
或 /etc/mysql/mysql.conf.d/mysqld.cnf
。删除或注释掉
的行
bind-address = 127.0.0.1
和
skip-networking
然后您也需要在命令行上使用 sudo service mysql restart
重新启动 MySQL。
如果这些不起作用,可能是防火墙或端口问题,如另一个答案中所建议的。
我正在尝试为我的 MySQL 数据库设置一个远程用户,以便我可以从任何 IP 访问它。 MySQL 服务器托管在 Ubuntu VPS 服务器上。
我已经创建了一个远程用户,您可以在此处看到:
login as: root
root@xx.xx.xx's password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-108-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
82 packages can be updated.
42 updates are security updates.
Last login: Fri Mar 2 19:47:15 2018 from xxxxxxx
root@vpsxxxxxx:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW variables WHERE Variable_name = 'hostname' OR Variable_name = 'port';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| hostname | vps520749 |
| port | 3306 |
+---------------+-----------+
2 rows in set (0.01 sec)
mysql> SELECT Host,User from mysql.user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| % | user |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql>
但是一旦我尝试通过 Navicat 或 MySQL Workbench 以用户 user
登录,我得到这个错误:
即使我尝试通过 SSH 连接到 SQL 服务器,我仍然收到错误消息:
顺便说一下我的连接设置:
我在这里错过了什么?
也许防火墙设置不允许访问端口 3306? 您可以在命令提示符下通过使用 netcat (nc) 等实用程序连接到端口来检查这是网络问题还是应用程序问题。
例如,从机器 运行 Navicat/MySQLWorkbench,连接到地址为 192.168.0.100 的数据库服务器:
user@server1:~> nc -zvn 192.168.0.100 3306
nc: connect to 192.168.0.100 port 3306 (tcp) failed: Connection refused
user@server1:~>
-----
user@server1:~> nc -zvn 192.168.0.100 3306
Connection to 192.168.0.100 3306 port [tcp/*] succeeded!
user@server1:~>
要通过服务器的主机名连接,省略 -n 选项:
您的远程权限可能存在问题。如果是这种情况,请在命令行中打开 MySQL 并输入:
GRANT ALL PRIVILEGES
ON my_database_name.*
TO 'user'@'%'
IDENTIFIED BY 'new_remote_password';
FLUSH PRIVILEGES;
'%' 是通配符,因此 TO
行表示具有任何 IP 地址的用户名 'user' 都可以访问。但他们需要密码 new_remote_password
。如您所见,ON
行限制了对一个数据库的访问,my_database_name.
这样做存在一些明显的安全风险,因此请确保您知道自己在这方面所做的事情。
以下是一些其他可能的修复方法:
在配置文件中更改一两行。通常,配置文件位于 Ubuntu 上的 /etc/mysql/my.cnf
或 /etc/mysql/mysql.conf.d/mysqld.cnf
。删除或注释掉
bind-address = 127.0.0.1
和
skip-networking
然后您也需要在命令行上使用 sudo service mysql restart
重新启动 MySQL。
如果这些不起作用,可能是防火墙或端口问题,如另一个答案中所建议的。