?
本文檔使用 php中文網手冊 發(fā)布
當配置好MySQL主從復制后,由于數據復制是單向的,所有對數據庫的更新操作都必須在主服務器上進行,只有在主庫上更新,才能避免用戶對主服務器上數據庫內容的更新與對從服務器上數據庫內容的更新一致,而不會發(fā)生沖突。
方案1、2對比推薦使用方案1,生產環(huán)境中推薦使用忽略授權表方式授權
數據庫 | 用戶名 | 密碼 | IP地址 | 端口 | 權限 |
---|---|---|---|---|---|
主庫 | web | passwd | 192.168.0.12 | 3306 | select insert delete update |
從庫 | web | passwd | 192.168.0.13 | 3306 | select |
說明:
從庫的用戶名和密碼:主庫的web用戶同步到從庫,然后通過revoke
權限回收將insert
,delete
,update
權限回收。
主庫用戶授權示例:
grant select,insert,update,delete on dbName.* to 'userName'@'localhost' identified by 'password';
提示:特殊的業(yè)務可能權限會比較多,如果業(yè)務安全性要求不高,也可以給與
all privileges
權限。
從庫用戶授權示例:
grant select,insert,update,delete on dbName.* to 'userName'@'localhost' identified by 'password';
revoke insert,update,delete on on dbName.* from 'userName'@'localhost';
當然也可以不回收權限,通過配置文件在[mysqld]
區(qū)域設置read-only
或者在mysql啟動時指定read-only
參數。修改完記得重啟服務
另外:read-only
參數可以讓slave服務器只允許來自slave服務器線程或者具有super權限(即對用戶授權時不能指定有super或all privileges
權限)的用戶更新。
但可以確保slave服務器不接受來自普通用戶的更新,slave服務器啟動選項增加--read-only
也是同樣的功能。
數據庫 | 用戶名 | 密碼 | IP地址 | 端口 | 權限 |
---|---|---|---|---|---|
主庫 | web_w | passwd | 192.168.0.12 | 3306 | select insert delete update |
從庫 | web_r | passwd | 192.168.0.13 | 3306 | select |
說明:
在主庫授權web_w賬號、從庫授權web_r賬號對應權限權限;
對于開發(fā)而言,使用多套用戶名密碼不專業(yè)。
在生產環(huán)境中,一般會采取忽略授權表方式同步,然后對從服務器(slave
)上的用戶僅授權select
讀權限。不同步mysql
庫,這樣的話我們就保證了主庫和從庫相同的用戶可以授權不同的權限。在主從庫分別進行如下授權:
數據庫 | 用戶名 | 密碼 | IP地址 | 端口 | 權限 |
---|---|---|---|---|---|
主庫 | web | passwd | 192.168.0.12 | 3306 | select insert delete update |
從庫 | web | passwd | 192.168.0.13 | 3306 | select |
忽略mysql庫和information_schema庫的主從同步參數
缺陷:從庫切換主庫時,連接用戶權限問題??梢员A粢粋€從庫專門準備接替主。
[mysqld] binlog-do-db=dbName # 要同步的某個庫 replicate-ignore-db=mysql binlog-ignore-db=mysql # 不同步的庫 binlog-ignore-db=information_schema binlog-ignore-db=performance_schema
另外:忽略記錄binlog日志的參數binlog-ignore-db一般用于系統(tǒng)的庫和表。(修改完my.cnf后重啟服務)
master端參數:
--binlog-do-db 二進制日志記錄的數據庫(多個數據庫用
,
分割)
--binlog-ignore-db 二進制日志忽略的數據庫(多個數據庫用,
分割)
slave端參數:
--replication-do-db
設定需要復制的數據庫(多個數據庫用,
分割)--replication-ignore-db
設定忽略復制的數據庫(多個數據庫用,
分割)--replocation-do-table
設定需要復制的表(多個表用,
分割)--replication-ignore-table
設定忽略復制的表(多個表用,
分割)--replication-wild-do-table
和--replocation-do-table
功能一樣,但是可以加通配符。--replication-wild-ignore-table
和--replication-ignore-table
功能一樣,但是可以加通配符。