Centos7 Docker配置Mysql主从复制

前言

mysql主从复制配置


一、需要先安装docker,可以参考其他文章安装,这里不介绍了。

二、配置步骤如下:

1.首先拉取mysql的镜像,我这里使用的是mysql5.7

docker pull mysql:5.7

2.使用此镜像配置两个容器

Main(主):

docker run -p 3306:3306 --name mysql_main -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

From(从):

docker run -p 3307:3306 --name mysql_from -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Master对外映射端口号是3306,Slave对外映射端口号是3307。因为docker容器之间的ip是相互独立的,我们这里容器里面的端口号就都为3306,尽量不要修改。

3.查看Mysql是否成功运行

通过以下命令查看运行服务

docker ps -a

运行结果如下表示已经运行

再通过本地的Navicat测试连接
在这里插入图片描述

4.配置容器

4.1 Main(主)
通过以下命令进入容器内部,进入到 /etc/mysql 目录下,编辑 my.cnf 文件

vim 命令可能会报出 bash: vim: command not found。
可以先执行 apt-get update 后再执行 apt-get install vim 进行安装。之后就可以使用vim命令了。

docker exec -it 容器ID/名字 /bin/bash

cd /etc/mysql

vim my.cnf
进入编辑将以下内容复制到里面去
[mysqld] 
## 同一局域网内注意要唯一 
server-id=100 
## 开启二进制日志功能,可以随便取(关键) 
log-bin=mysql-bin
配置完成后需要重新启动mysql服务
service mysql restart
重启mysql服务会导致docker容器停止运行,需要启动一下容器
docker start mysql-main
下一步需要登录Main(主)数据库,然后创建同步用户,授权SLAVE REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
4.2 From(从)
同Main(主)一样,进入到 /etc/mysql 目录下,编辑 my.cnf 文件,并把以下内容复制进去
[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

配置完成后一样需要重启服务,通Main一样

4.3 链接Main(主)和From(从)
进入Main数据库后,输入以下命令
show master status

得到以下表格
在这里插入图片描述

在From(从)数据库中执行以下命令
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='binlog.000007', master_log_pos= 1084, 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秒
在这里插入图片描述

在From(从)数据库执行以下命令查看主从同步服务状态
show slave status \G

在这里插入图片描述
此时 SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没开启主从复制过程。输入 start slave 命令开启,再次输入上述命令会发现 SlaveIORunning 和 SlaveSQLRunning 都是Yes。如果SlaveIORunning为Connecting 需要排查一下以下原因:

  IP配置错误
  
  网络不通
  
  防火墙端口未开放
  
  mysql账户密码错误
  
  mysql主从机配置文件写错
  
  配置从机连接语法错误
  
  主机未开放账户连接权限

我这里一直连不上,然后在From(从)容器里面通过 mysql -uslave -p123456 -h172.17.0.3 连接Main(主)发现IP错了导致一直连不上。

5.测试

我在Main(主)上建立了一个数据库,一张表。刷新以下From(从),发现From(从)也有了这张表,至此完成。
在这里插入图片描述

6.总结

MySql除了这个主从复制外,还可以主从从…,主主复制等等可以根据业务自己配置,不过也都大差不差,我这里就不做详解了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值