首頁  >  文章  >  資料庫  >  MySQL雙向備份的方法介紹(附程式碼)

MySQL雙向備份的方法介紹(附程式碼)

不言
不言轉載
2019-04-11 11:52:333031瀏覽

這篇文章帶給大家的內容是關於MySQL雙向備份的方法介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

MySQL 雙向備份也稱為 主主備份 ,也就是兩個 MySQL 服務都是 Master,其中任何一個服務又是另一個服務的 Slave。

準備

伺服器

##IP位址masterA5.6.41192.168.1.201masterB5.6.41192.168.1.202
MySQL伺服器 版本
附註:

備份的MySQL 伺服器版本盡量保持一致,不同的版本可能二進位日誌格式不相容。

具體操作

注意

操作過程中註意兩邊資料的一致性! ! !

masterA 設定

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
masterB 設定

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'@'%';  # 授予该账户对任意数据库任意表的主从备份权限
備註:

    #Linux 下MySQL 對
  1. root@% 使用者關閉了grant_priv 權限,所以如果是遠端登入會出現授權失敗的情況
  2. 此處備份使用者帳號和密碼可不一致,此處為了簡化作業使用一樣的帳號和密碼
#重啟伺服器

重啟伺服器

開啟備份

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_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 的操作

測試

#分別在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;
.

使用 .
 進行插入、更新與刪除操作,將不會備份( 這是巨坑)! ! ! 【相關推薦:

MySQL教學

#

以上是MySQL雙向備份的方法介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除