Configuración maestro-esclavo Mysql para CentOS y Ubantu

1. Introducción a la replicación maestro-esclavo MySql

La replicación maestro-esclavo (también conocida como replicación AB) permite que los datos de un servidor de base de datos MySQL (servidor maestro) se repliquen en uno o más servidores de base de datos MySQL (servidores esclavos). La replicación es asíncrona y los esclavos no necesitan estar permanentemente conectados para recibir actualizaciones del maestro. Dependiendo de la configuración, puede copiar todas las bases de datos en una base de datos, bases de datos seleccionadas o incluso tablas seleccionadas.

MySQL中复制的优点包括:

  1. Solución escalable: distribuye la carga entre varios esclavos para mejorar el rendimiento. En este entorno, todas las escrituras y actualizaciones deben ocurrir en el servidor maestro. Sin embargo, las lecturas pueden ocurrir en uno o más dispositivos esclavos. Este modelo puede mejorar el rendimiento de escritura (ya que el maestro está dedicado a las actualizaciones) al tiempo que mejora significativamente la velocidad de lectura para un número creciente de esclavos.
  2. Seguridad de datos: debido a que los datos se replican en los esclavos y los esclavos pueden pausar el proceso de replicación, es posible ejecutar servicios de copia de seguridad en los esclavos sin dañar los datos maestros correspondientes.
  3. Análisis: se pueden crear datos en tiempo real en el servidor maestro, mientras que el análisis de información se puede realizar en el servidor esclavo sin afectar el rendimiento del servidor maestro.
  4. Distribución remota de datos: puede usar la replicación para crear copias locales de datos para sitios remotos sin acceso permanente al servidor maestro.

Replication 的原理:当主库写入文件的时候,从库读取写入文件的SQL,到从库再次执行一次

La premisa es que el servidor de la base de datos con la función de servidor maestro debe habilitar el registro binario . Dado que el formato bin-log (registro binario) puede ser diferente entre las diferentes versiones de MySQL, se recomienda que la versión MySQL del Maestro ( primario) y la versión del Esclavo (slave) sea lo más parecida posible, posiblemente igual o inferior. MySQL maestro-esclavo se basa en binlog, y binlog debe estar habilitado en el host para ser maestro-esclavo.

主从过程步骤

  1. Cualquier modificación en el servidor principal se guardará en el registro binario Registro binario a través de su propio hilo de E/S (I/O thread).
  2. También inicie un subproceso de E/S desde el servidor, conéctese al servidor maestro para solicitar la lectura del registro binario a través del nombre de usuario y la contraseña configurados, y luego escriba el registro binario de lectura en un registro Realy local (registro de retransmisión).
  3. Abra un hilo SQL desde el servidor al mismo tiempo para verificar el registro de Realy (este archivo también es binario) con regularidad. Si hay una actualización, ejecute inmediatamente el contenido actualizado en la base de datos local. Cada esclavo recibe una copia de todo el contenido del registro binario del maestro.
  4. El dispositivo del servidor esclavo es responsable de decidir qué declaraciones en el registro binario deben ejecutarse. A menos que se especifique lo contrario, todos los eventos del registro binario maestro-esclavo se ejecutan en el esclavo. Si lo desea, puede configurar un servidor esclavo para que solo procese eventos para algunas bases de datos o tablas específicas.

inserte la descripción de la imagen aquí

MySQL主从作用

  1. Recuperación de desastres en tiempo real para conmutación por error
  2. Separación de lectura y escritura, brindando servicios de consulta.
  3. Copia de seguridad para evitar el impacto comercial

inserte la descripción de la imagen aquí

2. Operación de replicación maestro-esclavo

环境准备

Role Sistema operativo dirección IP versión mysql
Anfitrión (maestro) CentOS 120.118.55.220 mysql 5.7.26
Esclavo Gente 130.211.18.183 mysql 5.7.26

Nota: Centos es mysqld y Ubuntu es el servicio mysql

2.1, operación de host maestro

1、Master节点配置 /etc/my.cnf (master节点执行)

