无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (111)

无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (111)

我在 Silverstripe 框架上开发了一个网站,并使用 centos (7.0.1406)、mariadb (10.0.14) 和 apache (2.4.6) 将其部署到数字海洋服务器。在系统管理方面,我有点新手,因此按照数字海洋社区文档中的说明设置服务器 (https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7)。

当我尝试连接到该站点时随机出现以下错误:

[警告] mysqli::mysqli():(HY000/2002):无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器(111)

$this->dbConn = new MySQLi($parameters['server'], $parameters['username'], $parameters['password']);

发生这种情况时,我重新启动服务器(使用“重新启动”),问题就消失了。这种情况似乎只发生在 CMS 中发生活动时。我的客户在尝试上传图片时多次遇到这种情况,而我在 CMS 中切换页面时才第一次遇到这种情况。

网站前端的使用量不会导致任何问题(至少到目前为止)。什么可能导致此问题?网站(PHP)执行的某些操作是否可能触发此故障?系统资源过度使用/某处挂断/超时?我可以从哪里开始调试过程?

我以前在类似的环境下部署过许多站点,但除了通过数字海洋控制面板强制关闭外,从未遇到过这种情况。

答案1

111 表示连接被拒绝。也就是说,没有任何东西在监听该套接字。

这意味着 MariaDB 没有运行,或者被配置为监听其他套接字(或者根本没有)。

检查您的 MariaDB 配置以确保您正确指定了套接字,然后重新启动它。

答案2

我遇到了同样的问题,经过一番研究,我找到了一些答案。MariaDB 是 mysql 的替代品。在新系统上,mysql 是 MariaDB 客户端(虽然我不清楚这是什么意思)。检查服务是否正在运行:

service mysqld status

这表明:

重定向到 /bin/systemctl status mysqld.service

mysqld.service

已加载:未找到(原因:没有此文件或目录)

活跃:不活跃(死亡)

换句话说,mysqld 服务没有运行。

启动该服务对我有用:
systemctl start mariadb.service

现在所有 mysql 命令均按预期工作。

最后,在启动时启用该服务:
systemctl enable mariadb.service

答案3

嗨@AveryPayne。感谢您花时间阅读这篇文章。$paramaters['server'] 是“localhost”。干杯 – Fraser

简而言之,你无法从这里到达那里。

根据此评论和错误消息,我会说你对类型的连接。 错误消息中的套接字显示为,/var/lib/mysql/mysql.sock但您正在尝试通过 localhost 进行网络连接,该地址映射到网络地址 127.0.0.1。您的程序似乎在运行时没有使用正确的参数。请仔细检查参数是否确实是“localhost”运行通过让它在某处记录/写出参数,并仔细检查 MySQL 是否连接到网络端口 3306,而不是文件套接字/var/lib/mysql/mysql.sock

或者,更改程序的参数MySQL 改用文件套接字。无论哪种方式最有效。

答案4

您好,请检查您的安装分区中的磁盘是否已满。如果存储存在,请管理 Mariadb 服务器中的日志,将以下几行添加到 my.conf

expire_logs_days = 10 #this is for managing the log days
max_binlog_size = 100M #this is for managing the log size

将日志移动到目录并重新启动 mariadb 服务器。

相关内容