docker-compose 安装多个mysql并配置主从复制

docker-compose.yml

version: '3'
services:
  mysql-1:
    restart: always
    image: mysql:5.7.28
    container_name: mysql-1
    volumes:
      #      数据库存储,根据实际情况替换
      - /alidata/mysql-1/data:/var/lib/mysql:rw
      #      数据库配置目录,初始安装注释配置文件目录映射
      #- /alidata/mysql-1/conf/mysql.conf.d:/etc/mysql/mysql.conf.d:rw
      #      数据库还原目录 可将需要还原的sql文件放在这里
      - /alidata/mysql-1/source:/docker-entrypoint-initdb.d
    environment:
      #      数据库密码,根据实际情况替换
      - "MYSQL_ROOT_PASSWORD=123456" 
      - "TZ=Asia/Shanghai"
    # network_mode: "host"
    #      映射端口,根据实际情况替换
    ports:
      - 23306:3306
  mysql-2:
    restart: always
    image: mysql:5.7.28
    container_name: mysql-2
    volumes:
      #      数据库存储,根据实际情况替换
      - /alidata/mysql-2/data:/var/lib/mysql:rw
      #      数据库配置目录,初始安装注释配置文件目录映射
      # - /alidata/mysql-2/conf/mysql.conf.d:/etc/mysql/mysql.conf.d:rw
      #      数据库还原目录 可将需要还原的sql文件放在这里
      - /alidata/mysql-2/source:/docker-entrypoint-initdb.d
    environment:
      #      数据库密码,根据实际情况替换
      - "MYSQL_ROOT_PASSWORD=123456" 
      - "TZ=Asia/Shanghai"
    # network_mode: "host"
    #      映射端口,根据实际情况替换
    ports:
      - 23307:3306 
初始安装注释配置目录的映射,
docker-compose -p mysql up -d

  拷贝mysql容器中的配置文件到主机目录中

docker cp mysql-1:/etc/mysql/mysql.conf.d /alidata/mysql-1/conf
docker cp mysql-2:/etc/mysql/mysql.conf.d /alidata/mysql-2/conf

 修改主机目录的配置文件,映射主机目录

version: '3'
services:
  mysql-1:
    restart: always
    image: mysql:5.7.28
    container_name: mysql-1
    volumes:
      #      数据库存储,根据实际情况替换
      - /alidata/mysql-1/data:/var/lib/mysql:rw
      #      修改配置文件后,初配置文件目录映射
      - /alidata/mysql-1/conf/mysql.conf.d:/etc/mysql/mysql.conf.d:rw
      #      数据库还原目录 可将需要还原的sql文件放在这里
      - /alidata/mysql-1/source:/docker-entrypoint-initdb.d
    environment:
      #      数据库密码,根据实际情况替换
      - "MYSQL_ROOT_PASSWORD=123456" 
      - "TZ=Asia/Shanghai"
    # network_mode: "host"
    #      映射端口,根据实际情况替换
    ports:
      - 23306:3306
  mysql-2:
    restart: always
    image: mysql:5.7.28
    container_name: mysql-2
    volumes:
      #      数据库存储,根据实际情况替换
      - /alidata/mysql-2/data:/var/lib/mysql:rw
      #      修改配置文件后,初配置文件目录映射
      - /alidata/mysql-2/conf/mysql.conf.d:/etc/mysql/mysql.conf.d:rw
      #      数据库还原目录 可将需要还原的sql文件放在这里
      - /alidata/mysql-2/source:/docker-entrypoint-initdb.d
    environment:
      #      数据库密码,根据实际情况替换
      - "MYSQL_ROOT_PASSWORD=123456" 
      - "TZ=Asia/Shanghai"
    # network_mode: "host"
    #      映射端口,根据实际情况替换
    ports:
      - 23307:3306

  重新创建容器

docker-compose down
docker-compose -p mysql up -d

  修改主数据库配置(mysql-1:mysqld.cnf):

[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address	= 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 主从复制配置如下

#主服务器唯一Id[必填]
server-id=1
#启用二进制日志[必填]
log-bin=/var/lib/mysql/mysqlbin 
#主机,读写都可以
read-only=0
#设置不要复制的数据库[可选]
#binlog-ignore-db=mysql
#设置需要复制的数据库[可选](输数据库名字) 
binlog-do-db=hlyun_v5_iam
binlog-do-db=hlyun_v5_crm

  修改从数据库配置(mysql-2:mysqld.cnf):

[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
log-error	= /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address	= 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#主从复制配置
#从服务器唯一Id
server-id=2
#启用二进制日志
log-bin=/var/lib/mysql/mysqlbin 
#只读,对拥有super权限的账号是不生效的
read_only = 1

  重启数据库:

 docker-compose restart

  查看主数据库(mysql-1):

show master status;

  

 

 其他命令:

reset master
show master status;

 创建其他用户

CREATE USER 'slave' IDENTIFIED BY '123456';
grant replication slave on *.* to 'slave'@'192.168.1.130' identified by '123456';
flush privileges;

  配置从数据库

change master to master_host='192.168.1.130',
master_user='root',
master_password='123456',
master_log_file='mysqlbin.000001',
master_log_pos=154;

  启动复制服务

start slave

  其他命令:

STOP SLAVE
reset slave 
show slave status

  

 

 进入从库:

docker exec -it mysql-2 /bin/bash

  进入数据库

 mysql -uroot -p123456

  查看状态

show slave status\G

  

 注意:需要手动创建初始数据库

posted @ 2022-11-17 10:48  佚小名  阅读(353)  评论(0编辑  收藏  举报