我试图通过运行以下命令来调整正在运行的 mysql-server 的性能:
mysqld_safe --key_buffer_size=64M --table_cache=256 --sort_buffer_size=4M --read_buffer_size=1M &
Run Code Online (Sandbox Code Playgroud)
在此之后,我无法从运行 mysql 的服务器连接 mysql。我收到此错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
Run Code Online (Sandbox Code Playgroud)
但是,幸运的是我仍然可以远程连接到 mysql。所以我所有的网络服务器仍然可以访问 mysql 并且运行没有任何问题。因此,尽管我不想尝试重新启动 mysql 服务器,因为这可能会将一切搞砸。
现在我知道 mysqld_safe 正在启动 mysql-server,并且由于 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
Run Code Online (Sandbox Code Playgroud)
更新 2:现在尝试重新启动。停止工作正常,但启动失败。令我惊讶的是,mysql-server 仍然没有问题地运行,所以我真的不知道它停止了什么。
更新 3:我很确定这是现在的问题:当我第一次启动 mysql 时,它把它的 processid 写入 /var/run/mysqld/mysqld.pid 并将套接字写入 /var/run/mysqld/mysqld.sock .
然后当我运行 mysqld_safe 命令时,它删除了这些文件。现在我无法停止 mysql-server,因为 stop 命令需要这些文件。有什么方法可以恢复这些文件吗?我猜 pid 文件只是一个带有进程 ID 的文件?我不想仅仅终止该进程,因为对该服务器的写入非常多,并且终止 mysql 通常以损坏的数据库结束。
检查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 套接字文件。
检查这里的一些有用的技巧。
Edit2
的可能原因之一Can't connect to local MySQL server,这似乎是这里的问题:
有人删除了 mysqld 使用的 Unix 套接字文件(默认为 /tmp/mysql.sock)。例如,您可能有一个从 /tmp 目录中删除旧文件的 cron 作业。您始终可以运行 mysqladmin version 来检查 mysqladmin 尝试使用的 Unix 套接字文件是否确实存在。在这种情况下的修复是更改 cron 作业以不删除 mysql.sock 或将套接字文件放在其他地方。请参阅第 B.5.4.5 节,“如何保护或更改 MySQL Unix 套接字文件”。
Martin,请确保您socket = /var/run/mysqld/mysqld.sock在 my.cnf 中有,我相信 mysqld restart 会解决您的问题,它应该重新创建 mysqld.sock 并且您应该能够在本地连接。