【问题标题】:Terminating MySQLd session to go back to command prompt终止 MySQLd 会话以返回命令提示符
【发布时间】:2012-03-14 00:25:49
【问题描述】:

我正在使用 Ubuntu Natty。

我使用以下命令从命令行运行 mysqld:

mysqld -ndbcluster --console -umysql

我得到以下信息:

120314  0:09:49 [Warning] option 'new': boolean value 'dbcluster' wasn't recognized. Set to OFF.
120314  0:09:49 [Note] Plugin 'ndbcluster' is disabled.
120314  0:09:49 [Note] Plugin 'FEDERATED' is disabled.
120314  0:09:50 InnoDB: The InnoDB memory heap is disabled
120314  0:09:50 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120314  0:09:50 InnoDB: Compressed tables use zlib 1.2.3
120314  0:09:50 InnoDB: Using Linux native AIO
120314  0:09:50 InnoDB: Initializing buffer pool, size = 128.0M
120314  0:09:50 InnoDB: Completed initialization of buffer pool
120314  0:09:50 InnoDB: highest supported file format is Barracuda.
120314  0:09:50  InnoDB: Waiting for the background threads to start
120314  0:09:51 InnoDB: 1.1.8 started; log sequence number 1595675
120314  0:09:51 [Note] Event Scheduler: Loaded 0 events
120314  0:09:51 [Note] mysqld: ready for connections.
Version: '5.5.19-ndb-7.2.4-gpl-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Cluster Community Server (GPL)

但是,我似乎不知道如何终止会话。我已经尝试过 Control-C 和许多其他组合。

如何结束会话并返回命令提示符?!

谢谢。

【问题讨论】:

    标签: linux bash ubuntu command-line


    【解决方案1】:

    ctrl+c 会生成SIGINT,可以被应用程序捕获或阻止。如果您只是从另一个终端运行killall mysqld,您将向进程发送SIGTERM,这也可以被捕获或阻止,但会给出一个更强烈的提示,即该进程应该立即终止。 (这对于干净地关闭数据库表会很好。)

    Ctrl+ 将生成SIGQUIT,可以被应用程序捕获或阻止。 (如果应用程序没有捕获或阻止此信号,操作系统将为您生成一个核心文件。)

    您可以使用kill(1) 手动发送SIGKILLSIGKILL 不能被捕获或阻塞,因此如果内核足够活跃来处理信号,它将总是终止一个进程。使用pidof 或其他机制找到pid,然后运行kill -SIGKILL pid。请注意,这是一个粗略的死亡;该进程没有机会自行清理,因此数据库表可能会处于不一致的状态,下次启动时可能需要一些时间来修复。

    如果你只是想要一个提示,你可以使用 ctrl+z 来暂停进程。然后,您可以使用 shell 的 bgfg 命令允许进程在后台继续运行,或者在前台重新加入进程。 (这个术语毫无意义,但我希望它能传达这个想法。)

    【讨论】:

    • Ctrl+\ 可以被应用程序捕获或阻止。使用trap 'echo SIGQUIT received' 3 很容易。所以这不是SIGKILL,而是SIGQUIT。 AFAIK 没有 SIGKILL-9 信号的键盘快捷键。
    • @sputnick:太棒了,我已经有 15 年没有自己检查会产生什么信号了。我很高兴这个过程通常会随着它而消失......谢谢伙计!
    • 您可以使用我的脚本检查所有这些信号:sputnick-area.net/pasteme/316 只需运行脚本并尝试通过kill 或键盘发送一些信号。
    • @sputnick 非常感谢这次分解,确实非常有见地。干杯。
    • 在某些键盘上,没有\ 键。在这种情况下,按下Ctrl + Shift + <key> Ctrl + Alt + <key> Ctrl + Right-Alt + <key> 之一应该可以工作(生成SIGQUIT),其中<key> 是组合按下以生成\ 的键。
    【解决方案2】:

    Ctrl+\

    MySQL 似乎忽略了 SIGINT(按下 Ctrl+C 时发出),但在收到 SIGQUIT 时会执行干净关闭(这就是 Ctrl+\ 发送)。

    有关详细信息,请参阅 samold 的回答。

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多