CentOS7中使用Docker进行MySQL主从复制【论文式教程】

news2024/11/24 7:29:06

1、安装Docker

卸载docker

sudo yum remove docker*

安装 yum-utils 工具集,它提供了一些额外的命令和功能,帮助你更好地管理 YUM 软件包管理器。其中包含了一个工具叫做 yum-config-manager,它用于管理 YUM 配置,包括软件仓库源。

sudo yum install -y yum-utils

通过 yum-config-manager 添加一个新的软件仓库源,这里是阿里云的 Docker 仓库源。用国外的太慢,国内好,国内快。

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker的核心组件并制定版本

sudo yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io-1.4.3

Docker 实际上是一个包含多个组件的平台,这些组件一起协作以实现容器化应用程序的创建、管理和运行。在这些组件中,最核心的就是那三个组件:Docker 引擎、Docker 命令行工具和容器运行时。

  1. Docker 引擎(Docker Engine): 也被称为 Docker 守护进程,是 Docker 平台的核心引擎。它负责管理容器的创建、运行和停止,以及与容器镜像的交互。Docker 引擎使用 Linux 内核的容器特性来实现轻量级的隔离,使得不同的容器能够在同一个主机上运行,而彼此之间相互隔离。
  2. Docker 命令行工具(Docker CLI): 这是用于与 Docker 引擎进行交互的命令行界面。通过 Docker CLI,用户可以使用各种命令来管理容器、镜像、网络、卷等。它是用户与 Docker 平台进行交互的主要方式。
  3. 容器运行时(Container Runtime): 这个组件负责实际运行容器的进程。它负责管理容器的生命周期、文件系统、进程隔离等。Docker 最初使用的容器运行时是 dockerd(Docker 守护进程)和 containerd,后来演化为将容器运行时抽象为 containerd,而 Docker 引擎则使用 containerd 来管理容器。

设置系统启动时自动启动Docker服务

sudo systemctl enable docker --now

配置Docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

sudo: 以超级用户(root)权限执行命令。

tee: 这个命令用于读取标准输入并将其写入文件和标准输出。通过管道操作,它可以用来将内容写入文件

/etc/docker/daemon.json: 这是指要写入的目标文件的路径,即 Docker 守护进程的配置文件 daemon.json

<<-'EOF': 这是一个 Here Document,允许你在一个多行字符串中定义内容,直到遇到标记 EOF 为止。在这里,JSON 配置将在这个 Here Document 中定义。

重启系统服务

sudo systemctl daemon-reload

因为刚刚修改了系统的配置文件,就是/etc/下的。所以得重启生效

重启docker服务让配置生效

sudo systemctl restart docker

重启docker注意会重启所有的容器,所以重启前确保重要的数据都保存了。

2、安装MYSQL主服务

启动容器,会自动拉取MYSQL镜像的。

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

docker run: 这是启动 Docker 容器的命令。

-p 3301:3306: 这是端口映射选项。它将容器的 3306 端口映射到主机的 3301 端口,这样你可以通过主机的 3301 端口访问容器中的 MySQL 服务。

--name mysql-master: 这为容器指定了一个名字,即 mysql-master

-v /mydata/mysql-01/log:/var/log/mysql: 这是将主机上的 /mydata/mysql-01/log 目录挂载到容器内的 /var/log/mysql 目录,用于存储 MySQL 日志。

-v /mydata/mysql-01/data:/var/lib/mysql: 这是将主机上的 /mydata/mysql-01/data 目录挂载到容器内的 /var/lib/mysql 目录,用于存储 MySQL 数据。

-v /mydata/mysql-01/conf:/etc/mysql/conf.d: 这是将主机上的 /mydata/mysql-01/conf 目录挂载到容器内的 /etc/mysql/conf.d 目录,用于存储 MySQL 配置文件。

-e MYSQL_ROOT_PASSWORD=root: 这是设置 MySQL 的 root 用户密码为 root

--restart=always: 这是设置容器在退出后总是自动重启。

-d mysql:5.7: 这是指定要运行的容器镜像,即 MySQL 5.7 版本的官方镜像。

将文件挂载到容器内的文件,就可以做到修改文件,容器中对应的配置文件也会修改。而且还是双向影响的。而且无需重启容器即刻生效。

以下为验证:

image.png

配置MYSQL容器

