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
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 :
Bien qu'il y ait 7 étapes dans l'image, il peut être simplifié pour aider la mémoire et la compréhension :
Effectuer des opérations de modification et d'écriture sur Master
MySQL écrit les données modifiées dans
Esclave Lancez un thread IO pour extraire le nouveau journal binaire sur le maître dans le journal du relais local
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 ;
L'esclave écrira également l'opération dans le journal binaire local selon le fonctionnement normal.
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 |
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
mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slave; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.200';
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;
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
Modifier sous l'option mysqld dans /etc/my.cnf
[mysqld] log-bin=mysql-bin server-id=2003306
Redémarrez le service MySQL
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;
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.
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!