Replicación maestro-esclavo basada en Docker

1: El proceso de realización de la replicación maestro-esclavo fue atravesar pozos, y luego decidí grabarlo después de hacerlo yo mismo varias veces y tener éxito (por lo que algunas capturas de pantalla y contextos no coinciden, como los contenedores acoplables). El nombre no coincide, cada uno puede usar el suyo), planeo implementar la replicación maestro-esclavo desde la instalación de Docker en centos8 hasta el final, así que desinstalé el Docker original y lo grabé desde el principio. Si tiene Docker, puede Puedes omitirlo. Siga los pasos para desinstalar Docker.
2: Se recomienda que los amigos que hayan leído la publicación no se apresuren a comenzar y la lean primero antes de comenzar.
3: Si la descripción es incorrecta, no dude en informarme. Encuéntrame v:star2020082220210611

desinstalar la ventana acoplable

1: eliminar el contenedor acoplable

 sudo docker stop $(docker ps -aq)

inserte la descripción de la imagen aquí
Nota: Este comando detendrá todos los contenedores, incluidos los contenedores en ejecución y los contenedores detenidos.
2: Eliminar todos los contenedores:

sudo docker rm $(docker ps -aq)

Nota: Dado que solo tengo una ventana acoplable aquí, el comando docker rm ID de contenedor/nombre de contenedor se ejecutó para eliminar el contenedor. Así que no hay fotos aquí.

3: Eliminar todos los espejos (tengo un espejo de mysql5.7 aquí, pero el proceso de eliminación lleva un poco de tiempo, espere un momento)

sudo docker rmi $(docker images -q)

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Nota: Este comando eliminará todos los mirrors, incluidos los mirrors en ejecución y los mirrors detenidos; al ejecutar este comando, la línea de comando mostrará un segundo mensaje de confirmación y/n, seleccione y para continuar con la operación de eliminación. La segunda interfaz de arriba parece indicar que la eliminación se ha completado.

4: desinstalar la ventana acoplable

sudo yum remove docker-ce docker-ce-cli containerd.io

inserte la descripción de la imagen aquí

5: eliminar el directorio de datos de Docker

sudo rm -rf /var/lib/docker

Nota: Este comando eliminará el directorio de datos de Docker, incluidos todos los contenedores, imágenes y volúmenes de datos.

Las operaciones anteriores se deben a que quiero registrar desde el principio hasta el final desde la instalación de Docker. Me puse en el pozo varias veces durante el proceso de construcción y lo eliminé varias veces después de que la construcción fue exitosa. Los experimentos repetidos pueden lograr el maestro. -Replicación esclava, así que regístrela. Si no necesita eliminar la ventana acoplable, puede comenzar directamente con los siguientes pasos, con la esperanza de ayudar a otros amigos.

A continuación, comience instalando la imagen de la ventana acoplable en centos.

Primero instale la imagen de Docker en centos:
1: actualice la fuente de datos

 sudo yum update

inserte la descripción de la imagen aquí

2: Instale algunas herramientas y bibliotecas dependientes necesarias para el tiempo de ejecución de Docker, porque estos centos8 no están completos y deben instalarse

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

inserte la descripción de la imagen aquí
3: descargue el paquete Docker

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

inserte la descripción de la imagen aquí

4: Instale la versión de la comunidad de Docker: (Este proceso también debe esperar un tiempo)

sudo yum install -y docker-ce

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
5: Configure el servicio Docker e inícielo

sudo systemctl enable docker

inserte la descripción de la imagen aquí

sudo systemctl start docker

inserte la descripción de la imagen aquí

Nota: También se pueden ejecutar juntos: sudo systemctl enable docker &&sudo systemctl start docker

6: consultar la versión de Docker

sudo docker --version

inserte la descripción de la imagen aquí
Hasta ahora se ha instalado Docker, el siguiente es MySQL

Extraiga la imagen de mysql, aquí está la versión mysql5.7 como ejemplo

1: extraiga la imagen mysql5.7

docker pull mysql:5.7

inserte la descripción de la imagen aquí
Nota: este proceso debe esperar a Ha
2: ver la imagen reflejada

docker images

