普通關閉
我的mysql是自己下載的tar包,自己設定安裝目錄來安裝的。
停止mysql服務,說來簡單,但不知道的話,還真是撓頭。在這和mysql入門的同學們共享:)
正確方法是,進入mysql的bin目錄下,然后執(zhí)行
| ./mysqladmin -uroot -p shutdown |
然后輸入你的密碼就可以了。
ps:當然,如果你的root沒有密碼,就不需要-p選項嘍。
ps:有人問啟動的方法,正確的啟動方法是:進入mysql的bin目錄,然后nohup ./mysqld_safe &就可以了。
安全地關閉MySQL實例
關閉過程:
1、發(fā)起shutdown,發(fā)出 SIGTERM信號
2、有必要的話,新建一個關閉線程(shutdown thread)
如果是客戶端發(fā)起的關閉,則會新建一個專用的關閉線程
如果是直接收到 SIGTERM 信號進行關閉的話,專門負責信號處理的線程就會負責關閉工作,或者新建一個獨立的線程負責這個事
當無法創(chuàng)建獨立的關閉線程時(例如內(nèi)存不足),MySQL Server會發(fā)出類似下面的告警信息:
| Error: Can't create thread to kill server |
3、MySQL Server不再響應新的連接請求
關閉TCP/IP網(wǎng)絡監(jiān)聽,關閉Unix Socket等渠道
4、逐漸關閉當前的連接、事務
空閑連接,將立刻被終止;
當前還有事務、SQL活動的連接,會將其標識為 killed,并定期檢查其狀態(tài),以便下次檢查時將其關閉;(參考 KILL 語法)
當前有活躍事務的,該事物會被回滾,如果該事務中還修改了非事務表,則已經(jīng)修改的數(shù)據(jù)無法回滾,可能只會完成部分變更;
如果是Master/Slave復制場景里的Master,則對復制線程的處理過程和普通線程也是一樣的;
如果是Master/Slave復制場景里的Slave,則會依次關閉IO、SQL線程,如果這2個線程當前是活躍的,則也會加上 killed 標識,然后再關閉;
Slave服務器上,SQL線程是允許直接停止當前的SQL操作的(為了避免復制問題),然后再關閉該線程;
在MySQl 5.0.80及以前的版本里,如果SQL線程當時正好執(zhí)行一個事務到中間,該事務會回滾;從5.0.81開始,則會等待所有的操作結束,除非用戶發(fā)起KILL操作。
當Slave的SQL線程對非事務表執(zhí)行操作時被強制 KILL了,可能會導致Master、Slave數(shù)據(jù)不一致;
5、MySQL Server進程關閉所有線程,關閉所有存儲引擎;
刷新所有表cache,關閉所有打開的表;
每個存儲引擎各自負責相關的關閉操作,例如MyISAM會刷新所有等待寫入的操作;InnoDB會將buffer pool刷新到磁盤中(從MySQL 5.0.5開始,如果innodb_fast_shutdown不設置為 2 的話),把當前的LSN記錄到表空間中,然后關閉所有的內(nèi)部線程。
6、MySQL Server進程退出
關于KILL指令
新聞熱點
疑難解答
圖片精選