docker-compose 安装mysql主从

文章目录

  • 一、准备
      • 目录文件:
  • 二、编排安装
      • 清理容器卷数据关联目录
      • 进入主Mysql数据库
      • 创建数据同步用户
      • 进入从数据库
      • 配置主从连接
      • 配置成功


一、准备

目录文件:

docker-compose 安装mysql主从_第1张图片

docker-compose.yml

version: '3'
services:
  mysql-master:
    image: mysql:5.7
    container_name: mysql-master
    environment:
      - MYSQL_ROOT_PASSWORD=root  
      - MYSQL_LOG_CONSOLE=true
      - privileged:true  
    volumes:
      - /home/test/master/log:/var/log/mysql
      - /home/test/master/data:/var/lib/mysql
      - /home/test/master/conf:/etc/mysql
    networks: 
      - mysql-net
    ports:
      - "6001:3306"
  mysql-slave:
    image: mysql:5.7
    container_name: mysql-slave
    environment:
      - MYSQL_ROOT_PASSWORD=root  
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /home/test/slave/log:/var/log/mysql
      - /home/test/slave/data:/var/lib/mysql
      - /home/test/slave/conf:/etc/mysql
    depends_on:
      - mysql-master      
    networks:
      - mysql-net
    ports:
      - "6002:3306"
networks:
  mysql-net:

/master/conf/my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

/slave/conf/my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1


提示:请务必保证 容器关联得数据卷,是干净的,无残留数据。
例:/home/test/master/data 为空路径或不存在此路径,因为如果多次重启或者执行docker-compose,会导致 容器卷,残留数据,导致Mysql数据库残留bin-log数据和用户数据,导致编排过程出错,需要排查

二、编排安装

清理容器卷数据关联目录

rm -rf /home/test/master/data 
rm -rf /home/test/slave/data 
cd /home/test
docker-compose up -d

进入主Mysql数据库

docker exec -it  00f40; #进入docker容器
mysql -uroot -proot ;#进入Mysql
show master status;

docker-compose 安装mysql主从_第2张图片
如果有数据,起码master 是正常的了。正确的把/test/master/conf/my.cnf 关联上mysql

创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

在这里插入图片描述

进入从数据库

进入方式参考 进入主数据库
在这里插入图片描述
从上图可以看到,从数据库并未连接到主数据库

配置主从连接

change master to master_host='master ip', master_user='slave', master_password='123456', master_port=6001, master_log_file='mall-mysql-bin.000003', master_log_pos=154, master_connect_retry=30;

提示:master_host 主数据库的ip, master_port 的端口
master_log_file :在show master stauts; 图中的,File文件名称,master_log_pos 对应图的 Position
docker-compose 安装mysql主从_第3张图片

show slave status \G;

得到下图,可知主从已经配置上了。
docker-compose 安装mysql主从_第4张图片

start slave #启动主从复制

配置成功

Slave_IO_Running:Yes;
Slave_SQL_Running:Yes;

docker-compose 安装mysql主从_第5张图片

提示:注意 mysql 镜像版本不同 ,conf的生效路径不一样,此文章针对,mysql 5.7 生效路径/etc/mysql

参考连接 :docker搭建mysql主从复制

你可能感兴趣的:(mysql,mysql,docker,数据库)