1,当 mysql client 发起连接请求时,MySql Server 会主动去查 client 的主机名。 2,首先查找Windows系统目录下 /etc/hosts 文件,搜索域名和IP的对应关系。 3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败;如果设置了DNS服务器,就进行反向解析,直到timeout。 解决办法 第一种方法 修改Hosts 在 MySql Server 所在服务器上,修改 Windows 的 hosts 文件,增加一行记录,如: 100.ZZZ.YYY.XXX dummy.ju690.cn 然后在 100.ZZZ.YYY.XXX 机器上用 Python 发起连接请求,经测试,可以正常连接,说明 MySql Server 这下可以通过 getnameinfo() 解析出100.ZZZ.YYY.XXX 的主机名了。 但这种方法很机械,所以一般采用下面这种方法。 第二种 修改MySql 的配置文件 my.ini The solution: Just add skip-name-resolve option to your MySQL configuration file (my.ini). 在 MySql Server 的配置文件 My.ini 中,增加如下两行: [mysqld] skip-name-resolve 它将禁止 MySql Server 对外部连接进行 DNS 解析,使用这一选项可以消除 MySql 进行 DNS 解析的时间。 但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求。 可能的后果 如果开启 skip-name-resolve 选项,要确认 MySql 是否采用过主机名的授权, 在 mysql 中运行如下命令: mysql> select user,host from mysql.user where host <> 'localhost' ; 一般会得到以“%”授权(也就是任何地址)的记录: +------------------+-------------+ | user | host | +------------------+-------------+ | root | % | | user_sync | 192.168.0.113 | 如果有host名是什么“DB1”“DB2”的,那么删除授权表中有 hostanme 的记录,然后重启mysqld。 (责任编辑:IT) |