Maison >base de données >tutoriel mysql >Tutoriel pour vous apprendre à configurer facilement un environnement de réplication maître-esclave traditionnel sur Alibaba Cloud et Tencent Cloud

Tutoriel pour vous apprendre à configurer facilement un environnement de réplication maître-esclave traditionnel sur Alibaba Cloud et Tencent Cloud

巴扎黑
巴扎黑original
2017-07-17 09:38:502153parcourir

L'environnement de réplication maître-esclave MySQL peut être considéré comme le fondement de toute haute disponibilité. Son principe est également relativement simple. Comprenons d'abord le principe de la réplication maître-esclave :

Tutoriel pour vous apprendre à configurer facilement un environnement de réplication maître-esclave traditionnel sur Alibaba Cloud et Tencent Cloud
Bien qu'il y ait 7 étapes dans l'image, il peut être simplifié pour aider la mémoire et la compréhension :

  1. Effectuer des opérations de modification et d'écriture sur Master

  2. MySQL écrit les données modifiées dans

  3. Esclave Lancez un thread IO pour extraire le nouveau journal binaire sur le maître dans le journal du relais local

  4. Rejouez le journal du relais afin que les modifications et les nouvelles opérations sur le maître puissent être reflétées sur l'esclave ; Exécutez-le à nouveau sur la machine ;

  5. L'esclave écrira également l'opération dans le journal binaire local selon le fonctionnement normal.

Environnement matériel

J'ai une machine Diaosi d'Alibaba Cloud et de Tencent Cloud, je l'utilise donc pour les tests Pour protéger la confidentialité, j'ai remplacé l'adresse IP. , mais cela n'affecte pas les opérations.

主机 ip 端口 版本 主从
阿里云 192.168.1.100 3306 MySQL5.7.14 Master
腾讯云 192.168.1.200 3306 MySQL5.7.18 Slave

Définir sur Master

Activer les paramètres binlog server-id

Modifier sous l'option mysqld dans /etc/my.cnf, puis redémarrer

[mysqld]
log-bin=mysql-bin
server-id=1003306
/etc/init.d/mysql restart

Créez un compte dédié pour la réplication

mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slave;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.200';

Exportez les données et synchronisez-les avec Tencent Cloud

Utilisez mysqldump pour exporter toutes les données de la base de données, et le journal binaire actuel sera être enregistré dans le fichier de sauvegarde Fichier et position.

#防止DDL、写操作
mysql>FLUSH TABLES WITH READ LOCK;
shell>mysqldump -uroot -p --single-transaction --master-data=2 -A>back.sql

Vous pouvez également le visualiser via les méthodes suivantes :

root@localhost [mysql]>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000045 |      939 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Déverrouiller la table

mysql> UNLOCK TABLES;

Transférer des fichiers à distance vers le passé

Si le fichier de données est biaisé S'il est volumineux ou contient beaucoup de données, vous pouvez utiliser xtrabackup de percona pour le sauvegarder et le compresser, puis le transférer vers celui-ci.

rsync back.sql root@192.168.1.200:/root

Opération esclave

Activer les paramètres binlog server-id

Modifier sous l'option mysqld dans /etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=2003306

Redémarrez le service MySQL

Importer des données

shell>mysqldump -uroot -p --databases t1 <back.sql><h3>Pointer vers Master</h3>
<p>Le <em>MASTER_LOG_FILE</em> et le <em>MASTER_LOG_POS</em> viennent juste de commencer<em>afficher le statut principal</em> valeur, bien sûr, vous pouvez également utiliser <em>plus</em> pour afficher l'emplacement qui doit être spécifié. </p>
<pre class="brush:php;toolbar:false">CHANGE MASTER TO MASTER_HOST='192.168.1.200',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='slave',MASTER_LOG_FILE='mysql-bin.000045',MASTER_LOG_POS=939;

Le MASTER_LOG_FILE et le MASTER_LOG_POS voici les valeurs de afficher le statut de maître tout à l'heure. Bien sûr, vous pouvez également. utilisez plusVoir où cela doit être spécifié.

shell>more back.sql
-- MySQL dump 10.13  Distrib 5.7.14, for linux-glibc2.5 (x86_64)
--
-- Host: localhost    Database: 
-- ------------------------------------------------------
-- Server version   5.7.14-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Position to start replication or point-in-time recovery from
--

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000045', MASTER_LOG_POS=939;

Démarrer l'esclave

mysql>start slave;
mysql>show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.200
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000045
          Read_Master_Log_Pos: 939
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000045
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 939
              Relay_Log_Space: 154
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 23306
                  Master_UUID: 9a13d860-b55b-11e6-bf33-00163e054164
             Master_Info_File: /data/mysql/mysql3306/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 3feb36dc-ef7e-11e6-a535-52540043f116:1-337886
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

Si vous voyez un double OUI pour Slave_IO_Running et Slave_SQL_Running, il n'y a généralement aucun problème.

Vérification

Vous pouvez maintenant créer une nouvelle base de données, créer une nouvelle table de données, insérer une sortie, etc. sur le maître pour vérifier si le maître-esclave est valide. Vous pouvez faire ce que vous voulez avec cette étape !

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn