關(guān)閉mysql有很多方法,但是如何安全、緩和的關(guān)閉mysql不是每個人都知道的,下面 聯(lián)動北方 來總結(jié)一下mysql的幾種關(guān)閉方式和注意事項 關(guān)閉過程: 1、發(fā)起shutdown,發(fā)出SIGTERM信號 2、有必要的話,新建一個關(guān)閉線程(shutdownthread) 3、MySQLServer不再響應(yīng)
關(guān)閉mysql有很多方法,但是如何安全、緩和的關(guān)閉mysql不是每個人都知道的,下面聯(lián)動北方來總結(jié)一下mysql的幾種關(guān)閉方式和注意事項
關(guān)閉過程:
1、發(fā)起shutdown,發(fā)出 SIGTERM信號
2、有必要的話,新建一個關(guān)閉線程(shutdown thread)
3、MySQL Server不再響應(yīng)新的連接請求
4、逐漸關(guān)閉當(dāng)前的連接、事務(wù)
5、MySQL Server進(jìn)程關(guān)閉所有線程,關(guān)閉所有存儲引擎;
6、MySQL Server進(jìn)程退出
關(guān)于KILL指令
從5.0開始,KILL 支持指定 CONNECTION | QUERY兩種可選項:
KILL CONNECTION和原來的一樣,停止回滾事務(wù),關(guān)閉該線程連接,釋放相關(guān)資源;
KILL QUERY則只停止線程當(dāng)前提交執(zhí)行的操作,其他的保持不變;
提交KILL操作后,該線程上會設(shè)置一個特殊的 kill標(biāo)記位。通常需要一段時間后才能真正關(guān)閉線程,因為kill標(biāo)記位只在特定的情況下才檢查:
1、執(zhí)行SELECT查詢時,在ORDER BY或GROUP BY循環(huán)中,每次讀完一些行記錄塊后會檢查 kill標(biāo)記位,如果發(fā)現(xiàn)存在,該語句會終止;
2、執(zhí)行ALTER TABLE時,在從原始表中每讀取一些行記錄塊后會檢查 kill 標(biāo)記位,如果發(fā)現(xiàn)存在,該語句會終止,刪除臨時表;
3、執(zhí)行UPDATE和DELETE時,每讀取一些行記錄塊并且更新或刪除后會檢查 kill 標(biāo)記位,如果發(fā)現(xiàn)存在,該語句會終止,回滾事務(wù),若是在非事務(wù)表上的操作,則已發(fā)生變更的數(shù)據(jù)不會回滾;
4、GET_LOCK() 函數(shù)返回NULL;
安全關(guān)閉MySQL幾點建議
想要安全關(guān)閉 mysqld 服務(wù)進(jìn)程,建議按照下面的步驟來進(jìn)行:
0、用具有SUPER、ALL等最高權(quán)限的賬號連接MySQL,最好是用 unix socket 方式連接;
1、在5.0及以上版本,設(shè)置innodb_fast_shutdown = 1,允許快速關(guān)閉InnoDB(不進(jìn)行full purge、insert buffer merge),如果是為了升級或者降級MySQL版本,則不要設(shè)置;
2、設(shè)置innodb_max_dirty_pages_pct = 0,讓InnoDB把所有臟頁都刷新到磁盤中去;
3、設(shè)置max_connections和max_user_connections為1,也就最后除了自己當(dāng)前的連接外,不允許再有新的連接創(chuàng)建;
4、關(guān)閉所有不活躍的線程,也就是狀態(tài)為Sleep 且 Time 大于 1 的線程ID;
參考鏈接:http://bbs.landingbj.com/t-0-247144-1.html
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com