我尝试通过运行以下命令来调整正在运行的 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.sock
my.cnf,我相信 mysqld restart 将解决您的问题,它应该重新创建 mysqld.sock 并且您应该能够在本地连接。
答案2
你的 mysql 日志错误日志中有什么(不同发行版有不同的位置)?
您的实例设置是什么?连接到 mysql 并运行命令
show global variabes
观察变量socket
和log-error
编辑:如果 mysql 正在运行并且你可以连接到它,你可以使用命令关闭它
mysqladmin shutdown
答案3
连接时只需添加带有主机名的 -h 标志即可查看它是否有效。还可以尝试将 --socket= 标志添加到 MySQLd
mysql -h myserver.null.com -P 3306 -u bob -P 数据库名称