Aviso:

  1. El nodo maestro y el nodo esclavo deben configurarse con una identificación única, otras configuraciones son opcionales
  2. centos es vim /etc/my.cnf
  3. ubantu es vim /etc/mysql/mysql.conf.d/mysqld.cnf
> vim /etc/my.cnf
# 找到[mysqld]添加下面内容
[mysqld]
## 同一局域网内注意要server-id一定要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
## 复制过滤:过滤掉不需要的数据库,如过滤掉mysql数据库
binlog-ignore-db=mysql
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed

# 重启mysql服务,一般配置文件写完后,都需要重启该服务才生效
systemctl restart mysqld

2、重启mysql服务,使新配置生效

>  systemctl restart mysqld

3、mysql查看是否开启二进制日志文件
El valor predeterminado es APAGADO y no habilitado, solo después de configurar el log_bin de my.cnf, está ENCENDIDO

mysql> show variables like 'log_%';

inserte la descripción de la imagen aquí

4、在master服务器授权slave服务器的同步权限(master节点执行)

mysql > mysql -uroot -p密码
# 授予slave服务器可以同步master服务
mysql > grant replication slave, replication client on *.* to 'root'@'slave服务的ip' identified by '从机访问主机的密码';
mysql > flush privileges;
# 查看MySQL现在有哪些用户及对应的IP权限(可以不执行,只是一个查看)
mysql > select user,host from mysql.user;


#如:
mysql> grant replication slave, replication client on *.* to 'root'@'130.211.18.183' identified by '3456789';
mysql > flush privileges;
# 'root'     :就是从机(Slave)要访问主机(Master)的用户名;
# '130.211.18.183':就是从机(Slave)的IP地址;
# '3456789'     :就是从机(Slave)访问主机(Master)的密码;是你自己新设置的密码,不是主机的密码。

inserte la descripción de la imagen aquí

若出现 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

  1. Las reglas de contraseña predeterminadas de la base de datos deben llevar letras mayúsculas y minúsculas, símbolos especiales y la longitud de caracteres es superior a 8; de lo contrario, se informará un error.
  2. Por lo tanto, al configurar una contraseña relativamente simple, primero debe modificar los valores globales de los parámetros validate_password_policy y _length.
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

5、查询master服务的binlog文件名和位置(master节点执行)

mysql > show master status;

Nombre del archivo de registro: mysql-bin.000003

Ubicación copiada: 154

2.2, operación de máquina esclava esclava

1、Slave节点配置 vim /etc/mysql/mysql.conf.d/mysqld.cnf

>  vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=102
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

# 重启mysql服务,一般配置文件写完后,都需要重启该服务才生效
systemctl restart mysql

2、重启mysql服务,使新配置生效

>  systemctl restart mysqld

3、slave进行关联master节点

1. Introduzca el nodo esclavo:

mysql > mysql -uroot -p密码

2. Empezar a encuadernar

mysql> change master to master_host='master服务器ip', master_user='root', master_password='master密码', master_port=3306, master_log_file='master二进制日志文件名',master_log_pos=master二进制日志文件Position;

# 如
mysql> change master to master_host='120.118.55.220', master_user='root', master_password='3456789', master_port=3306, master_log_file='mysql-bin.000003',master_log_pos=2897;
anfitrión_maestro Dirección IP del nodo maestro (Master)
usuario_maestro Nombre de usuario autorizado en la base de datos del nodo maestro: root
puerto_maestro El puerto correspondiente a MySQL: 3306
contraseña maestra La contraseña del nodo esclavo autorizado en la base de datos del nodo maestro
master_log_file El archivo detrás del archivo correspondiente cuando se muestra el estado maestro en el nodo maestro
master_log_pos El número después de la Posición correspondiente cuando se muestra el estado maestro en el nodo maestro

4、在slave节点上查看主从同步状态

1. Inicie la replicación maestro-esclavo

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

2. Verifique el estado de sincronización maestro-esclavo del esclavo

mysql> show slave status\G;
# \G是换行查看,不换行查看的话,即没有格式化内容,就比较凌乱。

