mysql在服务器中的主从复制Linux下

news2024/11/25 2:58:50

mysql在服务器中的主从复制Linux下

    • 为什么要进行主从复制
    • 主从复制的原理
    • 主从复制执行流程
      • 操作步骤
        • 主库创建
        • 从库创建
      • 测试

为什么要进行主从复制

  1. 在业务中通常会有情况,在sql执行时,将表锁住,导致不能进行查询,这样就会影响业务的正常运行,这个时候可以使用主从复制,用主库负责写,用从库进行读,这样即使出现锁表的情况也不影响正常的业务。
  2. 主从复制可以进行数据的热备份,主库宕机后,从库可以切换,保证业务的正常执行。
  3. 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘的I\O,提高单个库的性能。

主从复制的原理

  • 主数据库

    MySQL主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。

    binlog:主库中保存所有更新事件日志的二进制文件。binlog是数据库服务启动的一刻起,保存数据库所有变更记录(数据库结构和内容)的文件。

  • 从数据库

    在从库中,当复制开始时,从库就会创建从库I/O线程和从库的SQL线程进行复制处理。
    从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。 从库I/O线程读取主库的binlog输出线程发送的更新并拷 贝这些更新到本地文件,其中包括relay log文件。

主从复制执行流程

  1. 主库db的更新事件(update、insert、delete)被写到binlog的日志中去
  2. 从库启动并发起连接,连接到主库
  3. 主库创建一个binlog dump thread,把binlog的内容发送到从库
  4. 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
  5. 从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
    在这里插入图片描述
    在这里插入图片描述

此案例中规定主库端口号为3306,从库为3307

操作步骤

主库创建

在操作之前先安装docker(Linux中有);然后在docker中获取mysql8的镜像:

docker pull daocloud.io/library/mysql:8.0.16

查看mysql是否安装

docker images

在这里插入图片描述

创建环境目录

1、进入usr下的local下
cd /usr/local
2、创建mysql目录
mkdir mysql
3、进入mysql目录
cd mysql
4、创建master-data目录
mkdir ,aster-data

在这里插入图片描述

主mysql容器运行

mysql]# docker run --name  mysql-master  --privileged=true  -v /usr/local/mysql/master-data:/var/lib/mysql  -p 3306:3306  -e  MYSQL_ROOT_PASSWORD=root  -d  (docker image中的imageId)  --character-set-server=utf8 --server-id=1 --lower_case_table_names=1

参数:

–privileged指定了当前容器是否真正的具有root权限

-p表示宿主机上的某个端口映射到docker容器内的某个端口

-d参数指定了当前容器是在后台运行

–server-id 设置服务器的编号,主从复制的每一个服务的编号都不能相同

在这里插入图片描述

配置mysql权限账户

docker exec -it mysql-master /bin/bash

登录主服务器mysql

mysql -uroot -p
注:此时密码为root

在这里插入图片描述

修改密码和设置从服务器登录用户

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
CREATE USER 'slave_one'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave_one'@'%';

在这里插入图片描述
在这里插入图片描述

查看主mysql的master节点的binlog状态

show master status;

在这里插入图片描述

至此主服务器搭建完毕,下面开始搭建从服务器

从库创建

创建环境目录

cd /usr/local/mysql
mkdir slave_one-data

从mysql容器运行

docker run --name mysql-slave_one --privileged=true -v /usr/local/mysql/slave_one-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master  -e MYSQL_ROOT_PASSWORD=root   -d df8662dadd4f --character-set-server=utf8 --server-id=2   --lower_case_table_names=1

在这里插入图片描述

配置mysql权限账户

docker exec -it mysql-slave_one /bin/bash

在这里插入图片描述

登录从服务器mysql

mysql -uroot -p
注:密码为root

在这里插入图片描述

修改密码登录用户

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

在这里插入图片描述

切换当前服务的状态,使其能够连接上master服务器,并且复制其数据

change master to master_host='master', master_user='slave_one', master_password='123456', master_port=3306, master_log_file='binlog.000002', master_log_pos=1409, master_connect_retry=30;

解释:
change master to master_host='master', master_user='slave_one', master_password='123456', 
master_port=3306, master_log_file='master中binlog日志文件名', master_log_pos=master中binlog日志位置, 
master_connect_retry=30;

启动日志同步

start slave;

查看状态

show slave status\G;

在这里插入图片描述

测试

在测试之前首先要保证服务器中的3306he3307的两个端口号防火墙开启

在这里插入图片描述

连接两个数据库

主数据库连接

在这里插入图片描述

从数据库连接

在这里插入图片描述

主库中的数据
在这里插入图片描述

从库不做任何库、表、数据的操作,刷新后有相同的数据

在这里插入图片描述
测试成功。

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

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

相关文章

