mysql服务关闭过程

myql关闭服务的方式只有一种,比oracle的3张方式少,服务关闭的方式如下:

1关闭进程的初始化

 2如果需要服务器创建一个关闭线程

依赖于关闭如何被初始化啊,服务器也许会创建一个线程来处理关闭的进程,如果客户端要求关闭,关闭的线程被创建,如果是收到SIGTERM信号关闭,那么信号线程可能会自己处理信号,也许会创建一个分开的线程来做,如果线程尝试创建一个关闭线程但失败了,那么会在错误日志中出现下面的错误提示:

Error: Can't create thread to kill server

3服务器停止接收新的连接

为了停止接收客户端的新连接,服务器通过关闭网络接口的句柄来实现。

4服务器停止当前的活动

对于每个客户端的连接,服务器断开连接并标记线程被kill,线程发现被标记成killed状态的时候会die,空闲的连接die的很快,但是正在执行语句的线程可能就要花费些时间了,对那些有正在执行的打开的事务,事务会被回滚。如果服务器是master机器,他对待slave过来的连接就跟别的客户端过来的连接一样,也是标记killed状态并退出。

如果服务器是slave机器,那么在标记客户端线程之前会停止io和sql线程,sql线程被允许执行完当前的语句,然后停止。如果在这时候,sql线程在一个事务中间,服务器会等待直到当前复制事件组完成了执行。

5服务器停止或关闭存储引擎

这个步骤中服务器刷新表缓存关闭所有打开的表。innodb刷新bufferpool到磁盘上,写当前的lsn到表空间中,关闭它自己的内部线程。MyISAM刷新所有pending的索引写入到表中。

6服务器退出。

你可能感兴趣的:(mysql服务关闭过程)