docker高级篇1-dockeran安装mysql主从复制

  • 作者: 凯哥Java(公众号:凯哥Java)
  • Docker
  • 时间:2022-12-16 15:01
  • 4243人已阅读
简介 本文咱们就先来实现第一个案例:mysql主从复制

🔔🔔好消息!好消息!🔔🔔

有需要的朋友👉:微信号 kaigejava2022

大家好,咱们前面通过十篇的文章介绍了docker的基础篇,从本篇开始,咱们的《docker学习系列》将要进入到高级篇阶段(基础篇大家可以查看之前发布的文章)。

咱们先来介绍:docker复杂方式安装软件。通过按照mysql\redis两个案例来讲解

Docker复杂安装说明,两个案例:

1:安装mysql主从复制

2:安装redis集群

插播一条


下面这个公众号是凯哥开发的,福利号:外卖、买菜、电商领Q的

67db93da54df097b6017fa8666079592.png


本文咱们就先来实现第一个案例:mysql主从复制

f2f6cd061076b10def7e4d82efea9fc0.png

大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~

安装mysql主从搭建步骤:

1:新建主服务器容器实例3307

命令

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

2:进入/mydata/mysql-master/conf目录下新建my.cnf

修改配置:

cd /mydata/mysql-master/conf

vim 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

注意文件权限应该是644

3:修改完配置之后重启master实例

修改完mysql配置后,记得重启实例

docker restart mysql-master

如果重启失败,查看是否因为my.conf文件写错导致。

或者查看错误日志: docker logs 容器id

45ae4951650045b830ac9fd85d270495.png

修改后,重新启动容器。

6bd2e69bbd7b3425623a5977f1cc6416.png

4:进入mysql-master容器

进入到mysql-master。然后登录mysql试试。

在前台显示进入容器:

docker exec -it mysql-master /bin/bash

进入容器后,登录mysql:

mysql -uroot -p

5:master容器实例内创建数据同步用户

mysql创建用户及密码命令:

命令模板:CREATE USER '用户名'@'可以访问的ip' IDENTIFIED BY '密码'

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

赋权命令模板:GRANT REPLICATION 权限 on 访问ip端口 TO '用户名'@‘ip’

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

6:新建从服务器容器实例3308

命令:

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

区别:

1:修改了宿主机的端口映射

2:修改了容器名称

3:修改了数据卷挂载的目录

5ebf4f748e01a2a5eef0db00072b4786.png

7:进入/mydata/mysql-slave/conf目录下新建my.cnf

修改配置:

cd /mydata/mysql-slave/conf

vim my.cnf

## 输入以下内容

[mysqld]

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

server_id=102

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

binlog-ignore-db=mysql  

## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用

log-bin=mall-mysql-slave1-bin  

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

binlog_cache_size=1M  

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

binlog_format=mixed  

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

expire_logs_days=7  

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

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

slave_skip_errors=1062  

## relay_log配置中继日志

relay_log=mall-mysql-relay-bin  

## log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1  

## slave设置为只读(具有super权限的用户除外)

read_only=1

重新赋权

8:修改完配置后重启slave实例

修改完mysql配置后,记得重启实例

docker restart mysql-slave

9:在主数据库这查看主从同步状态

在mysql主库的镜像中,进入主mysql,然后执行命令:

show master status;

10:进入mysql-slave容器

进入到mysql-master。然后登录mysql试试。

在前台显示进入容器:

docker exec -it mysql-slave /bin/bash

进入容器后,登录mysql:

mysql -uroot -p

11:在从数据库中配置主从复制

在mysql从库的镜像中,进入从mysql,然后执行命令公式:

change master to master_host='宿主机ip', master_user='在主库上创建用于主从同步的用户账号', master_password='在主数据库创建的用于同步数据的用户密码', master_port=master库的端口, master_log_file='masterlog文件名称', master_log_pos=当前开始点, master_connect_retry=重试;

公式说明:见注释

master_host:主数据库的ip地址

master_port:主数据库的端口

master_user:在主数据库创建的用于同步数据的用户账号

master_password:在主数据库创建的用于同步数据的用户的密码

master_log_file:指定从数据库要复制数据的日志文件。通过查看主数据库的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数

master_connect_retry:连接失败充值的时间间隔,单位:秒

12:在从数据库中查看主从同步状态

查看主从同步第二中方法


show slave status \G;

b1ec773e369c953086788867cd746710.png

86fd45001b5ee441b8dc280518cb6b1a.png

13:在从数据库中开启主从同步

进入从数据库的mysql后,开启主从同步:

start slave;

14:查看从数据库状态发现已经同步

7fafaff4793774d5d5765a4ffd166f49.png

15:主从复制测试


结束语

如操作有问题欢迎去 我的 个人博客(www.kaigejava.com)留言或者   微信公众号(凯哥Java)留言交流哦。


直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

【图文教程】Windows11下安装Docker Desktop

【填坑】在windows系统下安装Docker Desktop后迁移镜像位置

【Docker学习系列】Docker学习1-docker安装

【Docker学习系列】Docker学习2-docker设置镜像加速器

【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?

【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令

【Docker学习系列】Docker学习系列3:常用命令之容器命令

【Docker学习系列】Docker学习4-常用命令之重要的容器命令

【Docker教程系列】Docker学习5-Docker镜像理解

【Docker教程系列】Docker学习6-Docker镜像commit操作案例

【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云

【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

「Docker学习系列教程」9-Docker容器数据卷介绍

「Docker学习系列教程」10-Docker容器数据卷案例

Docker学习11-Docker常规方式安装软件

【Docker学习教程系列汇总】笔记及遇到问题解决文章




TopTop