服务器关机过程如下所示:
关机过程启动。
这可能发生在几种方式。例如,具有该SHUTDOWN特权的用户可以执行mysqladmin shutdown命令。 mysqladmin可以在MySQL支持的任何平台上使用。其他操作系统特定的关闭启动方法也是可能的:服务器在接收到SIGTERM信号时在Unix上关闭。在服务管理器告诉它时,在Windows上作为服务运行的服务器关闭。
服务器根据需要创建关闭线程。
根据启动关闭的方式,服务器可能会创建一个线程来处理关闭过程。如果客户端请求关闭,则会创建一个关闭线程。如果关闭是接收SIGTERM信号的结果 ,则信号线程可能自己处理关闭,或者它可能会创建一个单独的线程来执行关闭。如果服务器尝试创建关闭线程并且不能(例如,如果内存耗尽),则它会发出诊断消息,该消息出现在错误日志中:Error: Can't create thread to kill server
服务器停止接受新的连接。
为防止在关闭期间启动新活动,服务器通过关闭它通常监听连接的网络接口的处理程序来停止接受新的客户端连接:TCP / IP端口,Unix套接字文件,Windows命名管道和Windows上的共享内存。
服务器终止当前活动。
对于与客户端连接关联的每个线程,服务器都会中断到客户端的连接并将该线程标记为已终止。线程在注意到它们如此标记时死亡。用于空闲连接的线程快速死亡。当前正在处理语句的线程会定期检查它们的状态,并花更长的时间去死。有关线程终止的更多信息,请参见第13.7.7.4节“KILL语法”,特别是有关表关于终止 REPAIR TABLE或 OPTIMIZE TABLE操作 的说明MyISAM。
对于具有开放事务的线程,事务将回滚。如果一个线程正在更新一个非事务表,一个诸如多行的操作 UPDATE或者 INSERT可能会使该表部分更新,因为该操作可能会在完成之前终止。
如果服务器是主复制服务器,它将像其他客户端线程一样处理与当前连接的从属关联的线程。也就是说,每个人都会被标记为死亡,并在下次检查其状态时退出。
如果服务器是从属复制服务器,则在将客户端线程标记为终止之前,它将停止I / O和SQL线程(如果它们处于活动状态)。SQL线程被允许完成其当前语句(以避免导致复制问题),然后停止。如果此时SQL线程处于事务的中间,则服务器将等待直到当前复制事件组(如果有)完成执行,或者直到用户发出一个KILL QUERY或 一个 KILL CONNECTION语句。
注意-
为了保证从站的碰撞安全,您必须
--relay-log-recovery
启用从站才能运行 。 服务器关闭或关闭存储引擎。
在这个阶段,服务器刷新表缓存并关闭所有打开的表。
每个存储引擎都会执行其管理的表所需的任何操作。
InnoDB
将其缓冲池刷新到磁盘(除非innodb_fast_shutdown
是2),将当前LSN写入表空间,并终止其自己的内部线程。MyISAM
刷新表的任何挂起的索引写入。服务器退出。
要向管理进程提供信息,服务器将返回以下列表中描述的退出代码之一。括号中的短语表示systemd为响应代码而采取的行动,systemd用于管理服务器的平台。
0 =成功终止(不重新启动)
1 =不成功终止(不重新启动)
2 =不成功终止(重新启动完成)
本文由:学什么技术好网