Docker -- Deploy Mysql master-slave database

The following is the specific process of configuring a Mysql service with one master and two slaves.

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.
insert image description here
When an exception is running, you can view the exception information in Last_Error .

Guess you like

Origin blog.csdn.net/qq_40096897/article/details/128786938