Maison  >  Article  >  base de données  >  Introduction à la méthode de sauvegarde bidirectionnelle MySQL (avec code)

Introduction à la méthode de sauvegarde bidirectionnelle MySQL (avec code)

不言
不言avant
2019-04-11 11:52:333022parcourir

Cet article vous présente la méthode de sauvegarde bidirectionnelle MySQL (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

La sauvegarde bidirectionnelle MySQL est également appelée sauvegarde maître-maître, c'est-à-dire que les deux services MySQL sont maîtres et que l'un d'eux est l'esclave de l'autre service.

Préparer

Serveur

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

Remarque :

Essayez de garder la version du serveur MySQL de sauvegarde aussi cohérente que possible. Différentes versions peuvent avoir des formats de journaux binaires incompatibles.

Opération spécifique

Attention

Faites attention à la cohérence des données de part et d'autre lors de l'opération ! ! !

configuration 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

configuration 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

Créer un utilisateur de sauvegarde

masterA et masterB doivent tous deux créer des utilisateurs de sauvegarde :

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

Remarque :

  1. MySQL sous Linux a fermé l'autorisation root@% pour le grant_priv utilisateur, donc s'il s'agit d'une connexion à distance, un échec d'autorisation se produira
  2. Le compte utilisateur et le mot de passe de sauvegarde ici n'ont pas besoin d'être cohérents. Pour simplifier l'opération, utilisez le même compte et le même mot de passe ici
  3. <.>
Redémarrer le serveur

Redémarrer le serveur

Activer la sauvegarde

masterA

Afficher l'état de masterB

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

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;
Voir les résultats

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

Répéter l'opération de masterA en sens inverse

Test

Insérer les données dans masterA et masterB respectivement, et vérifiez si l'autre serveur apparaît à temps comme prévu. Données

Problème

L'esclave MySQL n'a pas pu ouvrir le journal du relais

Cela devrait être un problème avec le relais log. Vous pouvez essayer les opérations suivantes

stop slave;
flush logs;
start slave;
J'ai obtenu une erreur fatale 1236 du maître lors de la lecture des données du journal binaire

Lors de l'extraction du journal de la bibliothèque principale, il s'avère que le premier Le fichier dans le fichier mysql_bin.index de la bibliothèque principale n'existe pas.

# 进行如下操作重置
# 如果二进制日志或中继日志有其他作用,请勿进行如下操作
reset master;
reset slave;
flush logs;
.

Utilisez .
pour les opérations d'insertion, de mise à jour et de suppression, aucune sauvegarde ne sera effectuée (c'est Immense fosse) ! ! ! [Recommandations associées :

Tutoriel MySQL]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer