Mysql 无法通过 Amazon EC2 上的套接字连接到本地服务器

Posted

技术标签:

【中文标题】Mysql 无法通过 Amazon EC2 上的套接字连接到本地服务器【英文标题】:Mysql can't connect to local server through socket on Amazon EC2 【发布时间】:2013-11-08 08:08:45 【问题描述】:

我在 Amazon EC2 上打开了我的应用程序(在 Rails 中)并遇到了错误 - 因此我检查了日志,结果如下:

ERROR 2002 (HY000): Can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (111)

10 小时前一切正常。有什么问题?流量大吗? 该应用在 Micro Instance 上运行。

如何解决这个问题以及以后如何避免它?

非常感谢

编辑:

sudo find / -type s
---
/tmp/.sock
/dev/log
/var/lib/apt-xapian-index/update-socket
/run/mysqld/mysqld.sock
/run/acpid.socket
/run/dbus/system_bus_socket
/run/udev/control
find: `/proc/4739/task/4739/fd/5': No such file or directory
find: `/proc/4739/task/4739/fdinfo/5': No such file or directory
find: `/proc/4739/fd/5': No such file or directory
find: `/proc/4739/fdinfo/5': No such file or directory

【问题讨论】:

听起来像this 您是否尝试过locate 您的mysqld.sock 文件...使用定位mysqld.sock 命令。路径是否与您的myconf 文件中的socket=path 匹配?? 大家好,感谢您的回答。 locate mysqld.sock 返回空输出,当我运行 sudo find / -type s 时,我看到了 /run/mysqld/mysqld.sock - 如何处理? 【参考方案1】:

要解决这个错误,首先找到你的套接字文件,在终端中运行以下命令

mysqladmin variables | grep socket

对我来说,这给出了:

| socket              | /var/run/mysqld/mysqld.sock

然后,在 Rails 应用程序中添加一行:config/database.yml:

development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: /var/run/mysqld/mysqld.sock

这将解决这个问题。

【讨论】:

【参考方案2】:

mysql-server 默认情况下未安装在 Amazon Linux AMI 上。使用这些命令来安装它:

$ sudo yum install mysql-server
$ sudo chkconfig mysqld on
$ sudo /etc/init.d/mysqld start
$ mysqladmin -u root password NEWPASSWORD
$ mysql -u root -p

【讨论】:

【参考方案3】:

在我的例子中,我使用了以下命令:

project_folder > mysql.server start 

系统返回成功消息后,它工作正常。

【讨论】:

【参考方案4】:

在我的情况下,服务器显然在某个时候重新启动,并且 mysql 没有在它启动时启动。我只是输入了启动命令,它就起作用了:

sudo service mysqld start

【讨论】:

sudo systemctl start mysqld.service,取决于 OP 的系统。在这种情况下,可以使用sudo systemctl enable mysqld.service 自动为将来的重启。【参考方案5】:

从here 交叉发布我的回复。

我在 ec2 实例上遇到了同样的问题。这些instructions 非常适合我:


Redhat Enterprise Linux - RHEL 5 / 6 MySQL 安装

以 root 用户身份输入以下命令:

yum install mysql-server mysql

Redhat Enterprise Linux - RHEL 4/3 MySQL 安装

以 root 用户身份输入以下命令:

up2date mysql-server mysql

启动 MySQL 服务

要启动 mysql 服务器,请键入以下命令:

chkconfig mysqld on
/etc/init.d/mysqld start

设置 mysql root 密码

键入以下命令为root用户设置密码:

mysqladmin -u root password NEWPASSWORD

测试 mysql 连接性

键入以下命令以连接到 MySQL 服务器:

$ mysql -u root -p

【讨论】:

【参考方案6】:

找到您的locate my.cnf 文件,请参阅socket = ../../mysql.sock 行 你需要用你的路径替换路径为

socket = /run/mysqld/mysqld.sock

如果路径匹配,请告诉我

【讨论】:

感谢您的回答阿米特。 locate my.cnf的输出是/etc/mysql/my.cnf,现在怎么更新? sudo vim /etc/mysql/my.cnf 并查找socket=../../mysql.sock 行并查看套接字的路径是否与/run/mysqld/mysqld.sock 相同,否则将其替换并按Esc + :+ @987654330 保存文件@ 我做了这个更新 - 以前的路径是/var/run/mysqld/mysqld.sock,所以我改变了它。但是,仍然是同样的问题。我也尝试重新启动nginx,但这对我没有帮助。但是 - 在日志中仍然是旧路径 - Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) (Mysql2::Error) 试试sudo /etc/init.d/mysql restart

以上是关于Mysql 无法通过 Amazon EC2 上的套接字连接到本地服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例

Amazon ec2 linux实例mysql未连接

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

PHP 无法在带有 nginx 和 php-fpm 的 Amazon EC2 服务器上的页面内工作

socket_bind():无法绑定地址 [99](Amazon EC2 上的 Ubuntu)

如何通过 SSL 上的 PHP 连接到 Amazon MySQL RDS 实例