关闭Cygwin中的mysqld

时间:2013-08-09 21:55:00

标签: windows-8 cygwin mysql

你应该如何更快地从C​​ygwin关闭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

但似乎挂了。

1 个答案:

答案 0 :(得分:2)

我知道用户可能已经找到了关闭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。