使用Docker快速搭建Mariadb主从复制环境

参考:MariaDB/Mysql的主从复制部署(Docker)
食用方法在结尾

1. docker-compose.yml的编写,首先需要一主一从两个容器,在此定义好要用的镜像,端口映射,挂载卷等。

version: "3"
services:
  master_db:
    build:
      context: ./master
    container_name: master
    ports:
      - "23306:3306"
    volumes:
      - "/var/docker/master/:/var/lib/mysql"
    restart: always
    environment:
      # 这里需要特别注意一下,这是mysql的密码,我用的是从环境变量中读取的方式,即在当前目录中新建一个.env文件,文件中写入对应的值。
      MYSQL_ROOT_PASSWORD: 

  slave1_db:
    build:
      context: ./slave1
    container_name: slave1
    ports:
      - "23307:3306"
    volumes:
      - "/var/docker/slave1/:/var/lib/mysql"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 

2. master镜像的构建, Dockerfile如下

# 以mariadb/server镜像为基础,方便自己写的脚本随容器启动运行
FROM mariadb/server
# 添加当前目录中的master_sql.sh到自启动目录
ADD ./master_sql.sh /docker-entrypoint-initdb.d
# 添加当前目录中的master_my.cnf到mysql数据库的配置文件目录中
ADD ./master_my.cnf /etc/mysql/my.cnf
# 定义工作目录(就是进入容器后的默认目录)
WORKDIR /docker-entrypoint-initdb.d

master_sql.sh文件

#! /bin/bash
# mysql账户和密码
USERNAME="root"
USERPASS="123456"
# 用于备份的账户和密码
BACKNAME="backup"
BACKPASS="backup"

# 授予权限
mysql -u${USERNAME} -p${USERPASS} -e "grant replication slave on *.* to '${BACKNAME}'@'%' identified by '${BACKPASS}' " 
# 刷新
mysql -u${USERNAME} -p${USERPASS} -e "flush privileges"
# 查看
mysql -u${USERNAME} -p${USERPASS} -e "show master status\G"

my.cnf文件修改部分(我的是从第30行开始)

[mysqld]
# * My Settings
# 主机id,不能重复
server-id=1
# 开启二进制日志
log_bin=master-bin
# 不同步mysql,information_schema,  performance_schema这几个库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

innodb_flush_log_at_trx_commit=1
binlog_format=mixed

3. slave1镜像的构建, Dockerfile如下

FROM mariadb/server
ADD ./slave1_my.cnf /etc/mysql/my.cnf
ADD ./slave_sql.sh /root
WORKDIR /root

slave_sql.sh文件

#! /bin/bash
#----------以下内容修改成自己的-----------
# mysql账号和密码
USERNAME="root"
USERPASS="123456"
# 用于备份的账号和密码
BACKNAME="backup"
BACKWORD="backup"
# 主机配置信息
HOST='192.168.0.106'
PORT=23306 
#---------------------分割线-----------------
# 在master容器中运行master_sql.sh进行查看并修改
LOG_FILE='master-bin.000003' 
LOG_POS=654 


# 停止复制
mysql -u${USERNAME} -p${USERPASS} -e "stop slave"
# 修改主机配置信息
mysql -u${USERNAME} -p${USERPASS} -e "change master to 
MASTER_HOST = '${HOST}', 
MASTER_USER = '${BACKNAME}',  
MASTER_PASSWORD = '${BACKWORD}', 
MASTER_PORT = ${PORT}, 
MASTER_LOG_FILE = '${LOG_FILE}', 
MASTER_LOG_POS = ${LOG_POS};" 
# 开启复制
mysql -u${USERNAME} -p${USERPASS} -e "start slave"
# 展示配置信息
mysql -u${USERNAME} -p${USERPASS} -e "show slave status\G"

my.cnf文件修改部分(我的是从第30行开始)

[mysqld]
# * My Settings
server-id=2
relay-log-index=slave1-relay-bin.index
relay-log=slave1-relay-bin
relay_log_recovery=1

食用方法

  1. git clone https://github.com/kuprince/mariadb_master_slave_quick.git

  2. 进入mariadb_master_slave_quick文件夹,执行docker-compose up -d即可;

  3. docker-composer exec master_db bash进入master容器,执行sh master_sql.sh查看File和Position的值;

    使用Docker快速搭建Mariadb主从复制环境_第1张图片
    File和Position

  4. docker-composer exec slave1_db bash进入从服务器修改slave_sql.sh中对应的参数,修改完成后保存运行sh slave_sql.sh查看是否配置成功;

其中clear.sh为清理脚本,只有部署失败或者不需要此环境的时候才需要执行,正常部署环境过程中不需要执行此脚本

最后的最后还是附上地址:

https://github.com/kuprince/mariadb_master_slave_quick/tree/master

你可能感兴趣的:(使用Docker快速搭建Mariadb主从复制环境)