Replicación maestro-esclavo basada en Docker, MySQL, Mycat2, separación de lectura y escritura

1. Comprenda el principio de replicación maestro-esclavo de MySQL.

La replicación maestro-esclavo de MySQL se refiere al proceso de copiar cambios de datos en una instancia de base de datos MySQL (es decir, la base de datos maestra) a otra instancia de base de datos MySQL (es decir, la base de datos esclava) a través de registros binarios para lograr la sincronización de datos.

Específicamente, en la replicación maestro-esclavo, cuando la base de datos maestra realiza una operación de actualización de datos, registrará el contenido de la operación de actualización en el registro binario (binlog) y notificará a la base de datos esclava sobre esta operación. Después de recibir la notificación de la biblioteca principal, la biblioteca esclava iniciará un subproceso de E/S, leerá eventos del registro binario de la biblioteca principal y escribirá estos eventos en su propio registro de retransmisión. Posteriormente, la biblioteca esclava iniciará un hilo SQL y ejecutará los eventos en el registro de retransmisión para actualizar sus propios datos.

El beneficio de la replicación maestro-esclavo es que puede aumentar la disponibilidad y escalabilidad del sistema y también puede mejorar el rendimiento del sistema. Pero también existen algunas deficiencias, como retrasos en los datos de la base de datos.

2. Complete la replicación maestro-esclavo de MySQL (un maestro y dos esclavos).

1. Habilite tres contenedores acoplables

docker run --name master -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1
docker run --name slave1 -p 3312:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1
docker run --name slave2 -p 3313:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1  

2: comience a escribir el archivo de configuración

Método 1: escribir directamente en el contenedor

1.docker exec -it master bash
2. cd /etc/mysql/conf.d/
3. vi docker.cnf
Este método tiene muchos problemas y no se recomienda.

Método 2: copie el archivo de configuración, modifíquelo y luego cópielo en el contenedor

1. 复制出来
	 docker cp master:/etc/mysql/conf.d/docker.cnf master.cnf
	docker cp slave1:/etc/mysql/conf.d/docker.cnf slave1.cnf
  	docker cp slave2:/etc/mysql/conf.d/docker.cnf slave2.cnf
  	如果提示找不到文件则自己创建相关文件再将其写入对应内容后cp到容器
  	
 2:修改完后写回去
 	 docker cp master.cnf master:/etc/mysql/conf.d/docker.cnf 
	docker cp slave1.cnf slave1:/etc/mysql/conf.d/docker.cnf 
  	docker cp slave2.cnf slave2:/etc/mysql/conf.d/docker.cnf 

Lo siguiente es lo que está escrito.

主机:
skip-host-cache
skip-name-resolve
server-id = 1 
#服务器的唯一标识
log_bin = master.bin 
# 开启日志功能
从机:
 server-id = 2 #服务器的唯一标识

3. Reinicie el contenedor y complete las configuraciones relacionadas.

Introduzca el anfitrión:

create user 'master'@'%' identified by '123456'; 
grant replication slave on *.* to 'master'@'%';
flush privileges;
show master status;
//记住file名和position,从服务器配置要用
//如在下图中的 master.000001 和 154

Insertar descripción de la imagen aquí

Máquina esclava:

change master to
master_host="192.168.128.132",master_port=3307,
// host 是主机的ip地址,port是映射的端口号,从服务器的配置相同
master_user="master",
master_password="123456",
master_log_file="master.000001",
master_log_pos=154;

4: Comience con éxito

Insertar descripción de la imagen aquí

3. Complete la configuración de separación de lectura y escritura de MySQL basada en las configuraciones de un maestro y dos esclavos de MySQL.

haciendo

Colección de errores

1: muestra el estado del maestro; la pantalla está vacía

Motivo: El archivo de configuración es incorrecto y el registro binario no está configurado correctamente
Solución: Vuelva a escribir el archivo de configuración.

2. MySQL encontró la opción Encontrada sin grupo anterior en el archivo de configuración

Motivo: hay un error de sintaxis en el archivo de configuración de MySQL, causado por la falta de una declaración de grupo válida en algún lugar del archivo de configuración. Cada archivo de configuración debe contener al menos una declaración de grupo válida, como [mysqld], que especifique qué configuraciones se aplican.

Demostración de errores

skip-host-cache
skip-name-resolve
server-id = 1 
log_bin = master.bin 

Forma correcta de escribir:

[mysqld]
skip-host-cache
skip-name-resolve
server-id = 1 
log_bin = master.bin 

3: Docker msyql salió (1)

Como se muestra en la imagen:
Insertar descripción de la imagen aquí
Motivo: falta una letra al ingresar MYSQL_ROOT_PASSWORD.
Insertar descripción de la imagen aquí

4: No hay docker.cnf en /etc/mysql/con.f/ de Docker

Motivo: el archivo docker.cnf se eliminó de la imagen oficial de Docker de MySQL y se reemplazó por el archivo de configuración .cnf en el directorio /etc/mysql/conf.d.
Solución: cree uno usted mismo

5: necesita (al menos uno de) los privilegios SUPER, CLIENTE DE REPLICACIÓN para esta operación

Motivo: Los permisos de usuario actuales son insuficientes y se requieren permisos SUPER, REPLICACIÓN
SUPER: Permite al usuario realizar operaciones que requieren privilegios de superusuario
REPLICACIÓN: Permite al usuario ver información sobre el estado de replicación.
Solución:
Método 1: Cambiar de usuario raíz
Método 2: Otorgar permisos al usuario actual, establecer el nombre del usuario actual en: libai (No lo he probado, pero es teóricamente posible)

GRANT SUPER ON *.* TO 'libai'@'host';
GRANT REPLICATION CLIENT ON *.* TO 'libai'@'host';

6: Mycat no puede iniciarse

Insertar descripción de la imagen aquí
Razón: JDK no siguió el

Supongo que te gusta

Origin blog.csdn.net/m0_51828898/article/details/129838043
Recomendado
Clasificación