如果安装 initscript 并使用标准sudo service mysql start| stop不在您认为合理的选项列表中,您总是可以mysqld使用一些自定义 hackery 将您自己的版本编译到信号处理代码中sql/mysqld.cc,其中看起来有些信号尚未定义,所以大概没有操作只是等待对于某些复制/粘贴,尽管在点击此开关之前可能会有其他代码屏蔽它们。
switch (sig) {
case SIGTERM:
case SIGQUIT:
case SIGKILL:
#ifdef EXTRA_DEBUG
sql_print_information("Got signal %d to shutdown mysqld",sig);
#endif
/* switch to the old log message processing */
logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_FILE:LOG_NONE,
opt_log ? LOG_FILE:LOG_NONE);
DBUG_PRINT("info",("Got signal: %d abort_loop: %d",sig,abort_loop));
if (!abort_loop)
{
abort_loop=1; // mark abort for threads
#ifdef HAVE_PSI_THREAD_INTERFACE
/* Delete the instrumentation for the signal thread */
PSI_THREAD_CALL(delete_current_thread)();
#endif
#ifdef USE_ONE_SIGNAL_HAND
pthread_t tmp;
if (mysql_thread_create(0, /* Not instrumented */
&tmp, &connection_attrib, kill_server_thread,
(void*) &sig))
sql_print_error("Can't create thread to kill server");
#else
kill_server((void*) sig); // MIT THREAD has a alarm thread
#endif
}
break;
...
你可以
--gdb
试试 这将使它响应SIGINT
,但我不确定这是否有可能破坏数据库。--one-thread
也可能有一些帮助。如果安装 initscript 并使用标准
sudo service mysql start
|stop
不在您认为合理的选项列表中,您总是可以mysqld
使用一些自定义 hackery 将您自己的版本编译到信号处理代码中sql/mysqld.cc
,其中看起来有些信号尚未定义,所以大概没有操作只是等待对于某些复制/粘贴,尽管在点击此开关之前可能会有其他代码屏蔽它们。否则,不。