MySql 连接错误:Cannot get hostname for your address 事件 100
来源:互联网 发布:辐射4女捏脸数据 编辑:程序博客网 时间:2024/05/01 10:42
01.MySql连接错误:Cannot get hostname for your address
郑昀 2010 隶属于《05.数据入库》小节
某Web应用的数据库部署在 100.ZZZ.YYY.XXX 的 MySql 5.5.5 实例(新装机器)上,
但是当用PHP或者Python从远端机器上试图访问该数据库时,会得到如下错误提示:
“Can't get hostname for your address”。
需要琢磨一下才能明白,这句提示是 MySql Server 返回给客户端的。
也就是说,MySql Server在试图对客户端IP地址进行反向域名解析,试图得到主机名,然而我们发起访问的客户端要么是自己
的机器,要么是机房的服务器,所以无法得到主机名,MySql Server 遂报错,拒绝客户端连接。
错误截屏
譬如,Python会得到这样的异常:
事件日志的报告
此时 MySql Server 所在服务器上,Windows 事件日志出现了如下错误:事件类型: 警告
事件来源: MySQL
事件种类: 无
事件 ID: 100
日期: 2010-01-01
事件: 11:29:13
用户: N/A
计算机: SERVERII
描述:
IP address '100.ZZZ.YYY.XXX' could not be resolved: getnameinfo() returned error (code: 11004).For more information, see Help and Support Center at http://www.mysql.com.
简单解释
MySQL server received a request from you to allow you to connect to the database. So next thing it tried to do is to check what name is bound to your IP address (name resolution) and it failed to do so. So it just denied you access.
可以这么理解mysql处理客户端解析的过程:
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将无法正常处理连接请求。
参考:
http://www.ixdba.net/article/89/2127.html
http://blog.chinaunix.net/u/25264/showart_1936561.html
可能的后果
如果开启 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。
http://www.cnblogs.com/zhengyun_ustc/archive/2010/10/13/skip_name_resolve.html
- MySql 连接错误:Cannot get hostname for your address 事件 100
- MySql连接错误:Cannot get hostname for your address
- MySQL连接错误“Cannot get hostname for your address”解决方案
- mysql连接时报1024 cannot get hostname for your address
- MySQL数据库连接错误:Can't get hostname for your address
- [Navicat] 连接Mysql错误 1042 Can't get hostname for your address
- Navicat连接Mysql报1042- Can't get hostname for your address错误的解决办法
- MySql连接错误:Can‘t get hostname for your address解决办法之小白篇
- navicat 连接mysql 报1042错误 can't get hostname for your address
- mysql远程访问出现MySQL错误1042-Can't get hostname for your address解决方法
- Mysql 访问,提示无法连接Can't get hostname for your address Error 1042
- 通过远程连接Mysql数据库,提示“can't get hostname for your address”
- MySQL连接远程数据库报错 1042Can't get hostname for your address
- navicat连接mysql: 报错1042 cant get hostname for your address
- 1042-Can't get hostname for your address , navicat无法连接mysql
- MySQL错误1042-Can't get hostname for your address解决方法
- 解决MySQL:1042错误-Can't get hostname for your address
- MySQL错误1042-Can't get hostname for your address解决方法
- 对象数组和指向对象的指针 指向类成员的指针
- apache整合tomcat实现web服务器解析
- 新的开始
- 在VirtualBox 3.2.10中安装Gentoo
- JVM总结
- MySql 连接错误:Cannot get hostname for your address 事件 100
- 多AJAX调用解决顺序问题
- 20130101新年的第一天
- python client使用 http post 到server端
- 【总结备用】清除应用程序所有缓存
- java.net.SocketException/BindException/ConnectException等异常
- 站得高才能看得远
- APACHE整合TOMCAT的三种方式
- 2012工作流水总结!