Heim  >  Artikel  >  Datenbank  >  Einführung in die bidirektionale Sicherungsmethode von MySQL (mit Code)

Einführung in die bidirektionale Sicherungsmethode von MySQL (mit Code)

不言
不言nach vorne
2019-04-11 11:52:333048Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die bidirektionale Backup-Methode von MySQL (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.

Die bidirektionale MySQL-Sicherung wird auch Master-Master-Sicherung genannt, d. h. beide MySQL-Dienste sind Master und einer von ihnen ist der Slave des anderen Dienstes.

Vorbereiten

Server

MySQL服务器 版本 IP地址
masterA 5.6.41 192.168.1.201
masterB 5.6.41 192.168.1.202

Hinweis:

Versuchen Sie, die Backup-MySQL-Serverversion so konsistent wie möglich zu halten. Verschiedene Versionen können inkompatible Binärprotokollformate haben.

Spezifischer Vorgang

Achtung

Achten Sie während des Vorgangs auf die Konsistenz der Daten auf beiden Seiten! ! !

MasterA-Konfiguration

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-Konfiguration

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

Sicherungsbenutzer erstellen

MasterA und MasterB müssen beide einen Backup-Benutzer erstellen:

create user 'rep'@'%' identified by 'rep';    # 创建一个账户
grant replication slave on *.* to 'rep'@'%';  # 授予该账户对任意数据库任意表的主从备份权限

Hinweis:

  1. MySQL unter Linux hat die root@%-Berechtigung für den grant_priv-Benutzer geschlossen, daher wird dies auch der Fall sein erscheint, wenn Sie sich aus der Ferne anmelden.
  2. Das Backup-Benutzerkonto und das Passwort sind hier möglicherweise inkonsistent. Um den Vorgang zu vereinfachen, verwenden Sie hier dasselbe Konto und Passwort.

Starten Sie den Server neu

Starten Sie den Server neu

Sicherung aktivieren

MasterA

MasterB-Status anzeigen

show master status\G;
# 此处需要关注 File 和 Position 值

Sicherung aktivieren

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;

Ergebnisse anzeigen

show slave status\G;
# 查看最重要的两项,两个都必须为 Yes ,有一个为 No 都要去查看错误日志文件,看看什么地方存在问题
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

masterB

Wiederholen Sie den Vorgang von masterA in umgekehrter Reihenfolge

Testen

Fügen Sie Daten in masterA bzw. masterB ein und prüfen Sie, ob die erwarteten Daten auf der anderen Seite angezeigt werden Server rechtzeitig

Problem

MySQL-Slave konnte das Relay-Protokoll nicht öffnen

Dies sollte ein Problem mit dem Relay-Protokoll sein. Sie können die folgenden Vorgänge ausprobieren

rrree

Schwerwiegender Fehler 1236 vom Master beim Lesen von Daten aus dem Binärprotokoll erhalten

Beim Abrufen von Protokollen aus der Hauptbibliothek wurde festgestellt, dass die erste Datei in der Datei mysql_bin.index der Hauptbibliothek nicht vorhanden war.

stop slave;
flush logs;
start slave;

.

Verwenden Sie .

für Einfüge-, Aktualisierungs- und Löschvorgänge, es wird keine Sicherung durchgeführt (Dies ist eine große Aufgabe Grube )! ! ! [Verwandte Empfehlungen: MySQL-Tutorial]

Das obige ist der detaillierte Inhalt vonEinführung in die bidirektionale Sicherungsmethode von MySQL (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen