Directorio de artículos
-
- Preparación ambiental
- Fácil instalación de la versión
- Configurar la replicación maestro-esclavo de MySQL
-
- Cree una red de puente y especifique el rango de IP
- Crear directorio de almacenamiento de datos y configuración
- Preparar archivo de configuración
- iniciar la base de datos
- Configuración de Acceso Remoto (Maestro-Esclavo)
- La biblioteca maestra crea un usuario de replicación
- Comprobar el estado de la máquina maestra
- Información para configurar el maestro de la biblioteca
- Habilitar replicación maestro-esclavo
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;
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 \;
Si tiene éxito, el lugar marcado con un círculo debe ser sí,
si falla, se mostrará el registro:
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.