Docker -- 部署Mysql主从数据库

以下是配置一主两从的Mysql服务的具体流程。

创建用于挂载的目录

保证数据的持久化,防止容器重启后数据丢失

  • 主节点
    /tools/docker-mysql/master/data
    /tools/docker-mysql/master/conf
    /tools/docker-mysql/master/logs
    
  • 从一
    /tools/docker-mysql/slave1/data
    /tools/docker-mysql/slave1/conf
    /tools/docker-mysql/slave1/logs
    
  • 从二
    /tools/docker-mysql/slave2/data
    /tools/docker-mysql/slave2/conf
    /tools/docker-mysql/slave2/logs
    

修改cnf配置

  • 主节点
    vi  /tools/docker-mysql/master/conf/master.cnf
    [mysqld]
    log-bin=mysql-bin
    server-id=100
    
  • 从一
    vi  /tools/docker-mysql/slave1/conf/slave1.cnf
    [mysqld]
    log-bin=mysql-bin
    server-id=101
    
  • 从二
    vi  /tools/docker-mysql/slave2/conf/slave2.cnf
    [mysqld]
    log-bin=mysql-bin
    server-id=102
    

拉取mysql服务镜像

这里拉取的是最新的镜像

docker pull mysql/mysql-server:latest

自定义docker网络

用来为容器指定IP时,提供可用的IP段。

docker network create --subnet=172.18.0.0/24 dockernet

启动容器

  • 主节点
    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
    
  • 从一
    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
    
  • 从二
    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
    

主库配置

查看主库状态

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)

创建从库备份用户

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'@'%' ;

从库配置

修改Master信息

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'@'%' ;

启动slave服务

start slave;

查看slave服务状态是否正常

show slave status;

以下状态为 Yes 表示运行正常。
在这里插入图片描述
运行异常时,可以查看 Last_Error 中的异常信息。

猜你喜欢

转载自blog.csdn.net/qq_40096897/article/details/128786938
今日推荐