程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 輕輕松松正確掌握MySQL服務器關機進程

輕輕松松正確掌握MySQL服務器關機進程

編輯:關於MYSQL數據庫

服務器關閉進程可以概括為:

1.啟動關閉進程

2.服務器根據需要創建關閉線程

3.服務器停止接收新連接

4.服務器終止當前的活動

5.存儲引擎被停掉或關閉

6.服務器退出

下面是更詳細的描述:

1.啟動關閉進程

可以用多種方法啟動服務器的關閉。例如,擁有SHUTDOWN權限的用戶可以執行MySQLadmin shutdown命令。mysqladmin可以用於所有支持MySQL的平台上。其它操作系統相關的關閉開始方法還可能有:在Unix中,當接收到SIGTERM信號後,服務器關閉。對於在Windows中作為服務運行的服務器,當服務管理器讓它關閉時,則關閉。

2.服務器根據需要創建關閉線程

根據開始關閉的方式,服務器可以創建線程來處理關閉進程。如果客戶端需要關閉,則創建關閉線程。如果收到SIGTERM信號後關閉,信號線程可以自己關閉,或者創建單獨的線程來完成。如果服務器嘗試創建關閉線程而不能創建(例如,如果內存被耗盡),它在錯誤日志中給出診斷消息:

Error: Can't create thread to kill server

3.服務器停止接收新連接

在關閉過程中要想防止啟動新活動,服務器停止接收新的客戶端連接。它將關閉它幀聽的網絡連接:TCP/IP端口、Unix套接字文件、Windows命名管道和在Windows中的共享內存。

4.服務器終止當前的活動

對於每個與客戶端連接相關的線程,與客戶端的連接被中斷,線程被標記為“殺掉的”。當線程注意到此類標記後則線程終止。空閒連接的線程很快終止。當前正處理查詢的線程定期檢查它們的狀態,終止的時間較長。關於線程終止的詳細信息,參見13.5.5.3節,“KILL語法”,特別是關於對MyISAM表的殺掉的REPAIR TABLE或OPTIMIZE TABLE操作。

對於有打開事務的線程,事務被回滾。請注意如果某個線程正在更新非事務表,多行UPDATE或INSERT等操作會使表部分更新,因為操作在完成前會終止。

如果服務器是主復制服務器,與當前連接的從服務器相關的線程的處理方式同其它客戶端線程。即每個線程被標記為殺掉的,在下次檢查他的狀態後會退出。

如果服務器是從復制服務器,在客戶端線程標記為殺掉的之前,激活的I/O和SQL線程被停止。SQL線程允許先結束它當前的語句(以避免造成復制問題)然後停止。如果此時SQL線程正位於事務中部,事務則 回滾。

5.存儲引擎被停掉或關閉

在該階段,表緩存被清空,所有打開的表被關閉。

每個存儲引擎執行它管理的表需要的任何動作。例如,MyISAM清空任何掛起的表索引寫操作。InnoDB將它的緩沖池清空到硬盤上(除非innodb_fast_shutdown為2),將當前的LSN寫入表內,並終止自己的內部線程。

6.服務器退出

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved