docker compose部署安装mysql5.7实现主从复制

注意:由于从word中复制粘贴出来,可能 ' 变成了 ‘

 

创建网络

所有服务处于同一个网络,这里使用bridge

docker network create ep_network

创建timezone文件

使用GMT+8时间

echo 'Asia/Shanghai' > /etc/timezone

mysql安装与主从复制

下载镜像

docker pull mysql:5.7.25

创建数据保存目录mysql-master(主)

mkdir -p /data/mysql5
  1. 编写docker-compose.yml文件
version: '3.7'

services:

    mysql-master:

        container_name: mysql-master

        image: mysql:5.7.25

        networks:

# 注意编号唯一

            - ep_network

        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --server-id=200 --log-bin=mysql-bin

        environment:

            - TZ=Asia/Shanghai

            # mysql密码

            - MYSQL_ROOT_PASSWORD=12345678

        volumes:

            - /etc/localtime:/etc/localtime

            - /etc/timezone:/etc/timezone

            - /data/mysql5:/var/lib/mysql

        ports:

            - 3307:3306



networks:

    ep_network:

        name: ep_network

        external: true

启动

docker-compose up -d

 

使用工具连接mysql, 或者docker exec进入容器, 上面设置用户为: root/12345678

 

执行sql

# 密码

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

show master status;


File, Position后面使用

 

 

mysql-slave(从)

创建数据保存目录

mkdir -p /data/mysql5-slave


编写docker-compose.yml文件

version: '3.7'

services:

    mysql-slave:

        container_name: mysql-slave

        image: mysql:5.7.25

        networks:

            - ep_network

        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --server-id=201 --log-bin=mysql-slave-bin --relay_log=ep-mysql-relay-bin  --read_only=1

        environment:

            - TZ=Asia/Shanghai

            # mysql密码

            - MYSQL_ROOT_PASSWORD=12345678

        volumes:

            - /etc/localtime:/etc/localtime

            - /etc/timezone:/etc/timezone

            - /data/mysql5-slave:/var/lib/mysql

        ports:

            - 3306:3306

           

networks:

    ep_network:

        name: ep_network

        external: true


使用工具连接mysql, 上面设置用户为: root/12345678

 

执行sql

show slave status ;

# mysql-master为主mysql容器的hostname,因为主数据库实际端口已经暴露,也可以填写为主mysql所在物理机器的ip地址

change master to master_host='mysql-master', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000006', master_log_pos=421, master_connect_retry=30;


show slave status ;

此时表示已经连接上了

创建只读用户

CREATE USER 'reporter'@'%' IDENTIFIED BY '123456';

grant select on *.* TO 'reporter'@'%' identified by '123456'; 

flush privileges;

 

测试

主mysql新建数据库,查看从数据库,此时表已经同步。

 

 

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