Maison > Article > base de données > Comment configurer le double maître Mysql
Caractéristiques : Dans une configuration à double maître, deux serveurs MySQL font office de nœuds maître-esclave l'un pour l'autre. Le nœud A et le nœud B sont les nœuds maîtres l'un de l'autre.
Ignorez les étapes pour installer mysql
# 设置server-id,两节点必须不一样 server-id = 100 # 开启bin_log,模式为ROW,允许最大日志为1G log_bin = mysql-bin binlog_format = ROW max_binlog_size = 1024M # mysql5.7的版本不需要配置log-slave-updates=1 # log-slave-updates = 1 # 实现数据库宕机恢复后,自动同步缺少的数据 relay_log = mysql-relay-bin # 设置自增ID初始值为2,每次自增量为2。即都是偶数2,4,6,8,... auto_increment_offset = 2 auto_increment_increment = 2 # 开启gtid gtid_mode = ON enforce_gtid_consistency = 1 # 忽略不需要同步的schema replicate-ignore-db = mysql replicate-ignore-db = information_schema replicate-ignore-db = performance_schema replicate-ignore-db = sys
Seules les configurations différentes du nœud A sont répertoriées
# 设置server-id,两节点必须不一样 server-id = 200 # 设置自增ID初始值为1,每次自增量为2。即都是奇数1,3,5,7,... auto_increment_offset = 1 auto_increment_increment = 2
Le nœud A est le maître et le nœud B est l'esclave.
(1) Connectez-vous au nœud A et créez un compte pour l'esclave (nœud B).
# 在节点A上创建账号repl_user,允许从任意IP访问,密码为slave@100, grant replication slave on *.* to 'repl_user'@'%' identified by 'slave@100'; flush privileges;
(2) Afficher les informations principales du nœud A
Comme le montre la figure ci-dessous, le journal bin_log du nœud A est mysql-bin.000001 et l'emplacement est 154
# 清空master信息。初次配置可以使用,若已运行了同步,切记不要使用! reset master; # 查看master信息 show master status; +------------------+----------+--------------+------------------+---------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+---------------------------------------------+ | mysql-bin.000001 | 154 | | | c2cf218e-2317-11ec-a36f-5cf9dd4fd6a8:1-5 | +------------------+----------+--------------+------------------+---------------------------------------------+
(3) Connectez-vous au nœud B et définissez le maître du nœud B comme nœud A
# 停止节点B上的slave stop slave; # 将节点B的master设为节点A,以下的配置信息均表示节点A # MASTER_LOG_FILE和MASTER_LOG_POS,是在第(2)步中查看节点A的master信息 CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3307, MASTER_USER='repl_user', MASTER_PASSWORD='slave@100', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; # 开启节点B上的slave start slave;
(4) Confirmez si l'esclave du nœud B s'exécute avec succès. Lorsque Slave_IO_Running et Slave_SQL_Running sont tous deux OUI dans le résultat renvoyé, cela indique un succès. S'il s'agit de NON ou de connexion, veuillez vérifier le fichier journal se terminant par .err dans le répertoire de données MySQL pour trouver le journal de niveau [ERREUR]. Habituellement, les problèmes de configuration initiale sont principalement causés par des problèmes de configuration de my.ini ou de création de compte de synchronisation.
# 在节点B中查看slave状态 show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: repl_user Master_Port: 3307 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 2207 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 1143 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ......
(5) Si la configuration de l'esclave est anormale, vous pouvez utiliser l'instruction suivante pour la réinitialiser
reset slave all;
À ce stade, le mode maître-esclave du nœud A et du nœud B. a été configuré avec succès, c'est-à-dire que le nœud A est le maître du nœud B. Ensuite, répétez l'opération de la troisième étape, mais inversez les opérations des nœuds A et B, c'est-à-dire créez un compte de synchronisation sur le nœud B, affichez les informations du maître et définissez le nœud B comme maître sur le nœud A. Une fois la configuration terminée, vérifiez également l'état d'esclave du nœud A pour voir si Slave_IO_Running et Slave_SQL_Running sont tous deux OUI.
Ajoutez ou supprimez un schéma, une table ou des données dans le nœud A et vérifiez s'il y a une synchronisation correcte dans le nœud B.
Testez si les données de clé primaire à incrémentation automatique ajoutées sur le nœud A et le nœud B correspondent au fichier de configuration. Un est un nombre impair et un est un nombre pair. Lors de l’ajout ou de la suppression de données, y aura-t-il un conflit de clé primaire ?
Obtenu en modifiant my.ini
(1) Contrôle côté maître
Binlog-do-db Base de données de journalisation Binlog (pour plusieurs bases de données, séparées)
Binlog -ignore -db Ignorer la base de données dans le journal binlog (pour plusieurs bases de données, séparées)
Seules les tables enregistrées dans le binlog peuvent être synchronisées avec la base de données esclave
# binlog中记录这两个表 binlog-do-db=db_1,db_2 # binlog中不记录这两个表 binlog-ignore-db=db_3,db_4
(2) Contrôle côté esclave
6. Un compte avec plusieurs IP Lorsqu'un serveur MySQL sert de nœud maître et que N serveurs servent de nœuds esclaves, il sera très fastidieux d'ajouter un compte à chaque nœud esclave. Vous pouvez créer un compte dans le nœud maître et associer plusieurs adresses IP à ce compte pour réduire le nombre de comptes à ajouter. La méthode spécifique consiste à exécuter la déclaration de création de compte plusieurs fois, avec une IP différente à chaque fois.répliquer-do- db Définit la base de données à répliquer
replicate-ignore-d ’'' ‐‐‐‐‐‐‐‐‐‐‐'''' -do -table a la même fonction que la réplication -do-table, et des caractères génériques peuvent être ajoutés
; replique-wild-ignore-table a la même fonction que replication-ignore-table, et des caractères génériques peuvent être ajoutés
Remarque : la configuration ignorée est toujours dans le journal de relais du bibliothèque esclave Il y a des informations, mais la synchronisation n'est pas effectuée.# 执行同步的库 replicate-do-db=db_1 replicate-do-db=db_2 # 忽略同步的库 replicate-ignore-db=db_3 # 执行同步的表 replicate-do-table=db_1.table_a replicate-do-table=db_2.table_b # 忽略同步的表 replicate-ignore-table=db_2.table_c # 只复制哪个库的哪个表 replicate-wild-do-table=db_4.% # 忽略哪个库的哪个表 replicate-wild-ignore-table=mysql.%
# 创建一个账号名,为此账号设置多个ip grant replication slave on *.* to 'repl_user'@'192.168.5.10' identified by 'slave@100'; grant replication slave on *.* to 'repl_user'@'192.168.5.20' identified by 'slave@100'; FLUSH PRIVILEGES
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!