Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  The Server Shutdown Process

7.1.19 服务器关闭过程

服务器关闭过程如下:

  1. 关闭过程开始。

    这可以通过多种方式开始。例如,拥有SHUTDOWN特权的用户可以执行mysqladmin shutdown命令。mysqladmin可以在支持MySQL的任何平台上使用。其他操作系统特定的关闭初始化方法也可能存在:在Unix上,服务器在接收到SIGTERM信号时关闭。作为Windows服务运行的服务器在服务管理器的指令下关闭。

  2. 服务器创建关闭线程,如果必要。

    根据关闭方式,服务器可能创建一个线程来处理关闭过程。如果关闭是由客户端请求的,创建一个关闭线程。如果关闭是由接收到SIGTERM信号导致的,信号线程可能自己处理关闭,或者创建一个单独的线程来处理。如果服务器尝试创建关闭线程,但不能(例如,如果内存耗尽),它将发出诊断消息,该消息将出现在错误日志中:

    Error: Can't create thread to kill server
  3. 服务器停止接受新的连接。

    为了防止关闭期间的新活动,服务器停止接受新的客户端连接 โดย关闭网络接口的处理程序,这些接口通常用于监听连接:TCP/IP端口、Unix套接字文件、Windows命名管道和Windows共享内存。

  4. 服务器终止当前活动。

    对于每个与客户端连接相关的线程,服务器断开客户端连接并标记线程为死亡。线程在它们被标记为死亡时死亡。空闲连接的线程死亡速度快。处理语句的线程检查状态,死亡速度较慢。关于线程终止的详细信息,请参阅第15.7.8.4节,“KILL Statement”,特别是关于被杀死的REPAIR TABLEOPTIMIZE TABLE操作的说明,特别是关于MyISAM表的。

    对于线程具有打开事务的线程,事务将回滚。如果线程正在更新非事务表,操作如多行UPDATEINSERT可能会留下表部分更新,因为操作可能在完成前终止。

    如果服务器是复制源服务器,它将对当前连接的复制线程进行处理。也就是说,每个线程都将被标记为死亡,并在下次检查状态时退出。

    如果服务器是一个副本服务器,它将在标记客户端线程为死亡前,停止复制I/O和SQL线程,如果它们是活动的。SQL线程允许完成当前语句(避免复制问题),然后停止。如果SQL线程在这个点上正在执行事务,那么服务器将等待当前复制事件组(如果有)完成执行,或者直到用户发出KILL QUERYKILL CONNECTION语句。请参阅第15.4.2.5节,“STOP REPLICA Statement”。由于非事务语句不能回滚,因此为了确保崩溃安全的复制,只有事务表可以使用。

    Note

    为了在副本上确保崩溃安全,您必须将副本运行在--relay-log-recovery启用的状态下。

    请参阅第19.2.4节,“Relay Log and Replication Metadata Repositories”

  5. 服务器关闭或关闭存储引擎。

    在这个阶段,服务器将flush表缓存并关闭所有打开的表。

    每个存储引擎执行它管理的表所需的操作。InnoDB将其缓冲池flush到磁盘(除非innodb_fast_shutdown为2),将当前LSN写入表空间,并终止其内部线程。MyISAM将flush任何pending索引写入的表。

  6. 服务器退出。

为了提供信息给管理进程,服务器将返回以下列表中的一个退出代码。括号中的短语表示在使用systemd管理服务器的平台上,systemd将采取的操作。

  • 0 = 成功终止(无重启)

  • 1 = 不成功终止(无重启)

  • 2 = 不成功终止(重启)