国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL關閉過程詳解和安全關閉MySQL的方法

2024-07-24 12:46:50
字體:
來源:轉載
供稿:網友

本文分析了mysqld進程關閉的過程,以及如何安全、緩和地關閉MySQL實例,對這個過程不甚清楚的同學可以參考下。

關閉過程:

1、發起shutdown,發出SIGTERM信號

2、有必要的話,新建一個關閉線程(shutdown thread)

   如果是客戶端發起的關閉,則會新建一個專用的關閉線程

   如果是直接收到 SIGTERM 信號進行關閉的話,專門負責信號處理的線程就會負責關閉工作,或者新建一個獨立的線程負責這個事

   當無法創建獨立的關閉線程時(例如內存不足),MySQL Server會發出類似下面的告警信息:

   Error: Can't create thread to kill server

3、MySQL Server不再響應新的連接請求

   關閉TCP/IP網絡監聽,關閉Unix Socket等渠道

4、逐漸關閉當前的連接、事務

   空閑連接,將立刻被終止;

   當前還有事務、SQL活動的連接,會將其標識為 killed,并定期檢查其狀態,以便下次檢查時將其關閉;(參考 KILL 語法)

   當前有活躍事務的,該事物會被回滾,如果該事務中還修改了非事務表,則已經修改的數據無法回滾,可能只會完成部分變更;

   如果是Master/Slave復制場景里的Master,則對復制線程的處理過程和普通線程也是一樣的;

   如果是Master/Slave復制場景里的Slave,則會依次關閉IO、SQL線程,如果這2個線程當前是活躍的,則也會加上 killed 標識,然后再關閉;

   Slave服務器上,SQL線程是允許直接停止當前的SQL操作的(為了避免復制問題),然后再關閉該線程;

   在MySQl 5.0.80及以前的版本里,如果SQL線程當時正好執行一個事務到中間,該事務會回滾;從5.0.81開始,則會等待所有的操作結束,除非用戶發起KILL操作。

   當Slave的SQL線程對非事務表執行操作時被強制 KILL了,可能會導致Master、Slave數據不一致;

5、MySQL Server進程關閉所有線程,關閉所有存儲引擎;

   刷新所有表cache,關閉所有打開的表;

   每個存儲引擎各自負責相關的關閉操作,例如MyISAM會刷新所有等待寫入的操作;InnoDB會將buffer pool刷新到磁盤中(從MySQL 5.0.5開始,如果innodb_fast_shutdown不設置為 2 的話),把當前的LSN記錄到表空間中,然后關閉所有的內部線程。

6、MySQL Server進程退出

關于KILL指令

   從5.0開始,KILL 支持指定  CONNECTION | QUERY兩種可選項:

@KILL CONNECTION和原來的一樣,停止回滾事務,關閉該線程連接,釋放相關資源;

@KILL QUERY則只停止線程當前提交執行的操作,其他的保持不變;

   提交KILL操作后,該線程上會設置一個特殊的 kill標記位。通常需要一段時間后才能真正關閉線程,因為kill標記位只在特定的情況下才檢查:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁甸县| 乌鲁木齐县| 临泽县| 会东县| 同德县| 建瓯市| 大田县| 曲周县| 抚州市| 五峰| 扎赉特旗| 禄劝| 靖西县| 清镇市| 奉贤区| 广灵县| 康定县| 金坛市| 平阴县| 麻江县| 保定市| 镇江市| 景德镇市| 长海县| 从化市| 潼南县| 祁连县| 洛浦县| 比如县| 渝北区| 桂阳县| 安远县| 阿拉善盟| 霍邱县| 库尔勒市| 永安市| 呼和浩特市| 肥西县| 库尔勒市| 台南市| 深圳市|