mysql关闭过程:
1 开始关闭
如果是客户端关闭的会,会建立一个shutdown的线程,如果是收到一个SIGTERM信号,那么他本身就是shutdown线程,也有可能创建一个。如果创建线程不能成功(例如,内存不足),会写一个错误日志Error: Can't create thread to kill server
2 不再接受新的连接。
3 中止当前的活动连接
终止当前已经连接上的连接,并标记为killed。空连接很快断掉,正在执行语句的连接,周期性的检查他们。打开事务的连接,回滚事务(如果是一个非事务引擎更新或插入多行,可能会部分成功,部分不成功)。 如果是主服务器,把从服务上的连接当做一般的连接对待。如果是从服务器,先关闭IO和sql线程,再把别的客户线程标记为killed。sql线程允许完成当前的语句(避免主从问题)再停止 。如果sql线程执行到事务的一半,那么会接着执行(除非使用kill)。非事务表不能被回滚
4 关闭服务或关闭存储引擎
flush表缓存,并且关闭打开的表。 每种存储引擎执行必要的操作,如innodb 会flush buffer pool到文件上(除非innodb_fast_shutdown=2),写当前的LSN到表空间,并且中止自己的内部线程。对于MYisam 刷新索引写
5 服务退出
from 官方文档