依然是用docker-compose和dockerfile来创建的mysql:5.7的镜像和容器
还是贴出来吧
文件目录
一个叫mysql的文件夹,里面放了4个挂载目录,一个dockerfile ,一个docker-compose.yml
dockerfile内容
只是列举了一下master的内容,我这里的设定是master端口使用3307,其他的slave使用3308和3309,其实都是3306就可以,只要在映射端口时宿主机的端口保持不同就行,比如 -p 3307:3306FROM mysql:5.7
ENV MYSQLDUMPDIR /mysql
EXPOSE 3307
RUN mkdir -p $MYSQLDUMPDIR && mkdir /home/mysql
docker-compose.yml
version: "3.2"
services:
mysql:
# networks:
# - wyc
build:
context: ./
dockerfile: ./dockerfile
restart: always
image: wyc_mysql
container_name: wyc_mysql_01
ports:
- "3307:3307"
volumes:
- "/home/fd/wycplus/mysql/conf.d/:/etc/mysql/conf.d/"
- "/home/fd/wycplus/mysql/data/:/var/lib/mysql/"
- "/home/fd/wycplus/mysql/log/:/var/log/mysql/"
- "/home/fd/wycplus/mysql/init.d/:/docker-entrypoint-initdb.d/"
environment:
# - MYSQL_USER= 'root'
# - MYSQL_PASS= 'root'
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOSE: '%'
MYSQL_DATABASE: wyc_test
TZ: Asia/Shanghai
以上都是其他篇幅的内容,不做多解释。以下正式开始主从复制的用法,用虚拟机克隆了3个,一个master,两个slave,master使用3307端口,两个slave分别使用3308 3309接口,master的server-id=1,两个slave的server-id 分别是2和3
1.修改配置文件
修改master和多个slave的日志:
my.conf (我的是mysql.conf,其实都一样)中加入以下内容
其中只需要改变server-id 就可以,其他的不用变,server-id不能相同,比如主用1,两个从分别是2 和3
#配置主从复制
server-id=1
#同步用的日志,这里我试过改成带路径的,结果用docker启动后一直显示正在启动,没有启动完成,所以就别改了
log-bin=mysql-bin
#当主库日志有变化时,从节点自动更新
log-slave-updates
#从节点跳过那些日志中有错误的操作
slave-skip-errors=all
2.在master上查看logfile和logpos
然后启动master服务,然后 使用show master status
可以看到log_file 以及log_pos,这两个是为了在slave上使用的
3.在各个slave上设置主节点
change master to
master_host='192.168.127.10',
master_port=3307,
master_user='root',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=154;
注意logfile和logpos要与刚才在master上看到的相同,否则同步会有问题。
4.在slave上查看是否连接是否成功
如下图所示show slave status
show variables like "server_id"
查看当前mysql的server-id,注意sql语句是下挂线,conf文件中是减号。