【教程】MySQL数据库学习笔记(一)——认识与环境搭建(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、认…

C++ 位运算常用操作 二进制中1的个数

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 n 。 第二行包含 n 个整数,表示整个数列。 输出格式 共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表…

深度解析 Transformer 模型:原理、应用与实践指南【收藏版】

深度解析 Transformer 模型:原理、应用与实践指南 1. Transformer 模型的背景与引言2. Transformer 模型的原理解析2.1 自注意力机制(Self-Attention)自注意力机制原理 2.2 多头注意力机制(Multi-Head Attention)多头注…

vue的生命周期图解

vue的生命周期图解 添加链接描述 vue的生命周期函数及过程的简述: vue的生命周期函数,其实就是vm的生命周期; 创建:beforeCreate、created 挂载:beforeMount、mounted 更新:beforeUpdate、updated [ˌʌpˈ…

(AtCoder Beginner Contest 341)(A - D)

比赛地址 : Tasks - Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; A . Print 341 模拟就好了 &#xff0c; 先放一个 1 , 然后放 n 个 01 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout…

初始HTTP协议

一、http协议 1、http相关概念 互联网&#xff1a;是网络的网络&#xff0c;是所有类型网络的母集因特网&#xff1a;世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上&#xff0c;大家把连接在因特网上的计算机都成为主机。万维网&#xff1a;WWW&#xff08;…

vue3项目配置按需自动引入自定义组件unplugin-vue-components

我们通常在项目中&#xff0c;需要手动引入自定义的各种组件&#xff0c;如果涉及的页面功能比较多的话&#xff0c;光是import的长度都能赶上春联了。 如果&#xff0c;能有一个插件帮我们实现自动引入&#xff0c;是不是要谢天谢地了呢&#xff1f; 接下来就进入我们的主角u…

Vue2尚品汇前台项目笔记——(1)项目初始化

Vue2尚品汇前台项目笔记 一、项目初始化 使用[脚手架创建项目&#xff0c;具体参考之前的脚手架配置笔记&#xff0c;我起名叫vue_shop_test 1.脚手架目录分析 node_modules文件夹&#xff1a;项目依赖文件夹 public文件夹&#xff1a;一般放置一些静态资源&#xff08;图…

蓝桥杯:C++二叉树

二叉树 几乎每次蓝桥杯软件类大赛都会考核二叉树&#xff0c;它或者作为数据结构题出现&#xff0c;或者应用在其他算法中。大部分高级数据结构是基于二叉树的&#xff0c;例如常用的高级数据结构线段树就是基于二叉树的。二叉树应用广泛和它的形态有关。 二叉树的定义&#x…

Junit测试套件(Test Suite)

0. 什么是测试套件 对多个测试类的统一执行 只有一个测试类 点击一下执行就好有 5个测试类 分别打开 挨个点执行有100个测试类 &#xff1f;&#xff1f;分别点开执行 为100个测试类创建一个测试套件&#xff0c;然后再执行一次测试套件 √ 一个测试套件“囊括“三个测试类…

【Funny Game】 人生重开模拟器

目录 【Funny Game】 人生重开模拟器&#xff01; 人生重开模拟器&#xff01; 文章所属专区 Funny Game 人生重开模拟器&#xff01; 人生重开模拟器&#xff0c;让你体验从零开始的奇妙人生。在这个充满惊喜和挑战的游戏中&#xff0c;你可以自由选择性别、出生地、家庭背景…

Bpmn-js 属性控制

我们可以通过bpmn-js来访问对应的BPMN图例的属性信息。对应的流程图中的每个图例元素&#xff08;如开始、结束、中间/边界事件等都通过businessObject属性存储对基础BPMN元素的引用。业务对象是从BPMN 2.0 XML导入并在导出过程中序列化的实际元素。使用业务对象来读取和写入BP…

云渲染是什么?一文带你了解渲染100云渲染!

云渲染&#xff0c;做为设计行业必不可少的存在&#xff0c;新年伊始&#xff0c;带新朋友有更深入的了解。 云渲染的概念 云渲染是一种基于云计算的渲染服务&#xff0c;它利用云计算平台的强大计算能力来提供高效的渲染服务。 云渲染将3D程序放在远程的服务器中渲染&#x…

阿基米德签证小程序管理系统功能清单

阿基米德签证小程序管理系统&#xff0c;底层架构采用当前国内最流行的php框架thinkphp8.0、采用广泛使用的MYSQL数据库&#xff0c;管理后台前后台分离&#xff0c;同时使用了当今最流行的基于VUE3和elementPlus前端框架&#xff0c;小程序采用了支持多端合一的UNI-APP开发&am…

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容&#xff0c;主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式&#xff0c;有代…

力扣题目训练(15)

2024年2月8日力扣题目训练 2024年2月8日力扣题目训练507. 完美数520. 检测大写字母521. 最长特殊序列 Ⅰ221. 最大正方形237. 删除链表中的节点115. 不同的子序列 2024年2月8日力扣题目训练 2024年2月8日第十五天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括…

柚见(伙伴匹配系统)第六期

开发主页 开发主页&#xff08;默认推荐和自己兴趣相当的用户&#xff09;优化主页的性能&#xff08;缓存 定时任务 分布式锁&#xff09; 前端recommend 最简单&#xff1a;直接 list 列表 cv searchResult页面的代码 修改 后端接口 数据内容下边距修改 提取用户信息卡…

沁恒CH32V30X学习笔记06---串口dma接收+空闲中断组合接收数据

DMA 控制器提供 18 个通道,其中 DMA1 包含 7 个通道,DMA2 包含 11 个通道,每个通 道对应多个外设请求,通过设置相应外设寄存器中对应 DMA 控制位 通道映射 dma1 dma2 示例代码 bsp_usart_it.c /** bsp_usart_it.c** Created on: 2024年2月18日* Author: admin*/…

蓝桥杯Java组备赛(四)

高精度加法 import java.math.BigInteger; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);BigInteger a,b;a sc.nextBigInteger();b sc.nextBigInteger();System.out.println(a.add(b));sc.cl…

代码随想录算法训练营第十七天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和 [二叉树篇]

代码随想录算法训练营第十七天 LeetCode 110.平衡二叉树题目描述思路参考代码 LeetCode 257. 二叉树的所有路径题目描述思路参考代码 LeetCode 404.左叶子之和题目描述思路参考代码 LeetCode 110.平衡二叉树 题目链接&#xff1a;110.平衡二叉树 文章讲解&#xff1a;代码随想录…