mkdir -p /mydata/mysql-01/conf && vim /mydata/mysql-01/conf/default.cnf

配置文件的文件名无所谓,内容如下:

[client]

default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

[mysqld]

init_connect=‘SET collation_connection = utf8mb4_unicode_ci’

init_connect=‘SET NAMES utf8mb4’

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

skip-character-set-client-handshake

skip-name-resolve

server-id=1

##开启二进制日志

log-bin=mysql-bin

创建同步用户

需要在主服务容器中创建一个用户,专门用来做同步工作,以便从服务器通过这个用户连接到主服务容器进行复制操作。从服务器到时候会复制主服务器中的二进制日志,然后将这些二进制日志应用到自己的数据库中,从而实现数据复制。从服务会一直监控主服务的二进制日志变化,然后一直获取新的二进制日志以保持数据一致。

这些二进制日志记录了主服务容器的数据变更操作。

资料:在这个过程中,从服务器不断地连接到主服务器,请求并应用主服务器的二进制日志,以保持数据同步。需要注意的是,网络连接的稳定性和延迟对复制的效率和性能有影响,因此在配置复制时要考虑网络因素。
此外,复制过程中可能会出现一些问题,比如网络故障、主从服务器的时间差异等,这些问题可能导致复制中断或数据不一致。

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

image.png

REPLICATION SLAVE:这个权限允许用户作为从服务器连接到主服务器并复制主服务器的二进制日志,以保持数据同步。

REPLICATION CLIENT:这个权限允许用户作为从服务器连接到主服务器,以获取有关主服务器状态和二进制日志的信息。

*.* 表示在所有数据库和所有表上设置这些权限。'username'@'%' 表示允许来自任何主机的连接使用这个用户名。

3、安装MySQL从服务1

新建mysql主服务器容器1,起名mysql-slave1

docker run -p 3302:3306 --name mysql-slave1 \
-v /mydata/mysql-slave1/log:/var/log/mysql \
-v /mydata/mysql-slave1/data:/var/lib/mysql \
-v /mydata/mysql-slave1/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
-d mysql:5.7

配置MYSQL容器

mkdir -p /mydata/mysql-slave1/conf && vim /mydata/mysql-slave1/conf/mysql-salve1.cnf

配置文件的文件名无所谓,内容如下:

[client]

default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

[mysqld]

init_connect=‘SET collation_connection = utf8mb4_unicode_ci’

init_connect=‘SET NAMES utf8mb4’

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

skip-character-set-client-handshake

skip-name-resolve

server-id=2

进入主MySQL容器中,查看主服务二进制日志状态

image.png

再进入从数据库中配置主从配置

跟从服务器说好你的老大是谁,认好老大,看清谁是主库,好跟随主库进行变化。

change master to master_host='主服务容器IP', master_user='你在主服务创建的同步用户名', master_password='用户密码', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154, master_connect_retry=30;

master_host :Master 的地址,指的是容器的独立 ip, 可以通过 docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ 容器名称 | 容器 id 查询容器的 ip

master_log_file=‘mysql-bin.000001’, master_log_pos=154, master_connect_retry=30;

这三个值抄上一步结果

在从数据库中查看主从复制状态

show slave status \G;

image.png

Slave_IO_Running: 这个字段指示 I/O 线程的运行状态。如果值为 “Yes”,表示 I/O 线程正在运行,I/O线程运行说明,从数据库正在读取主服务的二进制日志,并传输这些二进制日志到从服务器。

Slave_SQL_Running: 这个字段指示 SQL 线程的运行状态。如果值为 “Yes”,表示 SQL 线程正在运行,这意味着从服务器正在应用主服务器的二进制日志事件。

Seconds_Behind_Master: 这个字段表示从服务器相对于主服务器的延迟时间(以秒为单位)。如果值为 0 或接近 0,表示从服务器与主服务器数据同步较为实时,这表明主从复制成功

在从服务器容器中开启主从

start slave;

image.png

一些bug

Cannot connect to the Docker daemon

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Docker 守护进程没有在运行。Docker 守护进程负责管理和监控 Docker 容器的创建、运行和停止。

直接启动docker的守护进程:sudo systemctl start docker

show master status 结果是empty set

image.png

估计就是没有启用二进制日志,或者没有产生二进制日志。

image.png
解决:

进入主服务mysql的配置文件,开启日志

image.png

重启mysql服务生效配置

docker restart mysql-master

一定也要加上server-id的配置,因为我就吃亏了,一开始我只配置了log-bin的,结果启动容器会报错,容器会一直处于重启状态restarting。然后我查看容器的日志发现提示我加上server-id。

查看日志:docker logs mysql-master

image.png

change master出错

image.png

image.png
改完重启:docker restart mysql-slave1

补习

在 MySQL 的二进制日志中,每个操作(插入、删除、更新)都被记录为一个事件,并且每个事件都有一个唯一的位置标识,通常被称为“二进制日志位置”(Binary Log Position)。master_log_file 参数设置为 “mysql-bin.000003”,而 master_log_pos 参数设置为 “1552”。这意味着从服务器将从 “mysql-bin.000003” 这个二进制日志文件的位置 “1552” 处开始复制数据。

change master to master_host=‘172.17.0.2’, master_user=‘copyUser’, master_password=‘123456’, master_port=3306, master_log_file=‘mysql-bin.000003’, master_log_pos=1552, master_connect_retry=30;
这个命令就是说让从数据库到mysql-bin.000003日志中从1552开始读取日志事件进行复制。

show master status;显示的file就是写入的二进制文件名,position就是最后一个事件的位置。

在这里插入图片描述

这是MySQL的二进制日志文件,这边他设计的是多个二进制日志文件, 当事件到达一定量或者一定时间后,就会创建新的二进制文件存,这样避免一个巨大的日志文件影响性能和管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉:比SAM快50倍的分割一切视觉模型FastSAM

目录 引言 1 FastSAM介绍 1.1 FastSAM诞生 1.2 模型算法 1.3 实验结果 2 FastSAM运行环境构建 2.1 conda环境构建 2.2 运行环境安装 2.3 模型下载 3 FastSAM运行 3.1 命令行运行 3.1.1 Everything mode 3.1.2 Text prompt 3.1.3 Box prompt (xywh) 3.1.4 Points p…

Docker容器学习:部署安装Docker基础使用

目录 1、安装Docker-CE 1&#xff09;参考阿里云的yum安装 2&#xff09;二进制安装docker&#xff08;推荐、生产环境使用较多&#xff09; 3&#xff09;配置Docker镜像加速 2、下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 1&#xff09;先查看我们所需的镜像…

如何通过人工智能和自动化提高供应链弹性?

全球供应链中的数字化转型已经引起了广泛关注&#xff0c;尽管在过去的十年中&#xff0c;这一话题被广泛讨论&#xff0c;但许多公司仍然对如何实现这一不明确的目标感到困惑。人们普遍认识到这种转变的重要性&#xff0c;而新冠疫情及其带来的巨大影响也为行业向数字化转型方…

数字生意,经九长兴 | 带您一起回顾秦丝9年成长历程

今年是秦丝科技成立的第9年&#xff0c;9年前我国90%以上的商家处于原始手工记账状态&#xff0c;急需SaaS软件实现数字化转型&#xff0c;高效管理门店&#xff0c;秦丝科技创始人主动扛起了帮中小商家数字化转型的重任。 经过9年的发展&#xff0c;秦丝目前已经成功帮助200万…

drools8尝试

drools7升级到drools8有很大很大的变更.几乎不能说是一个项目了. 或者说就是名字相同的不同项目, 初看下来变化是这样 两个最关键的东西都retired了 https://docs.drools.org/8.42.0.Final/drools-docs/drools/migration-guide/index.html business central变成了一个VS code…

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览…

【计算机网络】日志与守护进程

文章目录 日志日志的创建logmessage 函数日志左边部分实现日志右边部分实现 完整代码log.hpp(整体实现)err.hpp (错误信息枚举&#xff09; 守护进程PGID SID TTY 的介绍shell中控制进程组的方式结论 为什么要有守护进程存在&#xff1f;守护进程的创建使用守护进程的条件守护进…

centos7.6安装、卸载openssh

1.卸载openssh 执行 rpm -qa openssh*查看是否已经安装过了。 rpm -qa openssh* 依次卸载&#xff1a; yum remove openssh-server-7.4p1-23.el7_9.x86_64 yum remove openssh-7.4p1-23.el7_9.x86_64 或者使用&#xff1a;yum remove openssh-* 全部卸载掉 yum remove opens…

客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线

客户背景 中圣科技&#xff08;江苏&#xff09;股份有限公司&#xff08;以下简称“中圣科技”&#xff09;&#xff0c;是一家以技术研发为驱动&#xff0c;以清洁能源核心成套装备和节能环保工程服务为支撑的科技创新型企业。其以南京为核心运营基地&#xff0c;与当地政府…

【云原生】3分钟快速在Kubernetes1.25部署Prometheus2.42+Grafana9.5.1+Alertmanager0.25

文章目录 1、简介2、GitHub地址3、环境信息4、安装5、访问Grafana1、简介 Prometheus-operator帮助我们快速创建Prometheus+Grafana+Alertmanager等服务,而kube-prometheus更加完整的帮助我们搭建全套监控体系,这包括部署多个 Prometheus 和 Alertmanager 实例, 指标导出器…

Ubuntu20 安装 libreoffice

1 更新apt-get sudo apt-get update2 安装jdk 查看jdk安装情况 Command java not found, but can be installed with:sudo apt install default-jre # version 2:1.11-72, or sudo apt install openjdk-11-jre-headless # version 11.0.138-0ubuntu1~20.04 sud…

发布 net 项目 到 Docker

背景 因为发布到 centOS8 使用 screen -S 可以&#xff0c;想开机自启 使用 nohup 命令有启动不起来。环境问题不好找&#xff0c;就想尝试用 docker 运行 步骤 在生成的 Dockerfile 文件里增加修改时区指令 因为我们用的都是北京时间所以 创建镜像的时候就调整好 #设置时间…

SQLSTATE[IMSSP]: The active result for the query contains no fields.

我的是SQL server 报错场景&#xff0c;代码&#xff1a; $psendmx_sql"SET IDENTITY_INSERT PSENDMX ON;INSERT INTO psendmx (DJBH,MIBH,MXBH,SPDM,GG1DM,GG2DM,SL,SL_2,CKJ,ZK,DJ,DJ_1,JE,HH) VALUES {$mx_values};SET IDENTITY_INSERT PSENDMX OFF;"; $a$db_er…

算法通关村第九关——透彻理解二分查找

1.前言 常见的查找算法有顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找等。如果进行归类&#xff0c;那么二分查找、插值查找&#xff08;一种查找算法&#xff09;以及斐波那契查找都可以归为插值查找&#xff08;大类&#xff09;。而插值查找…

macOS上编译obs-studio

前言 最近基于obs的1个二开程序&#xff0c;需要移植到macOS平台上&#xff0c;由于遇到些问题&#xff0c;本文记录下如何在macOS上配置&编译&运行obs程序完整过程。 下载 首先下载cmake-gui工具&#xff0c;下载CMAKE&#xff0c;选择对应macOS平台的cmake版本&…

过来人经验,PMP考试第七版要怎么学?

第七版没有大家说的那么难&#xff0c;根据考纲来看&#xff0c;一半内容将考查预测型项目管理方法&#xff0c;一半考查敏捷或混合型方法 &#x1f308;备考建议是&#xff1a;先学第六版和敏捷&#xff0c;再来学第七版&#xff0c;第七版其实可以理解为第六版的升级&#xf…

java八股文面试[JVM]——垃圾回收

参考&#xff1a;JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 GC垃圾回收面试题&#xff1a; JVM内存模型以及分区&#xff0c;需要详细到每个区放什么 堆里面的分区&#xff1a;Eden&#xff0c;survival from to&#xff0c;老年代&#xff0c;各…

7-模板过滤器

一. 过滤器 过滤器: 过滤器本质就是函数 # 模板语法中过滤器: {{ 变量名| 过滤器 }} {{ 变量名| 过滤器(*args) }}二. 常见的过滤器 str 过滤器的相关操作: safe :禁用转义 capitalize: 单词的首字母大写 lower 和 upper: 大小转换 title : 一句话中的每个单词的首字母大写 r…

机器学习深度学习——NLP实战(自然语言推断——注意力机制实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;自然语言推断——数据集&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…

科脉收银系统中了360勒索病毒怎么办?勒索病毒解密,数据恢复

在商超、大卖场、连锁便利店和餐饮店的收银系统当中&#xff0c;科脉绝对是一个不得不提的产品。正因为其在市场当中有着极高的占有率&#xff0c;才使得其成为了勒索病毒攻击的主要目标之一。近几日&#xff0c;云天数据恢复中心就接到好多客户的咨询&#xff0c;在这些客户当…