我们有一个应用程序已经运行了大约两年,没有任何问题。
今天早上我进入该网站时出现一个错误:
Session: connection failed
我检查了数据库连接、检查了用户、检查了用户的授权,一切看起来都很好。
我使用 .inc.xml 文件中的连接信息创建了一个测试页面
收到 mysql 连接错误。
这是原始文件:
<TYPE>mysql</TYPE>
<HOST>dbl</HOST>
<USER>dbuser</USER>
<PASSWORD key="PUT A KEY HERE TO DECRYPT THE PASSWORD">password</PASSWORD>
服务器的主机名不是 dbl
我把第二行改成这样:
<TYPE>mysql</TYPE>
<HOST>localhost</HOST>
<USER>dbuser</USER>
<PASSWORD key="PUT A KEY HERE TO DECRYPT THE PASSWORD">password</PASSWORD>
连接良好。
对原始 .inc.xml 文件进行了相同的更改,应用程序便恢复正常运行。
我的问题:
我检查了审计日志、连接和查询,该系统大约有 3 周无法访问了。
.inc.xml 最后一次修改是在一年多以前。
为什么应用程序会突然停止将 dbl 作为主机?
这个 dbl 主机名是从哪里来的?
系统布局:
[root@acpr-web-x ~]# cat /proc/version
Linux version 2.6.32-358.2.1.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Wed Feb 20 12:17:37 EST 2013
[root@acpr-web-x ~]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 15 2014 03:02:07
[root@acpr-web-x ~]# php -v
PHP 5.3.3 (cli) (built: Oct 23 2014 06:58:46)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Mysql Server version: 5.1.73-log Source distribution
答案1
我的第一个猜测是 /etc/hosts 可以覆盖 DNS(如果主机存在 DNS),并且在 DNS 缺失时几乎完全替代正向 DNS。无论出于什么原因,这个主机 (dbl) 都在 /etc/hosts 中,然后又不在了。
其次,假设 /etc/resolv.conf 丢失了本地域的搜索选项,因此 dbl.foo.com 可以解析但 dbl 不能……这也是一种可能性。