【Innodb阅读笔记】之 二进制文件应用,主从复制搭建

一、概述

        MySQL的主从复制(Master-Slave Replication)是一种数据复制解决方案,将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而是的从库和主库的数据保存同步。

        MySQL支持将数据从一个MySQL服务器(主服务器)复制到一个或多个其他MySQL服务器(从服务器),从库同时也可以作为其他从服务器的主库,实现链状复制

二、主从复制的优势

        1. 主库出现问题,可以快速切换到从库提供服务;

        2. 实现读写分离,降低主库的访问压力;

        3. 可以在从库中执行备份,以避免备份期间影响主库服务;

        注意:MySQL的主从复制是异步的,这意味着从服务器的数据可能会与主服务器的数据存在一定的延迟。因此,在使用主从复制时,需要根据具体的业务场景和需求来选择合适的配置和策略。

三、工作原理

从上图来看,主从复制分成三步:

  1. Master主库在事务提交时,会把数据变更记录在二进制日志文件Binlog中;

  2. 从库读取主库的二进制日志文件Binlog,写入到从库的中继日志Relay Log

  3. Slave重做中继日志中的事件,将改变数据更新同步到从库中;

四、准备

1. 准备两个 mysql 服务

本人在本地搭建两个 mysql 服务,端口号分别为 3307、3308

        mysql_data_3307: 存放端口为3307的数据,

        mysql_data_3308: 存放端口为3308的数据

        mysql_3307: 存放的是端口为3307的服务,包括 3307的配置文件my.ini

        mysql_3308: 存放的是端口为3308的服务,包括 3308的配置文件my.ini

        分别安装好MySQL,并完成基础的初始化准备(安装、 密码配置等操作)工作。 其中:        

                3307 作为主服务器master

                3308 作为从服务器 slave

2. master 配置

1. 修改配置文件 /my.ini

# 指定服务 id,每个服务有自己的id
server-id = 1# 开启二进制文件,
log-bin = mysql-bin# 设置日志格式,默认值ROW。row(记录行数据)  statement(记录sql)  mixed(混合模式)
binlog_format = row# 设置需要复制的数据库,默认复制全部数据库
binlog-do-db=mydb1# 设置不需要复制的数据库
binlog-ignore-db=mydb2

2. 重启mysql服务,本人在 windows 控制台重启

3. 查看数据文件位置,可以发现已经存在二进制文件

# 通过命令也可以查看到
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 | mydb1        | mydb2            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4. 登录mysql,创建远程连接的账号,并授予主从复制权限

# 创建 主从复制用户 atguigu_slave
mysql> create user 'atguigu_slave'@'%';
Query OK, 0 rows affected (0.01 sec)# 设置密码为 123456
mysql> ALTER USER 'atguigu_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)# 给账号设置权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'atguigu_slave'@'%';
Query OK, 0 rows affected (0.00 sec)# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

3. slave 服务搭建

1. 修改配置文件

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可,并且在这个范围之内即可
server-id=2
#是否只读,1 代表只读, 0 代表读写。对于从库来说,我们只需要从从库中进行查询即可,不需要从从库中进行写入操作,所以直接把read-only设置为1就行了。
#PS:这个read-only=1,仅仅代表的是对普通用户是只读的,如果这个用户具有超级管理员super的权限,那么它也是可以进行读写的。如果想要禁用超级管理员的读写功能,此时我们也可以去设置一个参数:super-read-only=1(使用-和_都可以)
read-only=1

 2. 重启mysql服务,链接 mysql 主库

# 主库查询 
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 | mydb1        | mydb2            |                   |
+------------------+----------+--------------+------------------+-------------------+# 从库执行 
CHANGE MASTER TO MASTER_HOST='localhost', 
MASTER_USER='atguigu_slave',MASTER_PASSWORD='123456', MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154; SOURCE_HOST:原主机地址;这里用的本地 localhostMASTER_PORT: 端口号 3307SOURCE_USER 用于主从复制的账号, atguigu_slaveSOURCE_PASSWORD:账号对应密码 123456SOURCE_LOG_FILE:从那个二进制文件开始读 mysql-bin.000001;SOURCE_LOG_POS:从文件那个位置开始读 主库 154

