標籤:mysql super_read_only read_only
在MySQL的主從複製情境下,遇上slave被意外寫入資料是一件比較嚴重的問題,畢竟在一般情況下我們都希望slave僅用唯讀資料庫,如果被意外寫入資料可能會造成資料的不一致,從而導致主從的報錯。因此在MySQL中可以通過設定變數參數read_only
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/05/B2/wKiom1mpjYvAi5jgAAHB9B6xfqA068.png-wh_500x0-wm_3-wmp_4-s_1131279051.png" title="MySQL5.6" alt="wKiom1mpjYvAi5jgAAHB9B6xfqA068.png-wh_50" />
使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 = onsuper_read_only = ontx_read_only = on
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/05/B2/wKiom1mpkG6ywGxxAAGcVv_RuSE344.png-wh_500x0-wm_3-wmp_4-s_998682234.png" title="MySQL5.7" alt="wKiom1mpkG6ywGxxAAGcVv_RuSE344.png-wh_50" />
本文出自 “Jim的技術隨筆” 部落格,謝絕轉載!
MySQL 5.7 下的對super使用者唯讀