1. 程式人生 > >MySQL 5.7 下的對super用戶只讀

MySQL 5.7 下的對super用戶只讀

mysql super_read_only read_only

在MySQL的主從復制場景下,遇上slave被意外寫入數據是一件比較嚴重的問題,畢竟在一般情況下我們都希望slave僅用只讀數據庫,如果被意外寫入數據可能會造成數據的不一致,從而導致主從的報錯。因此在MySQL中可以通過設置變量參數read_only

技術分享

使MySQL的slave設置為只讀,在缺省條件下read_only變量參數是關閉的,但是read_only變量參數有一個問題它對super用戶無效,所以如果使用super用戶在開啟read_only的slave下還是可以正常的讀寫。在僅作為只讀的slave下如果出現super用戶誤操作,那勢必會造成一定的故障,而在MySQL 5.7後Oracle對MySQL的大量代碼進行重構調優後添加了一個新的變量參數super_read_only,顧名思義就是super用戶只讀,所以在生產環境下如果沒有一些特殊的需求在slave下可以通過開啟super_read_only變量來警用slave寫入:

mysql> set global super_read_only=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like ‘%read_only%‘;
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| innodb_read_only | OFF   |
| read_only        | ON    |
| super_read_only  | ON    |
| tx_read_only     | ON    |
+------------------+-------+
4 rows in set (0.00 sec)

再把變量參數寫入my.cnf,使下一次遇上重啟時變量生效

read_only = on
super_read_only = on
tx_read_only = on

技術分享

本文出自 “Jim的技術隨筆” 博客,謝絕轉載!

MySQL 5.7 下的對super用戶只讀