前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker高级篇1-dockeran安装mysql主从复制

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

作者头像
凯哥Java
发布2022-12-20 13:53:41
9080
发布2022-12-20 13:53:41
举报
文章被收录于专栏:凯哥Java凯哥Java

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

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

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

1:安装mysql主从复制

2:安装redis集群

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

大家好,我是凯哥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

修改后,重新启动容器。

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:修改了数据卷挂载的目录

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
b1ec773e369c953086788867cd746710.png
86fd45001b5ee441b8dc280518cb6b1a.png
86fd45001b5ee441b8dc280518cb6b1a.png

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

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

start slave;

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

7fafaff4793774d5d5765a4ffd166f49.png
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学习教程系列汇总】笔记及遇到问题解决文章

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结束语
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档