通过套接字的mysql连接失败
作者:互联网
情况是,我们有带有Linux的AWS EC2介质实例.
它也有Drupal.除此之外,我们还有一些文件可以访问mysql,其设置与Drupal相同.
问题是-某一时刻mysql拒绝连接.
当负载低或负载大(与此无关)时,就会发生这种情况,一旦无法访问,mysqld进程仍在运行,并且不会崩溃.
重新启动此过程不能解决问题.重新启动实例-解决问题.
当我连接到本地主机时,它给出了这个:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
当mysql.sock文件在适当的位置并具有正确的权限.
重新启动mysqld没有帮助,但是重新启动实例-解决了问题.
my.cnf看起来像这样:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
wait_timeout=28800
interactive_timeout = 28800
max_allowed_packet=32M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
mysqld运行也没有任何错误,并且在日志中我们有以下内容:
120830 9:48:00 [Note] /usr/libexec/mysqld: Shutdown complete
120830 09:48:00 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120830 09:48:01 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120830 9:48:01 [Note] Plugin 'FEDERATED' is disabled.
120830 9:48:01 InnoDB: The InnoDB memory heap is disabled
120830 9:48:01 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120830 9:48:01 InnoDB: Compressed tables use zlib 1.2.3
120830 9:48:01 InnoDB: Using Linux native AIO
120830 9:48:01 InnoDB: Initializing buffer pool, size = 128.0M
120830 9:48:01 InnoDB: Completed initialization of buffer pool
120830 9:48:02 InnoDB: highest supported file format is Barracuda.
120830 9:48:02 InnoDB: Waiting for the background threads to start
120830 9:48:03 InnoDB: 1.1.8 started; log sequence number 4191070086
120830 9:48:03 [Note] Event Scheduler: Loaded 0 events
120830 9:48:03 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.20' socket: '/var/lib/mysql/mysql.sock -u root' port: 3306 MySQL Community Server (GPL)
再次发生问题时,我再次获取日志,尝试先停止httpd然后mysqld,然后运行mysqld然后再运行httpd,并且日志与正常情况下的日志完全相同,并且重启顺序相同.
更改php.ini并没有保存情况:
mysql.allow_persistent = Off
按此顺序重新启动无济于事(甚至尝试了其他顺序):
service httpd stop
service mysqld stop
service mysqld start
service httpd start
我们想找出问题所在以及如何防止它那样跌落.
解决方法:
仅从提到的症状来看,可能会继续发生以下情况.希望对您有所帮助.
您的PHP可能使用持久性数据库连接,而这些连接可能无法正确关闭.一旦达到特定限制,数据库将不再接受新连接(来自UNIX套接字或网络).
在php.ini中,有一些与数据库持久连接有关的设置,例如:
mysql.allow_persistent = Off
mysqld重新启动不起作用的事实可能与两件事有关:
>重新启动可能与显式服务mysqld stop和紧随其后的服务mysqld start不同;另外,您可以在重新启动时检查日志,以查看是否遇到异常情况.
>重新启动顺序可以稍作更改,以包含您的PHP设置,因此您将首先停止apache,然后停止mysqld;之后,以相反的顺序启动它们.
标签:amazon-ec2,drupal,mysql,php 来源: https://codeday.me/bug/20191127/2076325.html