天天看點

Mysql-從庫隻讀設定

mysql設定為隻讀後,無法增删改。

設定指令:

mysql> set global read_only=1;    #1是隻讀,0是讀寫

mysql> show global variables like "%read_only%";

Mysql-從庫隻讀設定

以下是相關說明:

      1、對于資料庫讀寫狀态,主要靠 “read_only”全局參數來設定;

      2、預設情況下,資料庫是用于讀寫操作的,是以read_only參數也是0或faluse狀态,這時候不論是本地使用者還是遠端通路資料庫的使用者,都可以進行讀寫操作;

      3、如需設定為隻讀狀态,将該read_only參數設定為1或TRUE狀态,但設定 read_only=1 狀态有兩個需要注意的地方:

  1)read_only=1隻讀模式,不會影響slave同步複制的功能,是以在MySQL slave庫中設定了read_only=1後,通過 show slave status\G ,指令檢視salve狀态,可以看到salve仍然會讀取master上的日志,并且在slave庫中應用日志,保證主從資料庫同步一緻;

  2)read_only=1隻讀模式,可以限定普通使用者進行資料修改的操作,但不會限定具有super權限的使用者的資料修改操作;在MySQL中設定read_only=1後,普通的應用使用者進行insert、update、delete等會産生資料變化的DML操作時,都會報出資料庫處于隻讀模式不能發生資料變化的錯誤,但具有super權限的使用者,例如在本地或遠端通過root使用者登入到資料庫,還是可以進行資料變化的DML操作;

那麼super使用者怎麼控制讀寫?

      1、為了確定所有使用者,包括具有super權限的使用者也不能進行讀寫操作,就需要執行給所有的表加讀鎖的指令 “flush tables with read lock;”這樣使用具有super權限的使用者登入資料庫,想要發生資料變化的操作時,也會提示表被鎖定不能修改的報錯。

        1)這樣通過 設定“read_only=1”和“flush tables with read lock;”兩條指令,就可以確定資料庫處于隻讀模式,不會發生任何資料改變。

        2)但同時由于加表鎖的指令對資料庫表限定非常嚴格,如果在slave從庫上執行這個指令後,slave庫可以從master讀取binlog日志,但不能夠應用日志,slave庫不能發生資料改變,當然也不能夠實作主從同步了,這時如果使用 “unlock tables;”解除全局的表讀鎖,slave就會應用從master讀取到的binlog日志,繼續保證主從庫資料庫一緻同步。

       2、為了保證主從同步可以一直進行,在slave庫上要保證具有super權限的root等使用者隻能在本地登入,不會發生資料變化,其他遠端連接配接的應用使用者隻按需配置設定為select,insert,update,delete等權限,保證沒有super權限,則隻需要将salve設定“read_only=1”模式,即可保證主從同步,又可以實作從庫隻讀。

       3、設定“read_only=1”隻讀模式開啟的解鎖指令為設定“read_only=0”;設定全局鎖“flush tables with read lock;”,對應的解鎖模式指令為:“unlock tables;”.

       4、當然設定了read_only=1後,所有的select查詢操作都是可以正常進行的。

收回權限

1、檢視權限

mysql>  select host,user,authentication_string,plugin from mysql.user;

select host,user,authentication_string,plugin,grant_priv,super_priv from mysql.user;

2、收回權限

mysql> revoke super on *.* from  user@'192.168.%.%';

mysql> show grants for user@'192.168.%.%';

繼續閱讀