Replicación maestro-esclavo de MySQL
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 binariobinlog日志
, 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/OThread
se 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 log
el registro en el archivo y lo analizará en declaraciones SQL para ejecutar uno por uno.
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
- aparecer
my.cnf
sudo vim /etc/mysql/my.cnf
- 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
master
Visto en mysqlstatus
show master stataus
4.2.2 servidor esclavo esclavo
- encuentra el
my.cnf
archivo
- información de configuración
¡ Esto server-id
debe recordarse con el servidor principal 不一样
!
- reiniciar el
mysql
servicio
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_file
es show master stataus
la información de arriba.
Esta master_log_pos
es show master stataus
la información de arriba.
- iniciar esclavo
start slave
- Ver esclavo
show slave status \G(注意没有分号)
Cuando miramos a estos dos, YES
está bien, ten cuidado de no ser el otro.CONNECTING
- dejar de esclavo
stop slave
4.2.3 Verificación
-
master
Servidor principal
-
slave
servidor secundario
空
El estado de ambos servidores.
Primero, podemos master节点
insertar una declaración en
Y luego míralo para slave节点
que
veamos que se ha implementado 主从复制
.