无法与远程用户连接到MySQL(托管在Ubuntu VPS上)

时间:2018-03-02 19:17:40

标签: mysql ssh remote-access ubuntu-server navicat

我正在尝试为我的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,我就会收到此错误:

Error message in Navicat

即使我尝试通过SSH连接到SQL服务器,我仍然会收到错误:

Error in MySQL Workbench using SSH

顺便提一下我的连接设置:

Navi get connection settings

enter image description here

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

也许防火墙设置不允许访问端口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选项:

答案 1 :(得分:1)

您可能遇到远程权限问题。如果是这种情况,请在命令行上打开MySQL并在以下位置输入:

GRANT ALL PRIVILEGES
ON my_database_name.*
TO 'user'@'%'
IDENTIFIED BY 'new_remote_password';
FLUSH PRIVILEGES;

'%'是一个通配符,因此TO行表示用户名'用户'任何IP地址都可以访问。但他们需要密码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。

如果这些不起作用,则可能是防火墙或端口问题,如另一个答案所示。