MySQL远程连接失败(错误码:2003)

更新于2018年3月12日

一 环境信息

  • 服务器系统:Oracle Linux 7.3
  • 服务器MySQL版本:MySQL 5.7.20
  • 本地系统:win10
  • 本地客户端:Navicat for MySQL 10.1.7
  • 本地开发环境:python(3.6.3),PyMySQL(0.8.0)
  • 假设:登录用户名为admin,密码为adminpwd ,MySQL连接端口3306

二 问题描述

  • 本地客户端及代码连接均失败: 2003, "Can't connect to MySQL server on '192.168.1.166' (10061)"

  • python连接MySQL代码
import pymysql
conn= pymysql.connect(host='192.168.1.166',port = 3306,user='admin',passwd='adminpwd',db ='test',charset='utf8')
# 使用cursor方法获取操作游标
cur = conn.cursor()
# 使用execute 方法执行sql语句
cur.execute("select version()")
# 使用fetchone()方法获取一条数据库
data = cur.fetchone()
print("datebase version : %s"%data)
# 关闭数据库连接
conn.close()
  • python连接MySQL报错
Traceback (most recent call last):
File "D:/JetBrains/test/study_test/mysql_test1.py", line 15, in <module>charset='utf8'
File "D:\JetBrains\pyEnv\python363\lib\site-packages\pymysql\__init__.py", line 90, in Connectreturn Connection(*args, **kwargs)
File "D:\JetBrains\pyEnv\python363\lib\site-packages\pymysql\connections.py", line 699, in __init__self.connect()
File "D:\JetBrains\pyEnv\python363\lib\site-packages\pymysql\connections.py", line 967, in connectraise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '192.168.1.166' (timed out)")         

三 官方文档描述

    "The error (2003) Can't connect to MySQL server on 'server' (10061) indicates that the network connection has been refused. You should check that there is a MySQL server running, that it has network connections enabled, and that the network port you specified is the one configured on the server."金山译文:错误(2003年)无法连接到“server”(10061)上的mysql服务器,表示网络连接已被拒绝。您应该检查是否有一个mysql服务器正在运行,它是否启用了网络连接,并且您指定的网络端口是在服务器上配置的。

四 解决过程

  • (1) Xshell远程登陆服务器,用“ps aux|grep mysql”命令查看,MySQL服务已启动:

  • (2) 用"vim my.cnf"命令查看my.cnf文件(在MySQL安装目录下,我的位置是/usr/local/mysql/my.cnf),修改其对应的值并重启MySQL。对应内容如下:
[mysqld]
bind-address = 0.0.0.0  # 表示允许任何主机登陆MySQL
port=3306               # 表示MySQL运行端口为3306
  • (3)用“mysql -u admin -p”命令,回车后输入密码“adminpsw”能正常登陆服务器MySQL
mysql> show global variables like 'port';  # 查看MySQL运行的实际端口
+---------------+-------
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.01 sec)
  mysql> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select host,user from user;+-----------+---------------+| host      | user          |+-----------+---------------+| %         | admin         || %         | root          || localhost | mysql.session || localhost | mysql.sys     |+-----------+---------------+5 rows in set (0.00 sec)
  # 如果上述查询结果,admin用户对应的host不为%,则修改用户权限# 此处需注意的是,修改权限时要带上密码(IDENTIFIED BY 'adminpwd'),虽然不知道具体原理,但是没加密码之前客户端还是不能远程访问MySQL。   
  mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'adminpwd' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)
  • (4) 至此,我的本地Navicat客户端已经能都正常访问服务器端,但是运行上述python连接MySQL代码还是报一样的错误。

  • (5)查网上资料说可能是防火墙屏蔽了3306端口,本地cmd"ping 192.168.1.166"能够Ping通,再用”telnet 192.168.1.166 3306“命令检查端口是否被屏蔽,结果为"正在连接192.168.1.166...无法打开到主机的连接。 在端口 3306: 连接失败",说明是防火墙的问题
    (如果Win10 telnet不是内部或外部命令,决解方法参考连接:https://jingyan.baidu.com/article/1e5468f9033a71484961b7d7.html)

  • (6) 起初我以为是指我本地防火墙的问题,于是把本地防火墙关了,结果问题并没有解决。
  • (7) 其实应该是远程服务器的防火墙问题。远程登陆服务器(我用root用户登录的),检查防火墙状态
systemctl start firewalld # 开启防火墙
systemctl stop firewalld  # 关闭防火墙
systemctl status firewalld  #检查防火墙状态
  • (8) 关闭远端服务器防火墙后,运行本地运行本地python连接MySQL代码,MySQL连接成功
[root@db sysconfig]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: active (running) since 三 2018-02-28 17:18:10 CST; 7s agoDocs: man:firewalld(1)Main PID: 5452 (firewalld)CGroup: /system.slice/firewalld.service└─5452 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
[root@db sysconfig]# systemctl stop firewalld
[root@db sysconfig]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)
  • (9)如果你觉得关闭防火墙不安全,可打开远端服务器的iptables(安装或升级命令“yum install iptables”)(我用root用户登录的),并用“vi /etc/sysconfig/iptables”检查3306端口是否打开,如没有,在文件中加入“-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT”(如下所示),保存文件并用“service iptables restart”命令重启iptables
