docker-compose mysql主从复制

docker-compose mysql主从复制_第1张图片

主要基于mysql的二进制文件来进行主从复制

服务器准备(一台服务器,自己电脑也行,我用的阿里云服务器,ip地址我就用127.0.0.1代替了)

主服务器master:127.0.0.1

从服务器slave:127.0.0.1

1.下载docker 并安装docker-compose

2.新建文件夹如下

说明:

master相关文件夹(这几个是容器挂载的):

conf-master (mysql配置文件) data-master(mysql数据卷) logs-master(mysql日志文件)

slave相关文件夹(这几个是容器挂载的):

conf-slave (mysql配置文件) data-slave(mysql数据卷) logs-slave(mysql日志文件)

docker-compose.yml 配置文件

3.docker-compose.yml配置如下(这里是用了mysql5.7的数据库)

version: "2"
services:
   mysql-master:
     image: mysql:5.7
     ports:
       - 8406:3306
     volumes:
       - ./conf-master:/etc/mysql/conf.d 
       - ./data-master:/var/lib/mysql
       - ./conf-master:/etc/mysql/mysql.conf.d
     environment:
       MYSQL_ROOT_PASSWORD: 123456
       MYSQL_DATABASE: db
       MYSQL_USER: user
       MYSQL_PASSWORD: user123
     restart: always
     container_name: mysql-master
   mysql-slave:
     image: mysql:5.7
     ports:
       - 8407:3306
     volumes:
       - ./conf-slave:/etc/mysql/conf.d
       - ./data-slave:/var/lib/mysql
       - ./conf-slave:/etc/mysql/mysql.conf.d
     environment:
       MYSQL_ROOT_PASSWORD: 123456
       MYSQL_DATABASE: db
       MYSQL_USER: user
       MYSQL_PASSWORD: user123
     restart: always
     container_name: mysql-slave

 

4.启动docker-compose   

docker-compose up -d

5.查看容器启动情况

 

如果没有启动成功 docker-logs 容器id   进行定位

客户端登陆是否正常

6.配置主从

配置主从服务器

分别在conf-master 和conf-slave下建立my.cnf

配置分别如下:

[mysqld]

server-id=1
log-bin=mysql-bin
binlog_format=MIXED
max_binlog_size = 124M
expire_logs_days = 3
binlog_ignore_db = mysql,performance_schema,information_schema,sys
 

 

[mysqld]
server_id = 2
log_bin = mysql-bin
binlog_format=MIXED
max_binlog_size = 124M
expire_logs_days = 3
replicate-ignore-db=mysql,performance_schema,information_schema,sy
relay_log_recovery = 1
log_slave_updates = 1

 

编辑好后分别重启对应容器

在客户端查看master的主从状态

查看主库的状态:show master status;

mark

 

然后在Master数据库创建数据同步用户 (创建好后我用root用户也可以同步成功)

mysql->grant replication slave on *.* to 'slave'@'%' identified by '123456';

7.从服务器执行如下sql,连接master,其实是在读master的文件日志来同步数据

 

change master to 
master_host='127.0.0.1', 
master_user='slave', 
master_password='123456', 
master_port=8406, 
master_log_file='mysql-bin.000001',
master_log_pos= 0, 
master_connect_retry=30;

命令说明:

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

8.在Slave 中的mysql终端执行

show slave status;

用于查看主从同步状态。

docker-compose mysql主从复制_第2张图片

从库使用sql,开启主从复制过程,然后再次查询主从同步状态:

start slave;

查看从状态

show slave status;

 docker-compose mysql主从复制_第3张图片

 

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

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