docker-compose mysql主从复制

105353509.jpg

主要基于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;

用于查看主从同步状态。

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

start slave;

查看从状态

show slave status;

 

 

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值