使用docker部署mysql的主从复制

前言:

客户需要数据库做一个备份,所以这次部署mysql的主从复制,由于测试原因两个mysql服务都安装在一台服务器上,实际部署中一般分开部署。

介绍:

用途:
  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务
条件:
  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同

过程:

创建文件夹
mkdir -pv /lnmp/mysql/master/{data,conf/conf.d,logs}
mkdir -pv /lnmp/mysql/slave/{data,conf/conf.d,logs}
创建配置文件

vi /lnmp/mysql/master/conf/conf.d/master.cnf

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

vi /lnmp/mysql/slave/conf/conf.d/slave.cnf

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin 
运行docker容器

两个run除了名字和端口其他都一样

docker run -d -p 5306:3306 --name mysql_master \
-v /lnmp/mysql/master/conf/conf.d:/etc/mysql/conf.d \
-v /lnmp/mysql/master/logs:/var/log \
-v /lnmp/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:5.7
docker run -d -p 5307:3306 --name mysql_slave \
-v /lnmp/mysql/slave/conf/conf.d:/etc/mysql/conf.d \
-v /lnmp/mysql/slave/logs:/var/log \
-v /lnmp/mysql/slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:5.7
配置
master服务
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql_master #查看master服务的ip并记录
docker exec -it mysql_master /bin/bash #进入容器
mysql -uroot -p123456 #进入mysql服务
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; #创建专门做同步任务的用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; #赋予权限
show master status; #查看状态

显示下图就表示master这边配置成功,记录下File和Position参数待用
在这里插入图片描述

slave服务
  • master_host:使用上面获取的ip
  • master_port: Master的端口号,指的是容器的端口号.
  • master_user:用于数据同步的用户
  • master_password:用于同步的用户的密码
  • master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值
  • master_log_pos:从哪个Position开始读,即上文中提到的Position字段的值
  • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
docker exec -it mysql_master /bin/bash #进入容器
mysql -uroot -p123456 #进入mysql服务
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=617, master_connect_retry=30;
start slave; #开启从服务
show slave status \G #查看开启状态

下图中Slave_IO_Running和Slave_SQL_Running显示Yes就好
使用docker部署mysql的主从复制_第1张图片

测试

在master主数据库中创建新数据库,这时slave从数据库会同步出现。

原创不易,欢迎点赞收藏,转发请注明出处

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