The following is the specific process of configuring a Mysql service with one master and two slaves.
Article Directory
Create a directory for mounting
Ensure data persistence and prevent data loss after container restart
- master node
/tools/docker-mysql/master/data /tools/docker-mysql/master/conf /tools/docker-mysql/master/logs
- from one
/tools/docker-mysql/slave1/data /tools/docker-mysql/slave1/conf /tools/docker-mysql/slave1/logs
- from two
/tools/docker-mysql/slave2/data /tools/docker-mysql/slave2/conf /tools/docker-mysql/slave2/logs
Modify cnf configuration
- master node
vi /tools/docker-mysql/master/conf/master.cnf [mysqld] log-bin=mysql-bin server-id=100
- from one
vi /tools/docker-mysql/slave1/conf/slave1.cnf [mysqld] log-bin=mysql-bin server-id=101
- from two
vi /tools/docker-mysql/slave2/conf/slave2.cnf [mysqld] log-bin=mysql-bin server-id=102
Pull the mysql service image
The latest image is pulled here
docker pull mysql/mysql-server:latest
Custom docker network
When used to specify an IP for a container, provide an available IP segment.
docker network create --subnet=172.18.0.0/24 dockernet
Start the container
- master node
docker run \ -itd \ -v /tools/docker-mysql/master/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/master/data:/var/lib/mysql \ -v /tools/docker-mysql/master/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3311:3306 \ --name mysql-master \ --restart=always \ --network dockernet \ --ip=172.18.0.2 \ -d mysql:latest
- from one
docker run \ -itd \ -v /tools/docker-mysql/slave1/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/slave1/data:/var/lib/mysql \ -v /tools/docker-mysql/slave1/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3312:3306 \ --name mysql-slave1\ --restart=always \ --network dockernet \ --ip=172.18.0.3 \ -d mysql:latest
- from two
docker run \ -itd \ -v /tools/docker-mysql/slave2/conf:/etc/mysql/conf.d \ -v /tools/docker-mysql/slave2/data:/var/lib/mysql \ -v /tools/docker-mysql/slave2/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3313:3306 \ --name mysql-slave2\ --restart=always \ --network dockernet \ --ip=172.18.0.4 \ -d mysql:latest
Main library configuration
View the status of the main library
docker exec -it 主库容器ID /bin/bash
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 157 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
Create a backup user from the library
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
create user 'backup'@'%' identified WITH mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' ;
Configure from library
Modify Master information
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
// mysql-bin.000003 是我们在主库查看状态时查找到的 File 信息
// 157 是我们在主库查看状态时查找到的 Position 信息
change master to master_host='172.18.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157;
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' ;
Start the slave service
start slave;
Check whether the slave service status is normal
show slave status;
The following statuses are Yes , indicating normal operation.
When an exception is running, you can view the exception information in Last_Error .