MySQL 雙向備份
MySQL 雙向備份
也被稱為主主備份 ,即兩個 MySQL 服務都是 Master,其中任意一個服務又是另一個服務的 Slave。
準備
伺服器
MySQL伺服器 | IP地址 |
---|---|
masterA | 192.168.1.201 |
masterB | 192.168.1.202 |
具體操作
注意
操作過程中注意兩邊資料的一致!!!
masterA 配置
my.cnf
[mysqld] # 伺服器唯一標識 server-id=1 # 二進位制日誌檔名 log-bin=mysql-bin # 需要備份的資料庫,多個數據庫用 , 分隔 binlog-do-db=piumnl # 需要複製的資料庫,多個數據庫用 , 分隔 replicate-do-db=piumnl # 中繼日誌檔名 relay_log=mysqld-relay-bin # 互為主從需要加入這一行 log-slave-updates=ON # 禁用符號連結,防止安全風險,可不加 symbolic-links=0 # 可不加 # resolve - [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0 master-info-repository=table relay-log-info-repository=table relay-log-recovery=1 # 可不加 # 禁用 dns 解析,會使授權時使用的域名無效 skip-host-cache skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
masterB 配置
my.cnf
# 不再解釋各個配置項 [mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=piumnl replicate-do-db=piumnl relay_log=mysql-relay-bin log-slave-updates=ON symbolic-links=0 # resolve - [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0 master-info-repository=table relay-log-info-repository=table relay-log-recovery=1 skip-host-cache skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
建立備份使用者
masterA & masterB 都要建立備份使用者:
create user 'rep'@'%' identified by 'rep';# 建立一個賬戶 grant replication slave on *.* to 'rep'@'%';# 授予該賬戶對任意資料庫任意表的主從備份許可權
備註:
- Linux 下 MySQL 對 root@% 關閉了 grant_priv 許可權
- 此處備份使用者帳號和密碼可不一致,此處為了簡化操作使用一樣的帳號和密碼
重啟伺服器
重啟伺服器
開啟備份
masterA
-
檢視 masterB 狀態
show master status\G; # 此處需要關注 File 和 Position 值
-
開啟備份
stop slave; # master_log_file 就是第一步操作的 File 值 # master_log_pos 就是第一步操作的 Position 值 change master to master_host=<master_hostname>, master_user=<rep_username>, master_password=<rep_password>, master_log_file='mysql-log.000003', master_log_pos=154; start slave;
-
檢視結果
show slave status\G; # 檢視最重要的兩項,兩個都必須為 Yes ,有一個為 No 都要去檢視錯誤日誌檔案,看看什麼地方存在問題 # Slave_IO_Running: Yes # Slave_SQL_Running: Yes
masterB
- 反向重複 masterA 的操作
測試
分別在 masterA 和 masterB 中插入資料,並檢視另一臺伺服器是否及時出現預期的資料
注:
-
使用
<database>.<table>
方式進行插入、更新和刪除操作,將不會備份。 -
如果操作弄亂了 master 與 slave 的日誌,可使用如下操作進行重置。
reset master; # 重置 master 的配置,包括二進位制日誌 reset slave; # 重置 slave 的配置