3. 查看链接状态

# Replica_IO_Running 指的是那一组IO线程运行是否正常;
# Replica_SQL_Running 指的是那一组SQL线程运行是否正常。# IO线程是用来读取二进制日志以及写入中继日志的,
# SQL线程是用来读取中继日志,并且把数据反应到自身变化的。mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_Running: No
Slave_SQL_Running: No# 开启同步
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)# 重新查询状态,两个状态都正常运行
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

五、测试数据库

1. 我们在主库创建 mydb1,从库也自动创建了当前数据库

2. 我们创建不同步的数据库 mydb2,发现从库没有跟着创建

3. 在主库创建表,并插入语句,到从库查询数据

# 主库执行 
# 建表语句 
CREATE TABLE `ums_member` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`username` varchar(64) DEFAULT NULL,`password` varchar(64) DEFAULT NULL,`icon` varchar(500) DEFAULT NULL COMMENT '头像',`email` varchar(100) DEFAULT NULL COMMENT '邮箱',`nick_name` varchar(200) DEFAULT NULL COMMENT '昵称',`note` varchar(500) DEFAULT NULL COMMENT '备注信息',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`login_time` datetime DEFAULT NULL COMMENT '最后登录时间',`status` int(1) DEFAULT '1' COMMENT '帐号启用状态:0->禁用;1->启用',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=713 DEFAULT CHARSET=utf8 COMMENT='后台用户表'# 插入语句
insert into ums_member (username, password) values ('张三', '123456')# 从库执行
mysql> use mydb1
Database changed# 查询语句
mysql> select * from ums_member;
+-----+----------+----------+------+-------+-----------+------+-------------+-------------+------------+--------+
| id  | username | password | icon | email | nick_name | note | create_time | update_time | login_time | status |
+-----+----------+----------+------+-------+-----------+------+-------------+-------------+------------+--------+
| 713 | 张三     | 123456   | NULL | NULL  | NULL      | NULL | NULL        | NULL        | NULL       |      1 |
+-----+----------+----------+------+-------+-----------+------+-------------+-------------+------------+--------+
1 row in set (0.00 sec)

到这里 我们的主从复制环境就已经搭建好了 

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

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

相关文章

如何制作项目网页

一、背景 许多论文里经常会有这样一句话Supplementary material can be found at https://hri-eu.github.io/Lami/,这个就是将论文中的内容或者补充视频放到一个网页上,以更好的展示他们的工作。因此,这里介绍下如何使用前人提供的模板制作我…

Spring:Spring事务管理代码案例讲解

Spring事务管理知识讲解请见:Spring事务知识点讲解 下面演示一个代码示例进行理解。 需求 两个账户相互转账,并记录日志,即使有转账失败也要记录 需求分析 这里主要是需要开启事务机制来控制转入和转出: 1,创建一…

了解网络威胁情报:全面概述

网络威胁情报 CTI 是指系统地收集和分析与威胁相关的数据,以提供可操作的见解,从而增强组织的网络安全防御和决策过程。 在数字威胁不断演变的时代,了解网络威胁情报对于组织来说至关重要。复杂网络攻击的兴起凸显了制定强有力的策略以保护敏…

Scrapy图解工作流程-cnblog

1.1 介绍部分: 文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分: Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…

【ArcGISPro】Sentinel-2数据处理

错误 默认拉进去只组织了4个波段,但是实际有12个波段 解决方案 数据下载 Sentinel-2 数据下载-CSDN博客 数据处理 数据查看 创建镶嵌数据集 在数据管理工具箱中找到创建镶嵌数据集

Python数据分析(OpenCV)

第一步通过pip安装依赖包,执行一下命令 pip install opencv-python 如果是Anaconda请在工具中自行下载 下载好咋们就可以在环境中使用了。 人脸识别的特征数据可以到 github上面下载,直接搜索OpenCV 然后我们在源码中通过cv2的级联分类器引入人脸的特征…

最小生成树-Prim与Kruskal算法

文章目录 什么是最小生成树?Prim算法求最小生成树Python实现: Kruskal算法求最小生成树并查集 Python实现: Reference 什么是最小生成树? 在图论中,树是图的一种,无法构成闭合回路的节点-边连接组合称之为…

