也被稱爲 主主備份 ,即兩個 MySQL 服務都是 Master,其中任意一個服務又是另外一個服務的 Slave。
服務器html
MySQL服務器 | 版本 | IP地址 |
---|---|---|
masterA | 5.6.41 | 192.168.1.201 |
masterB | 5.6.41 | 192.168.1.202 |
注:mysql
操做過程當中注意兩邊數據的一致!!!sql
my.cnf數據庫
[mysqld] # 服務器惟一標識 server-id=1 # 二進制日誌文件名 log-bin=mysql-bin # 須要備份的數據庫,多個數據庫用 , 分隔 binlog-do-db=piumnl # 須要複製的數據庫,多個數據庫用 , 分隔 replicate-do-db=piumnl # 中繼日誌文件名 relay_log=mysqld-relay-bin # 手動啓動同步服務,避免忽然宕機致使的數據日誌不一樣步 skip-slave-start=ON # 互爲主從須要加入這一行 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
my.cnf安全
# 再也不解釋各個配置項 [mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=piumnl replicate-do-db=piumnl relay_log=mysql-relay-bin skip-slave-start=ON 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'@'%'; # 授予該帳戶對任意數據庫任意表的主從備份權限
備註:app
root@%
用戶關閉了 grant_priv
權限,因此若是是遠程登陸會出現受權失敗的狀況重啓服務器ide
masterA測試
查看 masterB 狀態this
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_port=<master_port>, 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 和 masterB 中插入數據,並查看另外一臺服務器是否及時出現預期的數據
MySQL Slave Failed to Open the Relay Log
這應該是中繼日誌出現問題,可嘗試以下操做
stop slave; flush logs; start slave;
Got fatal error 1236 from master when reading data from binary log
從主庫中拉取日誌時,發現主庫的 mysql_bin.index 文件中的第一個文件不存在。
# 進行以下操做重置 # 若是二進制日誌或中繼日誌有其餘做用,請勿進行以下操做 reset master; reset slave; flush logs;
<database>.<table>
使用 <database>.<table>
進行插入、更新和刪除操做,將不會進行備份( 這是巨坑 )!!!
參考文獻
若有錯誤或問題,歡迎提出來一塊兒交流討論