一、环境及问题描述

1. 环境

操作系统:win10家庭版,64bit

python版本:Python 2.7.15

mysql版本:mysql 5.4.3

2. 问题描述

最近跟公司申请电脑,预装win10家庭版,懒得刷回win7,于是将开发环境迁移过来。但是在python上用MySQLdb去连接mysql的时候就直接报错了:“2003 ,Can't connect to MySQL server on 'localhost' (10061)”。

二、问题解决

1. mysqld开启

一般像这个问题,搜到最多的其实就是叫检查mysql后台服务有没有开启,可是我这边的mysqld不仅正在运行,而且还能用Navicat连接上去,故可以排除。

2. my.ini文件

然后就是修改my.ini文件的方法,一般是修改bind-address = 127.0.0.1或0.0.0.0,但是修改还是不起作用。

3. hosts文件

就是在hosts文件里增加一个映射,127.0.0.1 localhost。修改后,重启电脑,同样没有反应。

但是这个修改是很关键的,后面会说到。

4. 从localhost到127.0.0.1

后面搜到一个匹配度很高的问题,也是用Navicat可以连接 (主机名也是localhost),但是用python的时候就不行了,这个时候有点觉得是localhost在不同的软件中的解析问题。

问了一下盆友,盆友说没用过mysql,但是用过Oracle(爱立信也是土豪公司),意思是Oracle需要配置自己的解析文件,不是系统的hosts文件,叫我可以看看库函数底层源码云云。

于是我顺手在win10的powershell里 敲下:ping localhost,这个时候收到的竟然不是127.0.0.1的回复,而是::1,所以::1是什么鬼?

5. win10 如何解析localhost

实际上,win10解析localhost的时候, 会把 localhost 解析为 ipv6 地址 ::1 而不是 127.0.0.1!所以解决办法就是改回解析为127.0.0.1:

  • 打开注册表,找到键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • 添加类型为DWORD 名字为 DisabledComponents 的项(已经有了的不用添加直接改值)
  • 然后修改值为 20,值类型为16进制
  • 保存注册表,重启电脑。

重新连接mysql,终于解决问题!

所以问题的关键就是系统怎么解析localhost,但是再深入一步,到底在mysql中,以localhost和127.0.0.1两种方式连接的时候,区别到底在哪里呢?

三、mysql的主机为localhost和127.0.0.1的区别

1. 类unix系统

类Unix系统下,如果不使用-h指定主机名或者使用了localhost,那么会使用unix domain socket与mysql服务器通信;如果host指定为'127.0.0.1',则使用TCP/IP协议进行通信。

2. windows系统

如果mysql在win上跑,如果系统开启了--enable-named-pipe,然后访问服务器的时候没有指定hostname,那么mysql客户端会以pipe为优先连接,如果连接失败,那么再会去尝试使用TCP/IP去连接。你可以指定hostname为.在win下强制使用pipes。

如果host指定为'127.0.0.1',依然是使用TCP/IP协议进行通信。

3. 一点猜测

如上所述,在windows环境下,实际上在底层是无法用localhost的方式去连接mysql的,据说从win10开始会逐渐支持unix domain socket,但是现在用的mysql还是无法用这种方式去连接。

但是如Navicat的软件或者用python的库函数,怎么又能用localhost的方式去连接呢?

我猜测想Navicat这种软件,底层应该会将localhost解析为127.0.0.1,接着才去建立连接。至于python的MySQLdb,则会调用系统的函数去解释,由于win10将localhost解释为ipv6的地址,因此才会出问题。

四、参考

1. WIN10 LOCALHOST 解析为 IPV6地址 ::1 的解决办法

2. mysql中localhost和127.0.0.1的区别

3. Windows 10 17063 开始支持 UNIX Domain Socket

(完)

