php - 通过套接字的mysql连接失败

标签 php drupal amazon-ec2 mysql

情况是,我们有 AWS EC2 中型实例,上面有 Linux。
它也有 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 重新启动不起作用的事实可能与两件事有关:

  1. 重新启动可能与显式 service mysqld stop 后跟 service mysqld start 不同;另外,您可以在重新启动时检查日志,看看是否遇到任何异常。

  2. 重新启动的顺序可以稍微改变一下,也包括您的 PHP 设置,所以您可以先停止 apache,然后停止 mysqld;之后,您以相反的顺序启动它们。

关于php - 通过套接字的mysql连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194298/

相关文章:

php - Twitter bootstrap 总是相同的内容

php - 查询异常 Laravel : Driver not found

php - 发布表单后有条件地设置 JavaScript 函数

Drupal Views2 公开表单

drupal - ffserver 与 drupal 兼容吗?

amazon-ec2 - Cloudwatch 默认指标 EC2 DiskReadOps 和 DiskWriteOps 未报告

docker - Kubernetes 无法识别本地 docker 镜像

magento - 在 magento 的多个实例上设置 Cron 作业

php - 将来自适配器的 JSON 响应填充到下拉菜单中

web-applications - Drupal 模块内部工作的隐喻