无法从 Windows 和 Linux (CentOS7) 连接到我的远程 MySQL 服务器

Posted

技术标签:

【中文标题】无法从 Windows 和 Linux (CentOS7) 连接到我的远程 MySQL 服务器【英文标题】:Can't Connect to my remote MySQL server from both Windows and Linux (CentOS7) 【发布时间】:2016-02-13 10:21:42 【问题描述】:

我无法连接到托管在 CentOS7 服务器上的远程 mysql 服务器。

它在 1 天之前运行良好,它只是停止工作并开始向我抛出这些错误:

从我的窗口框:

Connection Failed: [HY000][MySQL][ODBC 3.51 Driver]Can't connect to MySQL server on '10.103.23.234' (10090)

从我的其他 CentOS 服务器:

ERROR 2003 (HY000): Can't connect to MySQL server on '10.103.23.234' (113)

因此,我查找了有关我遇到的问题的热门搜索结果,并找到了许多建议的解决方案。

我已经将我的服务器的 ip 绑定到 /etc/my.cnf 的 MySQL 配置文件

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=10.103.23.234
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

由于挫折,我确实删除-创建了用户并授予 MySQL 用户的权限

MariaDB [(none)]> SHOW GRANTS FOR 'faultanalytics'@'%';
+---------------------------------------------------------------------------------------------------------------+
| Grants for faultanalytics@%                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'faultanalytics'@'%' IDENTIFIED BY PASSWORD '*82CB5B45DC157D1466E8A2F031A55B06D9C8F9FA' |
| GRANT ALL PRIVILEGES ON `outageTicket`.* TO 'faultanalytics'@'%'                                              |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)


MariaDB [(none)]> SELECT * FROM mysql.db WHERE user='faultanalytics' AND  host='%' AND db='outageTicket'\G;
 *************************** 1. row ***************************
                 Host: %
                   Db: outageTicket
                 User: faultanalytics
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
          Execute_priv: Y
            Event_priv: Y
          Trigger_priv: Y
1 row in set (0.00 sec)

ERROR: No query specified

但我注意到下面这张表有些奇怪,我只能看到用户 'faultanalytics'@'%' 的“USAGE”权限

MariaDB [(none)]> SELECT * from information_schema.user_privileges WHERE GRANTEE='\'faultanalytics\'@\'%\'';
+----------------------+---------------+----------------+--------------+
| GRANTEE              | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+----------------------+---------------+----------------+--------------+
| 'faultanalytics'@'%' | def           | USAGE          | NO           |
+----------------------+---------------+----------------+--------------+

我在想,这就是我无法远程连接到我的 MySQL 服务器的原因吗?

检查了我的端口

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 10.103.23.234:3306      0.0.0.0:*               LISTEN

【问题讨论】:

MySQL 默认使用 3306 端口。那里有什么变化吗(例如路由器配置、防火墙等)?您似乎已经拥有获得连接的适当权限。你检查过 MySQL 的错误日志吗?对您的数据库服务器尝试 nmap 命令并验证 MySQL 端口是否打开。另外,您是唯一有权访问此服务器的个人吗? @janschweizer 不幸的是,我的任何机器上都没有 telnet,但我可以通过 MySQL 服务器进行 ssh。 @JCm:那么,mysql -h <yourserver> -u <username> -p 命令允许您从 Linux shell 进行连接? @janschweizer no 我无法通过 mysql -h -u -p 如上所述建立连接... 【参考方案1】:

您是否验证了防火墙中的端口 3306 已打开? CentOS 会在重新启动时重新加载防火墙规则,因此如果您在防火墙设置中添加了非永久性规则,那么当您重新启动服务器时它会被刷新。

对于快速修复,请参阅此 SO 帖子中公认的优秀答案:centos 7 - open firewall port

如果您想了解有关 FirewallD 的更多信息,可以在此处找到 FirewallD 手册:https://fedoraproject.org/wiki/FirewallD,并在此处找到一个很好的深入教程:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7

【讨论】:

是的,你明白了。我之前可能会停止我的防火墙,但几周前我有一个服务器重新启动,这可能会重新启动我的防火墙并导致我出现问题。我现在必须允许访问我的 mysql。【参考方案2】:

经过进一步研究,我遇到了另一个具有类似经验的 *** 问题

Accessing a mysql database from external host/ip? (ie: mysql workbench)

所以就像 Yoosaf Abdulla 在那个帖子中的回答一样,我尝试停止我的服务器的防火墙和 woalah!我成功连接了。 然后做他的解决方案来解决应该解决问题。

【讨论】:

以上是关于无法从 Windows 和 Linux (CentOS7) 连接到我的远程 MySQL 服务器的主要内容,如果未能解决你的问题,请参考以下文章

0基础开箱即用Linux部署项目(基于Cent OS 7.4)

在Windows系统和Linux服务器安装MongoDB和基本使用

Linux之Cent OS 7 服务管理和防火墙配置

无法从 Windows 和 Linux (CentOS7) 连接到我的远程 MySQL 服务器

如何检查cent os是不是开启ssh

使用XShell远程连接Cent OS7网络配置