【问题标题】:Can't connect with remote user to MySQL (hosted on Ubuntu VPS)无法与远程用户连接到 MySQL(托管在 Ubuntu VPS 上)
【发布时间】:2018-08-11 01:40:41
【问题描述】:

我正在尝试为我的 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 服务器,我仍然会收到错误:

顺便说一下,我的连接设置:

我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    您可能在使用远程权限时遇到问题。如果是这种情况,请在命令行中打开 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> GRANT ALL PRIVILEGES ON *.* TO '%'@'%' IDENTIFIED BY 'PASS'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> 我跑了这个,但它仍然给我同样的错误
    • 你在连接时使用了密码吗?另外,我编辑了我的答案...如果您使用 '%' 作为用户名,它会不必要地不安全。
    • 您是否刷新了权限并重置了 MySQL?首先在 MySQL 中运行FLUSH PRIVILEGES;,然后在命令行中运行sudo service mysql restart。另一种可能会有所帮助的可能性是更改配置文件中的一行...
    • 配置文件通常位于/etc/mysql/my.cnf。删除或注释掉 bind-address = 127.0.0.1skip-networking 的行。然后你也需要重新启动 MySQL。
    【解决方案2】:

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

    【讨论】:

    • root@vps520749:~# nc -zvn 127.0.0.1 3306 Connection to 127.0.0.1 3306 port [tcp/*] succeeded! root@vps520749:~#连接成功
    • 看来您是在运行数据库的同一台机器上运行navicat 和mysql 工作台?您运行“nc”命令的同一台机器?
    • 上面的第一条错误消息暗示客户端不知道您的主机名的 IP 地址。您可以使用主机名运行“nc”命令吗(不要使用 n 选项):nc -zv vps520749 3396
    • 我正在另一个网络上的另一台机器上运行 Navicat 和 MySQL Workbench,而不是服务器所在的位置
    • 然后你应该从navicat机器运行第一个nc命令。您需要确保可以通过网络建立网络连接。此外,您需要确保 navicate 机器知道数据库服务器的 IP 地址。将主机名和 ip 地址放入 navicat 机器上的 /etc/hosts 中。例如:192.168.0.100 vps520740
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多