在資料庫繁忙時如何快速有效的關閉MySQL服務

dbasdk發表於2018-04-17
如果InnoDB_buffer_size引數很大,緩衝區內的髒資料太多,那麼關閉MySQL的時候
必須把髒資料重新整理到磁碟,這個過程有可能是很漫長的,從而導致關閉MySQL服務的時間過長。
可以臨時設定innodb_max_dirty_pages_pct=0,然後等到髒資料大部分都重新整理到磁碟後(透過檢視show engine innodb status命令輸出中的Modified db pages,這個值應該很小),再手動關閉資料庫。
方法1:
mysql>set global innodb_max_dirty_pages_pct=0;
Query OK, 0 rows affected (0.00 sec)


執行命令mysqladmin -uroot ext -i10 |grep dirty,檢查狀態變數值,等到它接近0的時候關閉它,如果是生產繁忙的系統,這個值可能會一直偏大,待innodb_max_dirty_pages的值很小時,就可以
用mysqladmin關閉MySQL了.


# mysqladmin -uroot ext -i10 |grep dirty
| Innodb_buffer_pool_pages_dirty                | 0                                                |
| Innodb_buffer_pool_bytes_dirty                | 0                                                |
| Innodb_buffer_pool_pages_dirty                | 0                                                |
| Innodb_buffer_pool_bytes_dirty                | 0



方法2:

mysql>set global innodb_fast_shutdown=2;  預設為1
Query OK, 0 rows affected (0.00 sec)

雖然這樣可以快速關閉mysql,但啟動時候需要執行更多的恢復操作.


Innodb_fast_shutdown三個值的含義:
Innodb_fast_shutdown告訴innodb在它關閉的時候該做什麼工作。有三個值可以選擇:
0表示在innodb關閉的時候,需要purge all, merge insert buffer,flush dirty pages。這是最慢的一種關閉方式,但是restart的時候也是最快的。後面將介紹purge all,merge insert buffer,flush dirty pages這三者的含義。
1表示在innodb關閉的時候,它不需要purge all,merge insert buffer,只需要flush dirty page。
2表示在innodb關閉的時候,它不需要purge all,merge insert buffer,也不進行flush dirty page,只將log buffer裡面的日誌flush到log files。因此等下進行恢復的時候它是最耗時的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2152998/,如需轉載,請註明出處,否則將追究法律責任。

相關文章