Documentation Home
MySQL 8.0 参考手册  / 第 5 章 MySQL 服务器管理  / 5.1 MySQL 服务器  /  5.1.16 服务器关机过程

5.1.16 服务器关机过程

服务器关闭过程如下:

  1. 关闭过程启动。

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

  2. 如有必要,服务器会创建一个关闭线程。

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

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

    为了防止在关闭期间启动新活动,服务器通过关闭它通常侦听连接的网络接口的处理程序来停止接受新的客户端连接:TCP/IP 端口、Unix 套接字文件、Windows 命名管道和Windows 上的共享内存。

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

    对于与客户端连接关联的每个线程,服务器断开与客户端的连接并将线程标记为已终止。当线程注意到它们被如此标记时,它们就会死亡。空闲连接的线程很快就会死亡。当前正在处理语句的线程会定期检查它们的状态,并需要更长的时间才能消亡。有关线程终止的其他信息,请参阅 第 13.7.6.4 节,“KILL 语句”,特别是有关终止REPAIR TABLEOPTIMIZE TABLEMyISAM表进行操作的说明。

    对于具有打开事务的线程,事务被回滚。如果线程正在更新非事务性表,则诸如多行之类的操作 UPDATE可能 INSERT会使表部分更新,因为该操作可能会在完成之前终止。

    如果服务器是源复制服务器,它会像对待其他客户端线程一样对待与当前连接的副本关联的线程。也就是说,每个人都被标记为已杀死并在下一次检查其状态时退出。

    If the server is a replica, it stops the I/O and SQL threads, if they are active, before marking client threads as killed. The SQL thread is permitted to finish its current statement (to avoid causing replication problems), and then stops. If the SQL thread is in the middle of a transaction at this point, the server waits until the current replication event group (if any) has finished executing, or until the user issues a KILL QUERY or KILL CONNECTION statement. See also Section 13.4.2.6, “STOP SLAVE Statement”. Since nontransactional statements cannot be rolled back, in order to guarantee crash-safe replication, only transactional tables should be used.

    Note

    To guarantee crash safety on the replica, you must run the replica with --relay-log-recovery enabled.

    See also Section 16.2.4, “Relay Log and Replication Metadata Repositories”).

  5. The server shuts down or closes storage engines.

    At this stage, the server flushes the table cache and closes all open tables.

    Each storage engine performs any actions necessary for tables that it manages. InnoDB flushes its buffer pool to disk (unless innodb_fast_shutdown is 2), writes the current LSN to the tablespace, and terminates its own internal threads. MyISAM flushes any pending index writes for a table.

  6. 服务器退出。

为了向管理进程提供信息,服务器返回下表中描述的退出代码之一。括号中的短语表示 systemd 响应代码所采取的操作,适用于使用 systemd 管理服务器的平台。

  • 0 = 成功终止(没有重启)

  • 1 = 未成功终止(未重新启动)

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