inserte la descripción de la imagen aquí
3: Cree un contenedor mysql de manera informal. El objetivo principal aquí es copiar el archivo de configuración de mysql, porque quiero montar el archivo de configuración de mysql my.cnf para facilitar su modificación.

docker run -d --name master mysql:5.7

inserte la descripción de la imagen aquí

Nota: Aquí es para crear un contenedor mysql y ejecutarlo. Si necesita ver el archivo de configuración de mysql my.cnf, debe ejecutar el siguiente comando. Si no lo necesita, puede omitirlo. Paso 1
: Crea un contenedor e inícialo.

docker run -d -p 3333:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7

inserte la descripción de la imagen aquí

Explica el significado:

docker run -d -p 3333:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7
这个 docker 命令用于在 docker 中运行一个 MySQL 容器,以下是命令中各个参数的含义:
docker run:用于在 docker 中运行一个容器的命令。
-d:表示在后台(detached 模式)运行容器,即不在终端上显示容器的输出。
-p 3333:3306:将主机(Host)的 3333 端口映射到容器的 3306 端口。这意味着你可以通过主机的 3333 端口访问容器中的 MySQL 服务。
--name master:指定容器的名称为 "master"。
-e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 根用户的密码为 "123456"。这里使用环境变量来传递密码给容器内的 MySQL 服务。
docker.io/mysql:5.7:表示使用 Docker Hub 上的 mysql 镜像,并指定标签为 5.7。
综合起来,这个命令的作用是在 Docker 中创建一个 MySQL 5.7 版本的容器,
容器名称为 "master",
通过主机的 3333 端口访问 MySQL 服务,并设置根用户密码为 "123456"。
容器在后台运行,不在终端上显示输出。

Paso 2: ingrese al caparazón del contenedor

docker exec -it master bash

Paso 3: vea el archivo de configuración predeterminado my.cnf

ls /etc/my.cnf
cat /etc/my.cnf
或者是
ls /etc/mysql/my.cnf
cat /etc/mysql/my.cnf

inserte la descripción de la imagen aquí
4: Cree e inicie Docker para comenzar a crear una carpeta, copie el archivo de configuración predeterminado de mysql, luego modifique la configuración y móntela, para que podamos modificar el archivo de configuración de mysql.

mkdir mysql // home文件下创建mysql文件

mkdir /home/mysql/master // mysql文件夹下创建主库文件夹master

mkdir /home/mysql/slave // mysql文件夹下创建从库文件夹slave

inserte la descripción de la imagen aquí
5: Copie el archivo de configuración al archivo de configuración my.cnf del archivo maestro-esclavo creado arriba de
la carpeta principal:

docker cp master:/etc/my.cnf /home/mysql/master

De la carpeta:

docker cp master:/etc/my.cnf /home/mysql/slave

Compruebe si la copia se realizó correctamente
inserte la descripción de la imagen aquí
6: elimine el contenedor en ejecución anterior

docker ps -a  //查看
docker stop master  //停止 ,test是我上面创建的容器的名字
docker rm master //删除

inserte la descripción de la imagen aquí

7: iniciar el contenedor principal

docker run -d \
--restart=always \
-p 3306:3306 \
-v /home/mysql/master/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
--name master mysql:5.7

El significado de cada parámetro en el comando Docke anterior:

docker run:用于在 Docker 中运行一个容器的命令。
-d:表示在后台(detached 模式)运行容器,即不在终端上显示容器的输出。
-p 3333:3306:将主机(Host)的 3333 端口映射到容器的 3306 端口。这意味着你可以通过主机的 3333 端口访问容器中的 MySQL 服务。
--name master:指定容器的名称为 "master"。
-e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 根用户的密码为 "123456"。这里使用环境变量来传递密码给容器内的 MySQL 服务。
docker.io/mysql:5.7:表示使用 Docker Hub 上的 mysql 镜像,并指定标签为 5.7。

inserte la descripción de la imagen aquí

8: Ingrese el archivo de configuración de la biblioteca principal y agregue el siguiente contenido en el archivo [mysqld], guarde y salga.

vim /home/mysql/master/my.cnf

inserte la descripción de la imagen aquí

## 设置server_id, 同一个局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql,information_schema
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

