Directorio de artículos
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.
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
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 csq
se le otorgarán permisos de replicación y podrá usar la contraseña 000000
para 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;
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
Terminado