3. Cuando tanto Slave_IO_Running como Slave_SQL_Running son Sí, significa que el maestro y el esclavo se pueden sincronizar normalmente

inserte la descripción de la imagen aquí

Otros comandos (ejecución de nodo esclavo)

# 停止复制
mysql> stop slave;

5、主从复制测试

1. Ver la base de datos existente en el nodo maestro (Master):

inserte la descripción de la imagen aquí

2. Ver la base de datos existente en el nodo esclavo (Slave):
inserte la descripción de la imagen aquí

3. Creamos la base de datos de Estudiantes en el nodo maestro (Master):

mysql > create database Student charset utf8;
mysql> show databases;

inserte la descripción de la imagen aquí

4. Comprobamos si existe una base de datos de Alumno en el nodo esclavo (Slave):

inserte la descripción de la imagen aquí

5. La prueba está completa. En este momento, los datos que creó en el Estudiante de la biblioteca principal también se verán en la biblioteca esclava.

小总结

  1. Cree bases de datos y tablas bajo el maestro, o modifique y agregue nuevos registros, y los registros eliminados se sincronizarán (ejecutados por el nodo maestro)
  2. Haga clic para ver la información del nodo esclavo (ejecución del nodo esclavo)
  3. Durante la operación de replicación maestro-esclavo, no cree una base de datos u operaciones relacionadas basadas en ella y luego elimínela inmediatamente. Esto hará que cambie la posición de la replicación maestro-esclavo, lo que provocará que la replicación falle. Si ocurre tal problema, consulte la solución de problemas a continuación.
  4. Tenga en cuenta que los datos agregados por el esclavo se basan en el esclavo. El maestro no actualizará los datos insertados por el esclavo. Cuando el maestro agrega datos con una identificación de 2, el esclavo no actualizará los datos, pero después de agregar otros nuevos datos, el esclavo La máquina actualizará los datos automáticamente.
  5. Por ejemplo, el maestro y el esclavo solo tienen datos con id igual a 1, y el esclavo agrega id igual a 2, nombre = zhangsan, y el maestro no cambiará, mientras que el maestro agrega id = 2, nombre = lisi en este momento , y el esclavo no cambiará nada Variedad. Pero el maestro agrega id = 3, nombre = xiaoming, y el esclavo copia en consecuencia, y la tabla también tiene id = 3, nombre = xiaoming

2.3 Resolución de problemas relacionados con la replicación maestro-esclavo

1、主从复制Connecting问题

inserte la descripción de la imagen aquí

Después de habilitar start slaveel proceso de replicación maestro-esclavo, si SlaveIORunning siempre está conectando, significa que la replicación maestro-esclavo siempre está conectada.Esta situación generalmente se debe a las siguientes razones, y podemos descartarla de acuerdo con el indicador Last_IO_Error.

  1. Fallo de red
    Verificar ip, puerto
  2. La contraseña es incorrecta
    Verifique si el usuario creado para la sincronización y la contraseña del usuario son correctos
  3. pos es incorrecto,
    verifique la posición del maestro

2、MYSQL镜像服务器因错误停止的恢复 —Slave_SQL_Running: No

# 在从机先stop slave,然后执行了一下提示的语句
mysql > stop slave;
mysql > set global sql_slave_skip_counter=1;
mysql > start slave; 
mysql > show slave status\G ;

3、从MYSQL服务器Slave_IO_Running: No的解决

  • Ejecución del nodo maestro, obtención de archivos de registro y publicación
mysql > show master status;
  • nodo esclavo para volver a enlazar
mysql > stop slave;mysql > CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=519086591; mysql > start slave;

El motivo de este tipo de problema es que cuando el maestro-esclavo se replica, en función de la creación de la tabla, y luego elimina y opera la tabla de datos o la tabla de inmediato, ¡lo que resulta en el cambio de la posición pos del nodo maestro!

Supongo que te gusta

Origin blog.csdn.net/qq_44231797/article/details/126136396
Recomendado
Clasificación