inserte la descripción de la imagen aquí
9: reinicia el contenedor de la biblioteca principal

docker restart master

inserte la descripción de la imagen aquí
Nota: Asegúrese de que la biblioteca maestra se haya iniciado correctamente antes de continuar con los siguientes pasos; de lo contrario, se informará un error al iniciar sesión en mysql, indicando que el nombre de usuario y la contraseña son incorrectos, como se muestra en la figura. Puede ver el registro. Cuando aparece el cuadro rojo en la Figura 2, significa que el inicio fue exitoso. En este momento, continúe con los siguientes pasos y no se informará ningún error al iniciar sesión en mysql.
inserte la descripción de la imagen aquí

docker logs master   //查看容器名为master的日志

inserte la descripción de la imagen aquí

10: Cree sincronización de datos en la biblioteca principal, que se divide en los siguientes pasos
Paso 1: contenedor mysql

docker exec -it master bash

Paso 2: inicie sesión en mysql

mysql -uroot -p123456

Paso 3: Otorgar permisos a un usuario llamado "esclavo" para replicar datos de la base de datos maestra

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

Significado específico:

GRANT REPLICATION SLAVE:授予从数据库复制数据的权限。
ON *.*:将权限应用于所有数据库和所有表。
TO 'slave'@'%':授予 "slave" 用户在任何主机上的访问权限。'%' 表示任意主机。
IDENTIFIED BY '123456':设置用户 "slave" 的密码为 "123456"。

Paso 4: Otorgue al usuario llamado "esclavo" los permisos necesarios para copiar datos de la base de datos y realizar algunas operaciones del cliente

grant replication slave, replication client on *.* to 'slave'@'%';

Significado específico:

grant replication slave:授予从数据库复制数据的权限。
replication client:授予从数据库执行一些客户端操作的权限,例如读取主数据库的二进制日志信息。
on *.*:将权限应用于所有数据库和所有表。
to 'slave'@'%':授予 "slave" 用户在任何主机上的访问权限。'%' 表示任意主机

Paso 5: actualizar

flush privileges;

Paso 6: vea el registro de estado de sincronización maestro-esclavo master_log_file y master_log_pos en este estado. Los valores de estos dos parámetros deben recordarse y se utilizarán más adelante.

show master status;

inserte la descripción de la imagen aquí
Luego presione Ctrl+D para salir.
Nota: Los pasos anteriores también se pueden realizar en navicat.
1: Cree un nuevo enlace mysql para iniciar sesión en la base de datos
2: Ejecute comandos (ejecute en orden)

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; 
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;
show master status;

11: iniciar el contenedor esclavo

docker run -d \
--restart=always \
-p 3307:3306 \
-v /home/mysql/slave/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
--name slave mysql:5.7

inserte la descripción de la imagen aquí
12: Modifique el archivo de configuración de la biblioteca esclava y agregue el siguiente contenido en [mysqld]:

vim /home/mysql/slave/my.cnf

Agregue lo siguiente al archivo [mysqld]:


## 设置server_id, 同一个局域网内需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql,information_schema
## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置只读(具有super权限的用户除外)
read_only=1

inserte la descripción de la imagen aquí
13: reinicia el contenedor esclavo

docker restart slave

inserte la descripción de la imagen aquí
14: Cree un usuario de sincronización de datos desde la biblioteca, que se divide en los siguientes pasos
Paso 1: Ingrese al contenedor mysql

docker exec -it slave bash

inserte la descripción de la imagen aquí

Paso 2: inicie sesión en mysql

mysql -uroot -p123456

inserte la descripción de la imagen aquí

Paso 3: Configure la información de conexión y sincronización de la base de datos esclava en la replicación maestro-esclavo de MySQL, que le indica a la base de datos esclava cómo conectarse a la base de datos maestra para obtener actualizaciones de replicación de datos.

CHANGE MASTER TO master_host = '192.168.0.25',
master_user = 'slave',
master_password = '123456',
master_port = 3306,
master_log_file = 'mall-mysql-bin.000001',
master_log_pos = 807,
master_connect_retry = 30;

El significado de cada parámetro en el párrafo anterior de SQL:

