无法通过套接字连接到本地 MySQL 服务器

无法通过套接字连接到本地 MySQL 服务器

我尝试通过运行以下命令来调整正在运行的 mysql-server 的性能:

mysqld_safe --key_buffer_size=64M --table_cache=256 --sort_buffer_size=4M --read_buffer_size=1M &

此后,我无法从运行 mysql 的服务器连接 mysql。我收到此错误:

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

不过幸运的是,我仍然可以远程连接到 mysql。因此,我的所有 Web 服务器仍然可以访问 mysql,并且运行正常。因此,我不想尝试重新启动 mysql 服务器,因为这可能会搞乱一切。

现在我知道 mysqld_safe 正在启动 mysql 服务器,而且由于 mysql 服务器已经在运行,所以我猜测是两个 mysql 服务器在运行并监听同一个端口出现了某种问题。

有没有办法可以解决这个问题而无需重新启动初始 mysql 服务器?

更新: 这是什么ps xa | grep“mysql”说:

11672 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe
11780 ?        Sl   175:04 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
11781 ?        S      0:00 logger -t mysqld -p daemon.error
12432 pts/0    R+     0:00 grep mysql

更新2:尝试重新启动。停止工作正常,但启动失败。令我惊讶的是,mysql-server 仍在运行,没有问题,所以我真的不知道它停止了什么。

更新 3:我很确定现在存在这个问题:当我第一次启动 mysql 时,它将其进程 ID 写入 /var/run/mysqld/mysqld.pid,并将套接字写入 /var/run/mysqld/mysqld.sock。

然后当我运行 mysqld_safe 命令时,它删除了这些文件。现在我无法停止 mysql 服务器,因为 stop 命令需要这些文件。有什么方法可以恢复这些文件吗?我猜 pid 文件只是一个带有进程 ID 的文件?我不想直接终止进程,因为这个服务器有很多写入操作,而终止 mysql 通常会导致数据库损坏。

答案1

检查bind-address您的my.cnf。它应该是0.0.0.0为了允许本地和远程连接。

检查ps xa | grep mysql运行了多少个实例。

编辑
显然:

Unix 上的 MySQL 客户端可以通过两种不同的方式连接到 mysqld 服务器:使用 Unix 套接字文件通过文件系统中的文件进行连接(默认为 /tmp/mysql.sock),或使用 TCP/IP(通过端口号进行连接)。Unix 套接字文件连接比 TCP/IP 更快,但只能在连接到同一台计算机上的服务器时使用。如果您未指定主机名或指定特殊主机名 localhost,则使用 Unix 套接字文件。

查看这里获得一些有用的提示。

編輯2
可能的原因之一Can't connect to local MySQL server,似乎是这里的问题:

有人删除了 mysqld 使用的 Unix 套接字文件(默认情况下为 /tmp/mysql.sock)。例如,您可能有一个 cron 作业,用于从 /tmp 目录中删除旧文件。您始终可以运行 mysqladmin version 来检查 mysqladmin 尝试使用的 Unix 套接字文件是否确实存在。在这种情况下,解决方法是将 cron 作业更改为不删除 mysql.sock 或将套接字文件放在其他位置。请参见第 B.5.4.5 节“如何保护或更改 MySQL Unix 套接字文件”。

马丁,确保您有socket = /var/run/mysqld/mysqld.sockmy.cnf,我相信 mysqld restart 将解决您的问题,它应该重新创建 mysqld.sock 并且您应该能够在本地连接。

答案2

你的 mysql 日志错误日志中有什么(不同发行版有不同的位置)?

您的实例设置是什么?连接到 mysql 并运行命令

show global variabes

观察变量socketlog-error

编辑:如果 mysql 正在运行并且你可以连接到它,你可以使用命令关闭它

mysqladmin shutdown

答案3

连接时只需添加带有主机名的 -h 标志即可查看它是否有效。还可以尝试将 --socket= 标志添加到 MySQLd

mysql -h myserver.null.com -P 3306 -u bob -P 数据库名称

相关内容