web-dev-qa-db-ja.com

シェルの終了時またはctrl-cでMySQLサーバーを終了させる

mysqldを実行する場合、つまりコマンドラインで直接呼び出す場合、シェルが閉じているかctrl-c

「対話式」に実行する方法はありますか。つまり、これらのいずれかが発生した場合にシャットダウンするようにしますか?

(さまざまなサーバーをすばやく起動および停止するtmuxスクリプトがあるので、開発中にこれが役立つと思います。)

4
mahemoff

あなたは試すことができます--gdb。それがSIGINTに応答するようになりますが、データベースが破損する可能性があるかどうかはわかりません。 --one-threadも役立つかもしれません。

7
Rob N

Initscriptをインストールし、標準のSudo service mysql startを使用する場合| stopは、合理的なオプションと見なすもののリストに含まれていません。mysqldの独自のバージョンを、カスタムハッカーを使用して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;
...

そうでなければ、いいえ。

2