Mysql

MySQL 複製從屬是否應該設置為只讀?

  • December 29, 2021

我按照本指南在 Percona Server 5.5 上執行了複製,並想知道是否應該添加read-only=1到我的從屬伺服器my.cnf以使其只讀?

該指南為 mysql 表設置了複製,因此使用者被複製,但我主要使用從屬伺服器來獲取 mysqldumps,在緊急情況下將其重新配置為主伺服器,所以我不相信我們需要(或應該)啟用寫入它不斷?

當一個 Slave 是只讀的時,它不是 100% 與世界隔絕的。

根據 MySQL 文件read-only

這個變數預設是關閉的。啟用後,伺服器不允許更新,除非來自具有 SUPER 權限的使用者或(在從屬伺服器上)由從屬執行緒執行的更新。在複製設置中,在從屬伺服器上啟用 read_only 以確保從屬伺服器僅接受來自主伺服器而不是來自客戶端的更新可能很有用。

因此,任何擁有SUPER 特權的人都可以隨意讀寫這樣的奴隸……

確保所有非特權使用者都沒有超級特權。

如果您想一次性撤銷所有 SUPER 權限,請在 Master 和 Slave 上執行:

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

參考從站,這將保留 SUPER 特權,以root防止非特權者進行否則會受到限制的寫入。

更新 2015-08-28 17:39 EDT

我最近才知道 MySQL 5.7 將引入super_read_only

這將阻止超級使用者,因為 5.7 文件說

如果啟用了 read_only 系統變數,則伺服器只允許具有 SUPER 權限的使用者進行客戶端更新。如果還啟用了 super_read_only 系統變數,伺服器將禁止客戶端更新,即使是擁有 SUPER 的使用者也是如此。有關只讀模式的描述以及有關 read_only 和 super_read_only 如何互動的資訊,請參見 read_only 系統變數的描述。

主伺服器上對 super_read_only 的更改不會復製到從伺服器。該值可以在從伺服器上設置,與主伺服器上的設置無關。

在 MySQL 5.7.8 中添加了 super_read_only。

引用自:https://dba.stackexchange.com/questions/30128