win10,python连接mysql报”Can't connect to MySQL server on 'localhost' (10061)”的更多相关文章

  1. MySql突然连接不上,报Can't connect to MySQL server on 'localhost' (10061),并且没有mysqld时解决方案

    今天连接数据库时突然连接不上,前一天还是好好的.打开数据库就报 Can't connect to MySQL server on 'localhost' (10061) 一直也知道是MySQL服务没有 ...

  2. 连接mysql报错:error 2003 (hy000):can't connect to mysql server on 'localhost' (10061)

    一.mysql 的bin目录下有个MySQLInstanceConfig.exe,运行就可以进行创建数据库实例,创建实例时也可以生成windows 服务,把服务设置成自动启动就可以了 二.安装在D盘的 ...

  3. Navicat for Mysql连接mysql数据库时出现 2003-Can't connect to MySql server on 'localhost'(10061)

    一.环境:linux服务器下 二.问题:在windows7下使用Navicat for Mysql连接mysql数据库时出现 2003-Can't connect to MySql server on ...

  4. SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法

    原文摘自:http://www.jb51.net/article/52581.htm 这篇文章主要介绍了SELinux导致PHP连接MySQL异常Can't connect to MySQL serv ...

  5. ruby使用DBI连接MySQL数据库发生异常:in `error': Can't connect to MySQL server on 'localhost' (10061) (DBI::DatabaseError)

    Ruby使用DBI连接MySQL数据库一般为: require "dbi" dbh = DBI.connect("dbi:Mysql:test:localhost&quo ...

  6. Asp.Net连接Mysql报错Out of sync with server

    Asp.Net连接Mysql报错Out of sync with server 原因:程序引用的MySql.Data.dll版本高于服务器版本 解决:下载一个低版本的MySql.Data.dll,项目 ...

  7. 如何解决远程连接mysql出现Can’t connect to MySQL server on (111 “Connection refused”)的问题

    如何解决远程连接mysql出现Can’t connect to MySQL server on (111 “Connection refused”)的问题 开放Mysql的远程连接 在服务器上登录my ...

  8. 【centOS】【xshell】xshell连接虚拟机上的centOS,操作途中突然断开连接,报错:connect closed by foreign host

    如题  xshell连接虚拟机上的centOS,操作途中突然断开连接,报错:connect closed by foreign host 快捷解决方法: 在虚拟机上centOS重新启动网络,即可解决问 ...

  9. MySQL8.0报错Can't connect to MySQL server on 'localhost' (10061)的解决办法

    MySQL8.0报错Can't connect to MySQL server on 'localhost' (10061)的解决办法 事情的起因     今天课堂上要展示小组项目,需要用一个软件叫W ...

随机推荐

  1. mongodb配置数据库文件夹,创建服务

    配置步骤 1.新建data文件夹,并在data下创建db及log文件夹 2.在mongodb安装目录下新增mongod.cfg文件,配置如下 systemLog:    destination: fi ...

  2. addpath

    这个命令见得很多了,一直懒得理他,自己直接加绝对路径.但是,这个破命令出现太多,我改得都掉脾气,写写. 1.  添加路径:addpath('当前路径中的文件夹名1','当前路径下的文件夹名2','当前 ...

  3. HDU3488Tour (KM算法)

    题意:   有N个点,M个单向边,现在要你设计N条路线覆盖所有的点,每个点都属于且值属于一个环.(为什么是N条边:和最小生成树为什么有N-1条边是一样的证明). 解析:  每个点都有一个喜欢对象(出度 ...

  4. [C#] DataTable转成List集合

    项目开发中,经常会获取到DataTable对象,如何把它转化成一个List对象呢?前几天就碰到这个问题,网上搜索整理了一个万能类,用了泛型和反射的知识.共享如下: public class Model ...

  5. SimpleDateFormat格式化日期以及日期的相关操作

    一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题.   在J ...

  6. celery docker 基本使用

    项目参考官网资料,比较简单的add task 具体代码参考https://github.com/rongfengliang/celery-docker-demo 项目结构 ├── README.md ...

  7. bzoj2257瓶子和燃料

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2257 以两个瓶子为例,可以倒出它们的差,这是它们容量的gcd的倍数. k个瓶子就可以倒出它们 ...

  8. 360全景技术支持中心(KRPanoGUI三维全景制作软件)

    http://www.360pano.cn/ http://www.360pano.cn/88/ http://www.suse.edu.cn/qjmy/hd/index.html

  9. GNU Radio: Synchronization and MIMO Capability with USRP Devices

    Application Note Synchronization and MIMO Capability with USRP Devices Ettus Research Introduction S ...

  10. laravel Hash密码 校对

    laravel加密 是使用hash不可逆的,但是可以对加密后的密码进行校对 $data = $r->all();$id = $data['id'];$user_password = bcrypt ...