Replicación maestro-esclavo de MySQL (un maestro y un esclavo)

Replicación maestro-esclavo de MySQL (un maestro y un esclavo)

¿Qué es la replicación maestro-esclavo?

La replicación maestro-esclavo de MySQL significa que los datos se pueden copiar desde el nodo maestro de un servidor de base de datos MySQL a uno o más nodos esclavos. El nodo maestro registra todas las operaciones de escritura y registra estas operaciones de escritura en el registro binario. El nodo esclavo obtiene y aplica estos registros binarios conectándose al nodo maestro, logrando así la replicación de datos.

MySQL usa replicación asincrónica de forma predeterminada, lo que significa que después de que el nodo maestro ejecuta operaciones de escritura, no espera a que los nodos esclavos apliquen estas operaciones, sino que las devuelve al cliente inmediatamente. El nodo esclavo recibe y aplica de forma asíncrona el registro binario del nodo maestro para mantener la coherencia con los datos del nodo maestro.

El nodo esclavo puede replicar todas las bases de datos en el nodo maestro, o usted puede optar por replicar bases de datos específicas o tablas específicas. Al configurar los parámetros del nodo maestro y del nodo esclavo, puede realizar los ajustes correspondientes.

El principio de replicación maestro-esclavo.

imagen-20230714173923619

El servidor maestro registra los cambios de datos y escribe estos cambios en el registro binario.

El servidor esclavo comprobará periódicamente el registro binario del maestro. Si encuentra un cambio, solicitará al maestro que envíe un evento binario. El maestro iniciará un subproceso de E/S, enviará el evento binario al esclavo y lo guardará. en el registro de retransmisión local del nodo esclavo.

El nodo esclavo iniciará el hilo SQL, leerá el registro binario del registro de retransmisión y lo reproducirá localmente para que los datos del nodo esclavo sean consistentes con los del nodo maestro.

Finalmente, el subproceso de E/S y el subproceso SQL entrarán en suspensión y esperarán la próxima vez que se despierten.

Ventajas de la replicación maestro-esclavo

  • Disponibilidad mejorada: cuando el nodo maestro falla, puede cambiar rápidamente al nodo esclavo para garantizar la disponibilidad continua de la base de datos.

  • Equilibrio de carga: distribuya solicitudes de escritura al nodo maestro y operaciones de lectura a los nodos esclavos para reducir la carga en el nodo maestro y mejorar el rendimiento.

  • Copia de seguridad de datos: los nodos esclavos se pueden utilizar como copias de seguridad del nodo maestro para evitar la pérdida de datos.

Preparación

Prepare dos servidores e instale MySQL por separado.

IP tipo
192.168.200.10 nodo maestro
192.168.200.20 nodo esclavo

Paso 1: modificar el nombre de host

Modifique el nombre de host de 192.168.200.10 a maestro

Modifique el nombre de host de 192.168.200.20 a esclavo

[root@master ~]# hostname -I
192.168.200.10 
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# 

[root@slave ~]# hostname -I
192.168.200.20 
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# bash
[root@slave ~]# 

Paso 2: instalar usando yum

[root@master ~]# yum install -y mariadb-server mariadb
[root@slave ~]# yum install -y mariadb-server mariadb

Paso 4: inicie el servicio mysql y configúrelo para que se inicie automáticamente al arrancar

[root@master ~]# systemctl enable mariadb --now
[root@slave ~]# systemctl enable mariadb --now
# 查看状态
[root@slave ~]# systemctl status mariadb
  
[root@slave ~]# systemctl status mariadb

Paso 5: compruebe si el puerto está expuesto

[root@master ~]# netstat -tlnp |grep 3306
tcp        0      0 0.0.0.0:3306   0.0.0.0:*       LISTEN      15802/mysqld    

[root@slave ~]# netstat -tlnp |grep 3306
tcp        0      0 0.0.0.0:3306       0.0.0.0:*     LISTEN      15991/mysqld   

Paso 6: Inicialice la base de datos y pruebe el inicio de sesión

[root@master ~]# mysql_secure_installation 
[root@slave ~]#  mysql_secure_installation 

[root@master ~]# mysql -uroot -p000000
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
# root 用户授予所有数据库的所有权限,并设置密码为 '000000'
MariaDB [(none)]> exit;

[root@slave ~]# mysql -uroot -p000000
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
MariaDB [(none)]> exit;

Paso 7: El firewall libera el puerto 3306

[root@master ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload
success
success

[root@slave ~]#  firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload
success
success

Conectarse en SQLyog

imagen-20230714182151902

imagen-20230714182158683

Configurar la base de datos principal Master

Modificar el archivo de configuración de la base de datos MySQL.

[root@master ~]# vim /etc/my.cnf
[mysqld]
# 添加如下两行信息
server-id=10
log_bin

Reiniciar el servicio mysql

[root@master ~]# systemctl restart mariadb

Crea una cuenta para copiar y autorizarla

Autorizar nodos esclavos para la replicación maestro-esclavo. Después de ejecutar este comando, al usuario del nodo esclavo csqse le otorgarán permisos de replicación y podrá usar la contraseña 000000para conectarse al nodo maestro para la replicación.

MariaDB [(none)]> grant replication slave on *.* to 'csq'@'192.168.200.%' identified by '000000';

iniciar sesión mysql

Mostrar una lista de archivos de registro binarios en el nodo maestro

记住下面的Log_name 和File_size,配置从数据库要用

MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| mariadb-bin.000001 |       398 |
+--------------------+-----------+
# Log_name 列显示二进制日志文件的名称
# File_size 列显示二进制日志文件的大小

Configurar base de datos esclava Esclava

Modificar el archivo de configuración de la base de datos mysql

[root@slave ~]# vim /etc/my.cnf
[mysqld]
# 添加如下信息
server-id=20

Reiniciar el servicio mysql

[root@slave ~]# systemctl restart mariadb

iniciar sesión mysql

Configurar información para conectarse a la base de datos principal

# 因为配置主数据库的信息参数有很多当你忘记的时候可以查看如下命令
mysql> help change master to;

imagen-20230714190102613

Podemos copiar y modificar ligeramente.

这里要设置刚刚创建的用户账号信息,以及主数据库的IP

MariaDB [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='192.168.200.10',
    ->   MASTER_USER='csq',
    ->   MASTER_PASSWORD='000000',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mariadb-bin.000001',
    ->   MASTER_LOG_POS=398;
# MASTER_LOG_FILE 和  MASTER_LOG_POS 
# 这两个参数就是指定主数据库的二进制日志文件名称和位置
# 从节点可以确定从哪个位置开始复制数据

Inicie el proceso de replicación maestro-esclavo del nodo esclavo.

MariaDB [(none)]> start slave;
# 执行该命令后,从节点将开始连接主节点,并开始复制主节点上的二进制日志

Ver el estado de la base de datos esclava

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.200.10
                  Master_User: csq
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000001
          Read_Master_Log_Pos: 398
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 531
        Relay_Master_Log_File: mariadb-bin.000001
             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: 398
              Relay_Log_Space: 827
              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: 10

prueba

La base de datos principal crea una base de datos CSQ.

MariaDB [(none)]> create database CSQ;

Ver desde la base de datos

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| CSQ                |
| mysql              |
| performance_schema |
+--------------------+

vista SQLyog

imagen-20230714191624035

imagen-20230714191646058

Terminado

Supongo que te gusta

Origin blog.csdn.net/qq_52089863/article/details/131730574
Recomendado
Clasificación