深入理解 Java 基本语法之数组

目录 一、数组基础概念 二、数组的声明 1. 基本数据类型数组声明: 2. 引用数据类型数组声明: 三、数组的创建 四、数组的初始化 五、数组的使用 ​编辑1. 获取长度以及访问元素: 2. 数组作为方法的参数: 3. 数组作为方法…

计算机毕业设计PySpark+Scrapy农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

17. C++模板(template)1(泛型编程,函数模板,类模板)

⭐本篇重点:泛型编程,函数模板,类模板 ⭐本篇代码:c学习/07.函数模板 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. 泛型编程 二. 函数模板 2.1 函数模板的格式 2.2 函数模板的简单使用 2.3 函数模板…

Jupyter Notebook的安装和配置提示功能

Python开发环境搭建conda管理环境-CSDN博客 安装anaconda和对接到编译器的教程可以看上面这一篇 Jupyter Notebook是一种交互式计算环境,它允许用户在单个文档中编写和执行代码、方程、可视化和文本。与其他编译器相比,Jupyter Notebook的突出点在于其交…

maxun爬虫工具docker搭建

思路来源开源无代码网络数据提取平台Maxun 先把代码克隆到本地(只有第一次需要) git clone https://github.com/getmaxun/maxun.git 转到maxun目录 cd maxun 启动容器 docker-compose --env-file .env up -d 成功启动六个容器 网址 http://local…

剑指Offer26.树的子结构

题目让判断B是不是A的子结构 但是我们进行判断是基于 两个树的根相等时, 去判断是否为子结构 针是否等于B的根节点的值对A做先序遍历的过程中 如果根节点相同我们去判断此时B是不是以该根节点的子树的子结构! 实际上进行先序遍历的同时要进行递归判断子结构 B是不是A节点的子结…

2024御网杯信息安全大赛个人赛wp(misc方向)

目录 一.信息安全大赛的通知二、编码转换1. 第一部分2. 第二部分3. 第三部分 三、1.txt四、buletooth 题目附件以及工具链接: 通过网盘分享的文件:御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 –来自百度网盘超级会…

【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践

文章目录 一、前言二、什么是“纵深安全防御”?三、为什么有必要采用纵深安全防御策略?四、以亚马逊云科技为案例了解纵深安全防御策略设计4.1 原始设计缺少安全策略4.2 外界围栏构建安全边界4.3 访问层安全设计4.4 实例层安全设计4.5 数据层安全设计4.6…

实战OpenCV之物体跟踪

基础入门 物体跟踪技术是一种计算机视觉领域的重要技术,用于连续地检测和定位视频序列中的一个或多个目标物体。物体跟踪技术在众多领域都有广泛的应用,比如:自动驾驶、安防监控、增强现实等。物体跟踪的基本流程包含以下几个主要步骤。 1、初…

Linux环境变量(添加环境变量、修改系统环境变量、内建命令和非内建命令)

Linux环境变量(添加环境变量、修改系统环境变量、内建命令和非内建命令) 1. 环境变量的介绍 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量是在操作系统中一个具有特定名字…

排序算法之插入排序篇

插入排序 思路&#xff1a; 就是将没有排序的元素逐步地插入到已经排好序的元素后面&#xff0c;保持元素的有序 视频的实现过程如下&#xff1a; 插入排序全过程 代码实现过程如下&#xff1a; public static void Insertion(int[] arr) { for (int i 1; i < arr.length…

AVL、B树和B+树

AVL树定义 AVL树&#xff08;Adelson-Velsky 和 Landis 树&#xff09;是一种自平衡的二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;&#xff0c;由苏联数学家Georgy Adelson-Velsky和Evgenii Landis在1962年提出。AVL树通过在每个节点上维护一个平衡因子&#…

Unity ShaderLab 实现3D物体描边

实现思路&#xff1a; 给物体添加第二个材质球&#xff0c;在shader的顶点着色器中使顶点的位置变大&#xff0c;然后在片元着色器中输出描边颜色。 shader Graph实现如下&#xff1a; ShaderLab实现如下&#xff1a; Shader "Custom/Outline" {Properties{[HDR]_…