Tabla de contenido
Docker instala el clúster MySQL (un maestro y un esclavo)
Prueba de aperitivo
1. Lleve la imagen de mysql5.7 al local
[root@aliyun ~]# docker pull mysql:5.7
2. Inicie el contenedor mysql y especifique la contraseña como 123456
[root@aliyun ~]# docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
3. Ingrese al contenedor mysql
[root@aliyun ~]# docker exec -it mysql /bin/bash
root@d9b75dcb7dae:/#
4. Introduce la contraseña para acceder
root@d9b75dcb7dae:/# mysql -u root -p
Instalación del clúster MySQL
Utilice Docker para crear un clúster de separación de lectura y escritura MySQL "un maestro y un esclavo" .
contenedor maestro
1. Inicie el contenedor maestro y móntelo con un volumen para evitar la pérdida de datos.
[root@aliyun ~]# docker run --name mysql_master -e MYSQL_ROOT_PASSWORD=123456
-v /root/mysql_master/data:/var/lib/mysql \
-v /root/mysql_master/log:/var/log/mysql \
-v /root/mysql_master/conf:/etc/mysql/conf.d \
-d -p 3316:3306 mysql:5.7
2. Cree un nuevo archivo my.cnf en el directorio /root/mysql_master/conf de la máquina host y escriba el siguiente contenido en él
# 设置字符集编码
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
server_id=01 # 指定mysql唯一标识
binlog-ignore-db=mysql # 在二进制日志中忽略名为 "mysql" 的数据库的操作记录
log-bin=master-log-bin # 启用二进制日志,并指定二进制日志文件的名称为 "master-log-bin"
binlog_cache_size=1M # 二进制日志缓存的大小为 1MB
binlog_format=mixed # 设置二进制日志的格式为 "mixed"
expire_logs_days=7 # 设置二进制日志文件过期的天数为 7
slave_skip_errors=1062 # 设置当从服务器执行复制时遇到错误码为 1062 的错误时,跳过该错误并继续复制
3. Reinicie el contenedor maestro.
[root@aliyun conf]# docker restart mysql_master
4. Ingrese al contenedor para conectarse a mysql y verifique su codificación de caracteres.
[root@aliyun conf]# docker exec -it mysql_master /bin/bash
root@d61cb0fa6c50:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
5. Cree un usuario para el mysql actual, que le permita conectarse al servidor mysql desde cualquier host ('%') y especifique la contraseña.
mysql> create user 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
6. Autorizar, otorgar al usuario 'esclavo' los permisos pertinentes para la replicación.
mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
replication slave
Los permisos permiten al usuario conectarse al servidor maestro como servidor esclavo y realizar operaciones de replicación.
replication client
Los permisos permiten a los usuarios ver información relacionada con la replicación.
*.*
Representa todas las bibliotecas y tablas.
contenedor de esclavos
1. Inicie el contenedor esclavo y utilice el montaje de volumen para evitar la pérdida de datos.
[root@aliyun ~]# docker run --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456
-v /root/mysql_slave/data:/var/lib/mysql
-v /root/mysql_slave/log:/var/log/mysql
-v /root/mysql_slave/conf:/etc/mysql/conf.d
-d -p 3326:3306 mysql:5.7
2. Cree un nuevo archivo my.cnf en el directorio /root/mysql_slave/conf de la máquina host y escriba el siguiente contenido en él
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
server_id=02 # 指定mysql唯一标识
binlog-ignore-db=mysql
log-bin=slave-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=relay-log-bin # 指定中继日志文件的名称前缀。中继日志文件用于记录从服务器上执行的复制操作,以便其他从服务器可以通过读取中继日志进行级联复制。
log_slave_updates=1 # 启用从服务器记录复制操作到自己的二进制日志的功能
read_only=1 # 将服务器设置为只读模式
3. Reinicie el contenedor esclavo.
[root@aliyun conf]# docker restart mysql_slave
4. Ingrese al contenedor para conectarse a mysql y verifique su codificación de caracteres.
[root@aliyun conf]# docker exec -it mysql_slave /bin/bash
root@72c2eed0b7ca:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
Configurar la replicación maestro-esclavo
1. Ver el estado del maestro
Ejecute el comando show master status en el maestro para ver el nombre del archivo de registro binario y la posición inicial.
2. Ejecute el comando cambiar maestro a en el esclavo para especificar la información relevante del maestro que se va a conectar.
mysql> change master to master_host='172.29.121.66', #主服务器的主机名或IP地址
master_user='slave', # 主服务器指定的复制用户
master_password='123456', # 主服务器的复制用户密码
master_port=3316, # 主服务器的端口
master_log_file='master-log-bin.000001', # 主服务器的二进制日志文件名
master_log_pos=617; # 主服务器的二进制日志位置
3. El esclavo inicia la sincronización.
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
Compruebe el estado del esclavo. La sincronización ha comenzado.
prueba
1. Escribe en el maestro.
2. Leer en esclavo