# Generated by iptables-save v1.4.21 on Wed Feb 28 12:19:33 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [34:3136]
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT    ## 加上此行
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibite
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Feb 28 12:19:33 2018
~
~
"/etc/sysconfig/iptables" 17L, 654C
  • (10)运行本地python连接MySQL代码,结果如下:
datebase version : 5.7.20-enterprise-commercial-advanced

转载于:https://www.cnblogs.com/YunnuoFan/p/8482449.html

MySQL远程连接失败(错误码:2003)相关推荐

  1. mysql 远程 2003错误_MySQL远程连接失败(错误码:2003)

    注:本文来源于< MySQL远程连接失败(错误码:2003)> (1) Xshell远程登陆服务器,用"ps aux|grep mysql"命令查看,MySQL服务已启 ...

  2. 记一次云服务器配置mysql 远程连接失败的解决方案

    云服务器系统版本为ubuntu,笔者跟着网上的教程 ->我是教程 高兴地配了半天mysql,本地运行没问题,在设置远程连接访问权限的时候没有注意到mysql8和mysql5版本之间的指令区别,权 ...

  3. MYSQL远程连接失败:ERROR 1130: mysql 1130连接错误的有效解決方法

    今天在用sqlyog连接非本地的Mysql服务器的数据库,居然无法连接很奇怪,报1130错误, ERROR 1130: Host 192.168.3.100 is not allowed to con ...

  4. 阿里云MySQL远程连接失败

    在阿里云服务器上自己装了一个MySQL,但是刚刚开始并不能正常连接,其实无非就两种情况 a.服务器端口拦截 b.MySQL服务拒绝了请求 解决办法: 针对服务器,将端口开放链接,针对MySQL,取消M ...

  5. MySQL远程连接失败,MySQL远程连接出现Using password:YES错误的解决办法

    相信很多实用MYSQL的朋友都遇到过这种问题,就是MySQL使用localhost能够连接成功,但是使用IP连接却出现Using password:YES或者其它的连接错误.今天就把解决方法给大家说一 ...

  6. centos mysql拒绝连接失败_CentOS下mysql远程连接的失败的解决方法

    mysql远程连接失败的解决方法(CentOS版) (1)先将mysql服务停掉 # /etc/init.d/mysqld stop (2)查看mysql配置文件 # vi /etc/my.cnf 特 ...

  7. Mysql 远程连接的问题 2003 - Can't connect to MySQL server on '39.106.187.107' (60 Operation timed out)...

    一.在上一篇文章中,使用ECS和mysql搭建mysql服务器搭建好了mysql服务器,现在需要远程连接 报错 2003 - Can't connect to MySQL server on '39. ...

  8. 终端连接mysql是出现error 2003_MySQL远程连接出现:ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'的问题...

    MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'的问题 问题描述: 从一台linux远程连接另一台linux上的M ...

  9. Mysql 远程连接的问题 2003 - Can't connect to MySQL server on '39.106.187.107' (60 Operation timed out)

    一.在上一篇文章中,使用ECS和mysql搭建mysql服务器搭建好了mysql服务器,现在需要远程连接 报错 2003 - Can't connect to MySQL server on '39. ...

  10. MySQL : 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost...

    MySQL : 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost 摘自: ...

最新文章

  1. 【面试题】hashCode() 和 equals() 之间的关系
  2. Ubuntu下eclipse indigo版在线安装hibernate插件
  3. 从实际案例聊聊Java应用的GC优化--转
  4. php导出excel表格需要隐藏行,php - 隐藏或删除列时PHPExcel导出图像问题 - 堆栈内存溢出...
  5. python3-pandas 数据结构 Series、DataFrame 基础
  6. ncverilog脚本_NC-Verilog仿真详解
  7. C++Function Object Adapter之not1
  8. 什么是 CD 管道?一文告诉你如何借助 Kubernetes、Ansible 和 Jenkins 创建 CD 管道!...
  9. 【风马一族_php】NO2_php基础知识
  10. 软件开发中的EJB是什么?
  11. 阿铭Linux_网站维护学习笔记20190412
  12. [Mac]制作MacOs Mojave系统盘教程 (全新安装 MacOs系统)
  13. Matlab中不定积分和定积分的实现
  14. UE4 键盘控制开关灯
  15. 悉尼大学USYD2022S2// INFO1110// Week2 lecture2a: Variables and Data types
  16. 基于74LS148的简单四路抢答器 Multisim
  17. 软件人眼中的APP的产品定位
  18. 亲测!这款耳机堪比AirPods,还不到200块!
  19. 程序物语(七):项目经理预成长
  20. 1875.贝茜的报复

热门文章

  1. P3369 【模板】普通平衡树
  2. 量化策略“高股息率模型”长期有效性的实证
  3. 爱乐活改版未断根,改版后不伦不类
  4. 色彩缤纷的python(改变字体颜色及样式)不是我写的
  5. python自然语言学习之处理原始文本中3.1访问2554文本《罪与罚》出现问题解决
  6. 浅论三维标注技术的重要性
  7. java调用百度云api_百度云—使用机器人视觉SDK调用百度API方法教程
  8. C++:实现量化基础互换利率basis swap rate helpers测试实例
  9. 解决用友固定资产出现的“不能月末结账,可能月末未结账”的处理办法
  10. android密码设成星号,如何将密码字段更改为星号而不是点