[MySQL] Replicación maestro-esclavo y su configuración

1. ¿Por qué necesitamos replicación maestro-esclavo?

  • En un sistema con negocios complejos, existe tal escenario: si se requiere una declaración SQL 锁表, lo que resulta en un servicio temporal 不能使用读, afectará en gran medida el funcionamiento del negocio. Usando la replicación maestro-esclavo, la biblioteca maestra es responsable de escribir y la biblioteca esclava es responsable de leer, de esta manera, incluso si la biblioteca maestra bloquea la tabla, se puede garantizar el funcionamiento normal del negocio leyendo la biblioteca esclava.

  • para datos热备

  • El volumen de negocios está aumentando y la frecuencia de acceso de E/S es demasiado alta, lo que no puede ser satisfecho por una sola máquina. En este momento, se realiza el almacenamiento de múltiples bases de datos para reducir la frecuencia de acceso de E/S de disco y mejorar la Rendimiento de E/S de una sola máquina.

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

La replicación maestro-esclavo de MySQL significa que los datos se pueden replicar desde un nodo maestro del servidor de base de datos MySQL hacia 一个o desde un 多个nodo esclavo .

MySQL adopta el 异步复制método por defecto, de modo que el nodo esclavo no tiene que visitar el servidor maestro para actualizar sus propios datos, la actualización de datos se puede realizar en una conexión remota y el nodo esclavo puede copiar todas las bases de datos en la base de datos maestra. o una base de datos específica, o una tabla específica.

3. Principio

  • master服务器Los cambios de datos se registran en el binario binlog日志, y cuando se producen los datos en el maestro 改变, los cambios se escriben en el registro binario.
  • slave服务器El registro binario maestro se detectará en un cierto intervalo de tiempo para ver si ha cambiado y, si hay un cambio, I/OThreadse iniciará un evento binario maestro de solicitud.
  • Al mismo tiempo, el nodo maestro inicia un subproceso de volcado para cada subproceso de E/S para enviarle eventos binarios y guardarlo en el registro de retransmisión local del nodo esclavo.
  • El nodo 启动SQL线程esclavo leerá el registro binario del registro de retransmisión y lo reproducirá localmente para que sus datos sean coherentes con los del nodo maestro.
  • Finalmente, I/OThread y SQLThread se dormirán, esperando la próxima activación.

Resumir:

  • 从库Genere dos subprocesos, un subproceso de E/S y un subproceso de SQL, asegúrese de que estos dos estén 开启en el estado.
  • I/O线程Solicitará el binlog de la biblioteca principal y escribirá el binlog obtenido en el archivo de registro de retransmisión local (registro de retransmisión).
  • La biblioteca principal generará uno para pasar el binlog log dump线程al subproceso de E/S de la biblioteca esclava .
  • El subproceso SQL leerá relay logel registro en el archivo y lo analizará en declaraciones SQL para ejecutar uno por uno.

inserte la descripción de la imagen aquí

4. Configuración

4.1 Preparar dos servidores (se ha instalado MySQL)

master:xxx
slave:xxx

4.2 Modificar la configuración

Dos máquinas crean una base de datos con el mismo nombre al mismo tiempo.

create database test_db charset=utf8mb4;

4.2.1 servidor maestro maestro

  • aparecermy.cnf
sudo vim /etc/mysql/my.cnf

inserte la descripción de la imagen aquí

  • agrega esta información
#在mysqld模块中添加如下配置信息
[mysqld]
log-bin=master-bin #二进制文件名称
binlog-format=ROW  #二进制日志格式,有row、statement、mixed三种格式,row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
server-id=1            # 要求各个服务器的id必须不一样
binlog-do-db=test_db   # 同步的数据库名称
  • Configure la autorización de cuenta para que el servidor esclavo inicie sesión en el servidor maestro
grant replication slave on *.* to 'root'@'%' identified by 'root';
  • Actualizar permisos
flush privileges;
  • reiniciar el servidor maestro
service mysql restart
  • masterVisto en mysqlstatus
show master stataus

inserte la descripción de la imagen aquí

4.2.2 servidor esclavo esclavo

  • encuentra el my.cnfarchivo

inserte la descripción de la imagen aquí

  • información de configuración

¡ Esto server-iddebe recordarse con el servidor principal 不一样!
inserte la descripción de la imagen aquí

  • reiniciar el mysqlservicio
service mysqld restart
  • conectarse al servidor principal
change master to master_host='主服务地址',master_user='root',master_password='root',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;

Esta master_log_filees show master statausla información de arriba.
Esta master_log_poses show master statausla información de arriba.

  • iniciar esclavo
start slave
  • Ver esclavo
show slave status \G(注意没有分号)

inserte la descripción de la imagen aquí

Cuando miramos a estos dos, YESestá bien, ten cuidado de no ser el otro.CONNECTING

  • dejar de esclavo
stop slave

4.2.3 Verificación

  • masterServidor principal
    inserte la descripción de la imagen aquí

  • slaveservidor secundario

inserte la descripción de la imagen aquí
El estado de ambos servidores.

Primero, podemos master节点insertar una declaración en

inserte la descripción de la imagen aquí
Y luego míralo para slave节点que
inserte la descripción de la imagen aquí
veamos que se ha implementado 主从复制.

Supongo que te gusta

Origin blog.csdn.net/weixin_45304503/article/details/121255955
Recomendado
Clasificación