master_host = '192.168.0.25':这是主数据库的 IP 地址或主机名。从数据库将连接到该主数据库来获取复制数据。

master_user = 'slave':这是连接主数据库所使用的用户名。通常创建一个用于复制的专用用户。

master_password = '123456':连接主数据库所使用的密码,与上述用户名对应。

master_port = 3306:主数据库的端口号,通常为 MySQL 默认的端口号 3306。

master_log_file = 'mall-mysql-bin.000001':这是主数据库二进制日志中的日志文件名,它包含复制数据的更新记录。

master_log_pos = 807:这是主数据库二进制日志文件中的位置,指示从数据库在何处开始读取二进制日志以进行复制。

master_connect_retry = 30:在连接主数据库失败时,从数据库会尝试重新连接的时间间隔(以秒为单位)。

总体而言,这些配置参数告诉从数据库应该连接到哪个主数据库,使用哪个用户和密码来获取复制数据,并从主数据库的指定二进制日志位置开始同步数据。这是主从复制配置的一部分,使得从数据库可以与主数据库保持数据同步。在执行 CHANGE MASTER TO 后,从数据库可以开始运行复制进程,从主数据库同步数据更新。

inserte la descripción de la imagen aquí
13: Verifique el estado. En este momento, Slave_IO_Running y Slave_SQL_Running son ambos No

show slave status \G;

inserte la descripción de la imagen aquí

14: Habilitar la sincronización maestro-esclavo

start slave;

inserte la descripción de la imagen aquí

15: Verifique nuevamente el estado de sincronización maestro-esclavo. En este momento, Slave_IO_Running y Slave_SQL_Running son Sí

show slave status \G;

inserte la descripción de la imagen aquí
Nota: Los pasos anteriores también se pueden realizar en navicat, los pasos son los siguientes:
Paso 1: Cree un nuevo enlace mysql para iniciar sesión en la base de datos
Paso 2: Configure la información de conexión y sincronización de la base de datos esclava en MySQL maestro-esclavo replicación

CHANGE MASTER TO master_host = '192.168.0.25',
master_user = 'slave',
master_password = '123456',
master_port = 3306,
master_log_file = 'mall-mysql-bin.000001', //与主库中一致
master_log_pos = 1444, // 与主库中一致
master_connect_retry = 30;

Paso 3: Verifique el estado de sincronización maestro-esclavo# En este momento, Slave_IO_Running y Slave_SQL_Running son ambos No

show slave status;

Paso 4: active la sincronización maestro-esclavo

start slave;

Paso 5: Verifique nuevamente el estado de sincronización maestro-esclavo# En este momento, Slave_IO_Running y Slave_SQL_Running son Sí

show slave status;

16: Cuando Slave_IO_Running y Slave_SQL_Running de la biblioteca esclava son Sí, significa que la configuración maestro-esclavo fue exitosa. A continuación, puede crear un enlace en nacivat. Después de que la conexión sea exitosa, cree una base de datos e inserte datos para verificar si el maestro-esclavo está sincronizado. En la línea de comando, tomo nacivat como ejemplo para crear una biblioteca, una tabla, insertar datos y ver si está sincronizado. Verificación 1: si
la biblioteca está sincronizada
. Cree una nueva base de datos en la base de datos principal. :
inserte la descripción de la imagen aquí
actualice la prueba desde la base de datos y luego verifique:
inserte la descripción de la imagen aquí
Conclusión: También existe en la base de datos esclava Creó una biblioteca de prueba
Verificación 2: Si la tabla está sincronizada
Cree una tabla en la biblioteca principal
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

Actualice desde la biblioteca y mire nuevamente:
inserte la descripción de la imagen aquí
conclusión: la tabla de usuarios también existe en la biblioteca esclava
Verificación 3: si los datos están sincronizados

inserte la descripción de la imagen aquí
Actualice desde la biblioteca y mire nuevamente:
inserte la descripción de la imagen aquí
Conclusión: los datos en la tabla de usuarios también existen en la biblioteca
. En este punto, incluso si terminó, corríjame si la descripción es incorrecta.

Supongo que te gusta

Origin blog.csdn.net/fortunate_leixin/article/details/132295426
Recomendado
Clasificación