Experiencia práctica de Docker (4) Implementar la replicación maestro-esclavo mysql8 en docker

inserte la descripción de la imagen aquí

Preparación ambiental

Necesito una versión MySQL8 de MySQL, porque no he usado MySQL5 personalmente, y no sé si habrá algunas desviaciones de características entre los dos.

Por defecto, su entorno es el mismo que el mío.


Fácil instalación de la versión

Primero instale solo un MySQL, y muchos detalles se mezclarán si es maestro y esclavo.

docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql

Aquí están los parámetros:

-p:指定内外端口映射,虚拟机为外,docker 容器为内,写在前面的为外部端口,写在后面的为内部端口。因为 MySQL 本身端口为 3306,为了不使你们混淆,我外部端口不设置为 3306。
-v:指定内外存储卷映射,Docker 实践经验(三)讲的就是这个。
-e:往容器内部传参,最后会由 MySQL 来接收。关于这个 -e 其实我也还没研究它的一个走势。

Un MySQL tan simple podrá moverse.


configurar la clave

Si no establece una contraseña, no está seguro de poder ingresar la próxima vez que desee iniciar sesión.
Incierto significa que puede ser posible entrar y puede que no sea posible entrar.

Así que establecemos una contraseña por nosotros mismos para estar más seguros.

mysql> use mysql

mysql> update user set authentication_string='123456' where user='root' and host='localhost';

mysql> flush privileges;

No comentes.


Ahora que MySQL está activo, se puede considerar eliminado y comenzamos a realizar la replicación maestro-esclavo.

Si desea conservarlo para su uso:
modifique my.cnf y sincronícelo con MySQL a través del volumen de datos:

cd /mysql/conf
vim my.cnf
插入以下内容:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

Reinicie MySQL:

docker restart mysql
docker exec -it mysql bash

Configurar la replicación maestro-esclavo de MySQL

Cree una red de puente y especifique el rango de IP

docker network create --driver bridge mysql-master-slave

El número predeterminado de conexiones mysql no es suficiente

set global max_connections=500;
set global mysqlx_max_connections=500;

Crear directorio de almacenamiento de datos y configuración

# 创建主库数据存放目录
mkdir -p /home/docker/mysql/master/data
# 创建主库配置存放目录
mkdir -p /home/docker/mysql/master/conf
 
# 创建从库1数据存放目录
mkdir -p /home/docker/mysql/slave1/data
# 创建从库1配置存放目录
mkdir -p /home/docker/mysql/slave1/conf

Preparar archivo de configuración

base de datos maestra

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
 
secure-file-priv= NULL
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
# 服务器唯一ID,默认是1
server-id=10
 
# 启用二进制日志
log-bin=mysql-bin
 
# 最大连接数 
max_connections=10000
 
# 设置默认时区
default-time_zone='+8:00'
 
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
 
!includedir /etc/mysql/conf.d/

de la base de datos

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
 
secure-file-priv= NULL
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
# 服务器唯一ID,默认是1
server-id=11
 
# 启用二进制日志
log-bin=mysql-bin
 
# 最大连接数 
max_connections=10000
 
# 设置默认时区
default-time_zone='+8:00'
 
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
 
!includedir /etc/mysql/conf.d/

iniciar la base de datos

Inicie la base de datos maestra

Si sigo completamente los pasos anteriores, el comando aquí no necesita cambiar los parámetros.

docker run -d -p 3316:3306 --name mysql_master --restart=always --network mysql-master-slave -v /home/docker/mysql/master/data:/var/lib/mysql -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql

iniciar base de datos esclava

docker run -d -p 3326:3306 --name mysql_slave1 --restart=always --network  mysql-master-slave -v /home/docker/mysql/slave1/data:/var/lib/mysql -v /home/docker/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql

Configuración de Acceso Remoto (Maestro-Esclavo)

# 在容器 mysql_master 中开启一个交互模式的终端
docker exec -it mysql_master /bin/bash
 
# 在容器 mysql_slave1 中开启一个交互模式的终端
docker exec -it mysql_slave1 /bin/bash
 
# mysql 登录
mysql -u root -p
 
# 给予远程用户所有表所有权限
GRANT ALL ON *.* TO 'root'@'%';
 
# 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
 
# 远程访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
 
# 刷新权限
flush privileges;

La biblioteca maestra crea un usuario de replicación

CREATE USER 'woniu'@'%' IDENTIFIED WITH mysql_native_password BY 'woniu123456';
 
GRANT REPLICATION SLAVE ON *.* TO 'woniu'@'%';

flush privileges;

Comprobar el estado de la máquina maestra

SHOW MASTER STATUS;

inserte la descripción de la imagen aquí


Información para configurar el maestro de la biblioteca

Si sigue mis pasos completamente, debe completar la ip en su propio host y los dos datos que se muestran en la figura anterior.

change master to master_host='192.168.190.133', master_user='woniu', master_password='woniu123456', master_port=3316, master_log_file='mysql-bin.000003', master_log_pos=2838, master_connect_retry=30;

Definición de parámetros:

master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

Habilitar replicación maestro-esclavo

# 开始同步
start slave;
 
# 同步状态
show slave status \;

Por favor agregue la descripción de la imagen

Si tiene éxito, el lugar marcado con un círculo debe ser sí,
si falla, se mostrará el registro:
Por favor agregue la descripción de la imagen

Puede usar Baidu usted mismo, pero es posible que lo que sale de Baidu no se aplique a nosotros. Después de todo, estamos desplegados en la ventana acoplable y hay pocos materiales existentes.
Depende de la experiencia.

Supongo que te gusta

Origin blog.csdn.net/qq_43762191/article/details/124230823
Recomendado
Clasificación