数据库
首页 > 数据库> > 通过套接字的mysql连接失败

通过套接字的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