2

您应该如何从 Cygwin 更快地关闭 mysqld(而不在任务管理器中终止进程)并防止这些错误?

我是这样开始的:

$ /usr/bin/mysqld_safe &
[1] 4440

Chloe@xps ~
$ 130809 17:27:09 mysqld_safe Logging to '/var/lib/mysql/xps.err'.
chown: invalid user: `mysql'
130809 17:27:10 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

当我尝试关闭它时,它会永远打印出来并且不会响应 ^C:

$ /usr/sbin/mysqld.exe shutdown
130809 17:29:26 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
130809 17:29:26 [Note] Plugin 'FEDERATED' is disabled.
130809 17:29:26 InnoDB: The InnoDB memory heap is disabled
130809 17:29:26 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130809 17:29:26 InnoDB: Compressed tables use zlib 1.2.7
130809 17:29:26 InnoDB: Initializing buffer pool, size = 128.0M
130809 17:29:26 InnoDB: Completed initialization of buffer pool
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
130809 17:29:26  InnoDB: Retrying to lock the first data file
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.

在重复打印这些错误 3 分钟后,它终于假装关闭,但它并没有真正关闭,因为它仍在任务管理器和 ps 列表中。我不认为应该花那么长时间。

130809 17:31:06 [Note] /usr/sbin/mysqld: Shutdown complete

我也试过

$ mysqladmin shutdown

但这似乎挂起。

4

1 回答 1

3

我知道用户可能已经找到了关闭 MySQL 的方法,但我也遇到了同样的问题,这是谷歌上的第一次点击。

诀窍是在命令中添加主机作为 IP 地址和用户(如果我使用 localhost 作为主机,命令将挂起)。

 mysqladmin.exe -h 127.0.0.1 -u root shutdown

@Chloe 在某些情况下这可能不起作用。我认为最常见的两种情况是 MySQL 是否绑定到不同的 IP 或是否绑定到不同的端口(其他情况是 MySQL 不使用 TCP,而是使用其他传输协议之一)。

因此,例如,在我运行mysqld_safe &并启动 mysql 之后,当我运行命令 netstat 时,我可以看到它正在侦听并且在默认端口 3306 上

$ netstat -an | grep 3306

我希望这有帮助!


编辑

如果 MySQL 没有运行,您需要提供连接超时 ( --connect-timeout=N),因为默认情况下 mysqladmin 会一直等待连接到服务器。例如,如果 MySQL 没有运行

$ mysqladmin.exe -h 127.0.0.1 -u root --connect-timeout=5 shutdown

mysqladmin: connect to server at '127.0.0.1' failed
error: 'Can't connect to MySQL server on '127.0.0.1' (4)'
Check that mysqld is running on 127.0.0.1 and that the port is 3306.
You can check this by doing 'telnet 127.0.0.1 3306'

在这里,命令在放弃之前等待 5 秒。从我的角度来看,它永远等待是没有意义的,但这是 mysql 选择的默认值:S。

于 2013-10-19T18:57:15.633 回答