【Docker】基于Centos7开启MySQL主从复制

本文基于已经下载完毕Docker的选手。
安装完毕Docker之后使用pull命令对mysql进行拉取。

docker pull mysql:5.7.25

拉取完毕之后使用如下命令查看是否拉取成功

docker images

【Docker】基于Centos7开启MySQL主从复制_第1张图片

安装完毕镜像之后,就可以开始启动mysql了。
这里需要知道的一点就是镜像启动之后变为的容器,如果没有进行数据卷备份,那么容器被完毕之后你mysql里的数据自动就丢失了,所以我们这里的mysql的主从复制将基于docker的数据卷技术。

首先使用如下命令配置主数据库,直接在控制台输入即可。
这里无需担心宿主机里没有mydata这个文件夹,docker的数据卷命令会自动创建不存在的文件夹。

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

【Docker】基于Centos7开启MySQL主从复制_第2张图片

上面的命令输入完毕之后,就已经建立好了宿主机和docker容器mysql里的文件映射关系,我们直接在宿主机里进行文件的配置会直接映射到mysql中。
然后使用如下命令创建mysql的配置文件
【Docker】基于Centos7开启MySQL主从复制_第3张图片

vim /mydata/mysql-master/conf/my.cnf

然后在该配置文件中输入如下配置

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=101 

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能

log-bin=mall-mysql-bin  

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M  

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed  

## 二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

保存退出后就可以重启mysql容器了

docker restart mysql-master

【Docker】基于Centos7开启MySQL主从复制_第4张图片

重启完毕容器之后进入容器进行从机登录用户的创建。
【Docker】基于Centos7开启MySQL主从复制_第5张图片
在这里插入图片描述

docker exec -it mysql-master bash 

mysql -u root -p root  # 登录mysql

create user 'slave'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'slave'@'%';

到此位置主机配置完毕,开始从机的配置。
与主机的配置差不多,从机的配置也是先配置数据卷

docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

之后使用如下命令查看容器是否开启。

docker ps 

然后继续使用如下命令进行从机的配置

vim /mydata/mysql-slave/conf/my.cnf

在这里插入图片描述
【Docker】基于Centos7开启MySQL主从复制_第6张图片
配置完毕之后重启从机mysql

docker restart mysql-slave

然后进入从数据库

docker exec -it mysql-slave bash
mysql -u root -p root

之后进入主数据库查看主数据库状态

show master status;

【Docker】基于Centos7开启MySQL主从复制_第7张图片
从数据库中执行如下命令

change master to master_host='192.168.146.119', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000002', master_log_pos=1032, master_connect_retry=30;
其中host要改为你主机的ip地址,log_file和log_pos也要使用你主机的属性
这里默认大家了解mysql的主从复制

在这里插入图片描述
此时从数据库中查看主从复制状态

show slave status\G;

两个no说明此时还没开启主从复制,在从数据库中输入开启主从复制

start slave;

【Docker】基于Centos7开启MySQL主从复制_第8张图片
【Docker】基于Centos7开启MySQL主从复制_第9张图片
到此位置主从复制已经开启了,此时需要进行测试。
主从复制此时3307是主机,3308是从机,那么主机写入的数据会同步到从机,从机写入的数据不会同步到主机。
创建一个数据库和表,然后向表中插入数据。
【Docker】基于Centos7开启MySQL主从复制_第10张图片
主机的操作
【Docker】基于Centos7开启MySQL主从复制_第11张图片
从机的操作,从机也可以发现已经有数据了,你也可以向从机插入数据,会发现主机中并没有同步从机的数据,剩下的不多赘述,此时主从同步已经完成了。
【Docker】基于Centos7开启MySQL主从复制_第12张图片

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