从mysql数据库中读取二进制文件_MySQL-主从复制:基于二进制文件复制详解

2023-10-31

前言

主从复制是指把一个MySQL的数据库服务器作为主服务器(master),然后把master的数据复制到一个或者多个MySQL数据库服务器作为从服务器(slave)。从master到slave的复制一般是异步复制,所以从服务器的复制可以随时停止,也不会影响到主服务器的使用。可以通过配置来决定只复制哪些数据库或者哪些表的数据。

主从复制的优点读写分离提高负载:master服务器不在负载读操作,只处理写入和更新操作,可显著提升主服务器的写操作的性能。而读操作是通过多个slave服务器来读取数据,多个slave服务器可以分散读操作的压力,减少对单机I/O和带宽的依赖,也可以提升读操作的性能。

数据安全:因为数据是异步复制过来的,可以在slave服务器上进行测试,或者进行数据分析。即不会更改master服务器的数据,也不会影响master服务器的性能

远程数据分发:当你需要在本地使用数据时,可以通过复制功能把数据复制到本地,这样就不需要访问远程master服务器

基于二进制文件(binary log)复制

原理介绍

1、master服务器把对源数据库的写入和更新操作以事件的方式记录到二进制日志文件(binary log)中。不同的操作方式会以不同的日志格式记录到文件中2、slave服务器开启一个I/O线程连接master服务器去请求binary log,然后写入到本地的中继文件(relay log)中3、master的开启一个log dump线程读取binary log并传送给slave的I/O线程4、slave开启一个SQL线程读取relay log中的命令,在slave服务器上执行

3469a4e562d84e92242c2f9ff29b0a53.png线程说明参考

环境准备操作系统数据库ip地址端口主/从window server 2008 r2mysql 8.0.1210.119.173.983006主

window server 2008 r2mysql 8.0.1210.119.173.973006从

window server 2008 r2mysql 8.0.1210.119.173.963006从

1.Master配置

1.需要设置一个唯一的 server-id ,并且设置二进制日志文件 log-bin=[file_name]。

MySQL8.0之前的版本默认log_bin=OFF是关闭日志记录的,设置了log-bin,就会开启记录日志log_bin=ON

编辑master的配置文件my.ini,在[mysqld]下添加如下内容[mysqld]

server-id=1 #服务器id

log-bin=mysql-bin #二进制日志文件的基名字

#设置需要写日志的数据库的名称,不设置默认所有数据库。一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效。

binlog-do-db=test #binlog-do-db=test1

#binlog-do-db=test2

#设置不需要写日志的数据库的名称,一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效。binlog-ignore-db=mysql

#日志记录格式,默认是ROW行模式。还有STATEMENT语句模式和MIXED混合模式。不同的记录格式会对binlog-do-db和binlog-ignore-db产生影响

#STATEMENT模式:记录执行的SQL语句

#Row模式:记录语句执行后对单个行做的修改,而不是记录执行的语句binlog-format=ROWbinlog-format的参考binlog-do-db的说明以及和binlog-format关系的参考

2、在InnoDB存储引擎时,为了获得最大持久性和一致性,需要增加下面两个配置#控制写入二进制日志的频率。

#0表示mysql服务器依赖与操作系统来把二进制文件写入到磁盘中,这种情况下性能最好。但是在断电或者操作系统崩溃时,服务器可能提交了未同步到二进制文件的事务。

#1表示在提交事务前先把二进制文件写入到磁盘中,可能会对性能有印象

sync_binlog=1

#控制事物提交时ACID的遵守的严格性和性能之间的平衡。默认1时,表示每次事务提交时记录日志的同时马上写入磁盘

innodb_flush_log_at_trx_commit=1sync_binlog的参考innodb_flush_log_at_trx_commit的参考

3、在master上给slave创建一个拥有复制权限的账号repl,密码是123456CREATE USER 'repl'@'%' IDENTIFIED BY '123456';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

2.Slave配置

1、需要给slave设置一个唯一的 server-id ,值不要和master和其他slave重复。如果需要只复制特定的数据库或者排除特定的数据库,可以使用 replicate-do-db 和 replicate-ignore-db 配置。

当启用slave的log-bin日志记录,配合log-slave-updates=ON时,slave会在复制master的数据时也记录到自己的二进制日志中。这样方便以后的主从切换,数据恢复。甚至可以实现更复杂的多级复制拓扑,比如:master->slave->slave

编辑slave的配置文件my.ini,在[mysqld]下添加如下内容[mysqld]

server-id=2 #服务器id

log-bin=mysql-bin #二进制日志文件的基名字

#当开启了log-bin时,并且log-slave-updates=ON时slave复制master的数据时也记录到自己的二进制日志中,默认值ON

log-slave-updates=ON

#中继日志的基名称

relay-log=mysql-relay

#设置需要复制的数据库的名称,不设置默认所有数据库。一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效,效果同binlog-do-db。replicate-do-db=test#设置不需要复制的数据库的名称,一个配置项只能配置一个数据库,如果要设置写多个数据库,那么需要写多份配置项,用逗号来分割多个数据库是无效,效果同binlog-ignore-db。replicate-ignore-db=mysql

#告诉slave服务器在启动时不开启复制功能,默认值OFFskip-slave-start=OFF其他slave服务器配置一样,只有server-id不同slave的配置参考

3.配置和开启复制功能

1、查询master当前的状态

因为是InnoDB,首先在master上执行FLUSH TABLES WITH READ LOCK;语句,关闭所有打开的表,刷新缓存。并且用全局读锁锁住所有的表。然后在master上执行下面sql获取binary log的文件名称和当前写入的坐标SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+| mysql-bin.000001 | 115       | test         | mysql     |

+------------------+----------+--------------+------------------+

2、复制master库的数据到slave库 如果在slave开启复制之前,master的test库已经有数据了,那么需要先把master的数据快照dump下来,然后复制到slave服务器。如果是新库没有数据要复制,可以跳过此步骤到下一步。 使用mysqldump工具命令如下:mysqldump -h[IP地址] -P[端口号] -u[用户名] -p[密码] --databases test > dump.sqlmysqldump -h10.119.173.98 -P3006 -uroot -p123456 --databases test > dump.sql复制数据快照参考

3、释放master上的全局读锁UNLOCK TABLES;

4、导入master的test库数据到slave服务器,导入第2步中dump.sql文件。如果是新库没有数据导入,则跳过此步骤,进行到第5步。mysql -h[IP地址] -P[端口号] -u[用户名] -p[密码] 

mysql -h10.119.173.96 -P3006 -uroot -p123456 

5、在slave服务器上配置slave要复制的文件和开始的坐标CHANGE MASTER TOMASTER_HOST='10.119.173.98',

MASTER_PORT=3006,

MASTER_USER='repl',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=115;MASTER_LOG_FILE=3.配置复制功能第1步查询出来的FileMASTER_LOG_POS=3.配置复制功能第1步查询出来的PositionCHANGE MASTER TO参考

6.开启复制功能在slave服务器上执行START SLAVE语句,开启slave的复制功能。START SLAVE;

7.查看从库的复制状态信息SHOW SLAVE STATUS

Slave_IO_Running和Slave_SQL_Running都=Yes,就表明复制功能正常运行

a69a12bda38dac16f8f891de1e846121.png

401e2e097fc0043b57473a5e7d712958.png

Slave_IO_Running:从master读取二进制文件,写入到slave的中继日志的I/O线程。yes表示正常Slave_SQL_Running:从中继日志中读取新的命令执行到slave的库中的SQL线程。yes表示正常Master_Log_File:表示I/O线程当前正在读取的master的二进制文件名称Read_Master_Log_Pos:表示I/O线程当前正在读取的master的二进制文件中的位置信息Relay_Log_File:当前在执行的中继日志名称Relay_Log_Pos:当前在执行的中继日志中执行到的位置Last_Errno:最后一次复制失败的错误日志号Last_Error:最后一次复制失败的错误日志

当slave服务器停止了复制功能,要重新开始时,要从停止前读取的位置开始继续复制命令。第5步中MASTER_LOG_FILE=Master_Log_File的值,MASTER_LOG_POS=Read_Master_Log_Pos的值SHOW SLAVE STATUS参考

这样就配置好了一个master->slave的主从复制,多个从库的配置可以重复【3.配置和开启复制功能的4-7步】即可。

后记

如果想配置成复杂的多级复制拓扑,比如A->B->C,那么先配置A作为master,B作为slave,B复制A的数据。然后在配置B作为master,C作为slave,C复制B的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从mysql数据库中读取二进制文件_MySQL-主从复制:基于二进制文件复制详解 的相关文章

  • 单片机毕业设计 stm32智能电子秤系统设计与实现 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4 1 STM32F103C8T6 4 2 HX711压力传感器 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目
  • Simulink Simscape基础仿真电路

    在网上找了挺多关于MATLAB Simulink simscape仿真电路的资料都没有自己想要的 大都是Sympowersystem的教程 最后还是上了YouTube观看了一些教程 现在做下学习记录 由于我电脑上安装了2016和2010两个
  • 身份和访问管理解决方案:混合型IAM

    对于依赖于本地 IT 基础结构和传统安全模型的组织 可以更轻松地验证和授权企业网络内的所有内容 包括设备 用户 应用程序和服务器 尝试从公司网络外部获取访问权限的用户使用虚拟专用网络 VPN 和网络访问控制 NAC 进行身份验证 随着云和远
  • java中equals的重写_Java重写equals方法(重点讲解)

    为什么equals 方法要重写 判断两个对象在逻辑上是否相等 如根据类的成员变量来判断两个类的实例是否相等 而继承Object中的equals方法只能判断两个引用变量是否是同一个对象 这样我们往往需要重写equals 方法 我们向一个没有重
  • Hadoop-The variance for this alert is **MB which is 20% of the **MB average (**MB is the limit)

    The variance for this alert is MB which is 20 of the MB average MB is the limit 1 调整如下阀值 2 检查HDFS文件系统使用率 清空HDFS上的 trash垃
  • SpringBoot+ftp 实现文件的上传、下载与删除

    SpringBoot ftp 实现文件的上传 下载与删除 一 引包 二 配置 三 代码 3 1配置类 3 2 接口服务 3 3controller层示例 不做过多解释 可移植 比较简单方便 一 引包 3 8 0是目前最新的 除非重大更新 基
  • Python基础——常见数据类型总结

    在Python中常见的数据类型有以下8个类型 分别是 int 整数类型 整形 float 浮点类型 浮点型 bool 布尔类型 str 字符串类型 list 列表类型 tuple 元组类型 dict 字典类型 set 集合类型 接下来一一展
  • hdd和虚拟服务器区别,Docker容器与虚拟机的区别

    我曾经将Docker容器视为轻量级 精简的虚拟机 进行这种比较是有道理的 因为至少在Docker的最初市场中 总是将其与虚拟机进行比较 例如 Docker花费的启动时间少于VM 等等 但是docker容器不是虚拟机 让我们对Docker容器
  • java redis cluster_Redis的cluster模式

    Redis集群是Redis提供的分布式数据库方案 集群通过分片 Sharding 来进行数据共享 并提供复制和故障转移功能 节点 一个节点就是一个运行在集群模式下的Redis服务器 Redis服务器在启动的时候会根据cluster enab
  • ERROR: Could not build wheels for pycocotools, lap, which is required to install pyproject.toml-base

    python 在windows系统上安装pycocotools lap是出现无法安装的情况 报错如下 原因是缺少C 的编译工具 并且pycocotools需要安装windows版本 解决步骤 1 下载BuildTools 下载地址 Buil
  • Spark学习之机器学习包ML

    Spark的ML软件包 其操作是基于DataFrame的 ML包括转换器 Transformer 评估器 Estimator 管道 Pipeline 1 转换器 Transformer 通常是将一个新列附加到DataFrame来转换数据 从
  • React入门

    目录 React简介 官网 介绍描述 React的特点 React高效的原因 React的基本使用 效果 相关js库 创建虚拟DOM的两种方式 虚拟DOM与真实DOM React JSX XML JSON JSX 渲染虚拟DOM 元素 JS
  • 二进制部署Kubernetes

    操作系统 centos7 5 x86 docker 19ce 软件 Kubernetes 1 18 角色 k8s master1 192 168 31 71 组件 kube apiserver kube controller manager
  • C语言atoi函数将字符串类型转换为整型

    atoi 是C标准库中的一个函数 用于将字符串转换为整数 函数原型如下 int atoi const char str 参数 str 是一个指向要转换的字符串的指针 atoi 函数会尝试将字符串中的数字部分转换为整数 并返回转换后的整数值
  • 基于深度学习的验证码自动识别(caffe)

    最近在学习使用caffe 然后就想试着玩玩验证码识别 结果非常非常棒 深度学习确实是非常强大的 废话少说 跟我走进验证码自动识别 caffe安装 此处省略一万字 网上教程千千万 你一定可以找到 接着往下看 剧情描述 之前对京东的某些数据进行
  • 《剑指offer》---22.数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent 求base的exponent次方 保证base和exponent不同时为0 解题分析 使用快速幂解决 代码 class Solution public d
  • Spring Boot + Vue3前后端分离实战wiki知识库系统<十一>--文档管理功能开发三

    文档内容的显示 在上一次Spring Boot Vue3前后端分离实战wiki知识库系统 十 文档管理功能开发二文档管理模块还差文档的显示木有完成 所以接下来先将这块模块给收尾了 增加单独获取内容的接口 概述 在前端页面文档查询时 只查询了
  • javaMail 使用SMTP邮箱服务器发送邮件

    POP3 SMTP协议 smtp默认端口是 25 接收邮件服务器 pop exmail qq com 使用SSL 端口号995 发送邮件服务器 smtp exmail qq com 使用SSL 端口号465 海外用户可使用以下服务器 接收邮

随机推荐

  • java 用redis如何处理电商平台,秒杀、抢购超卖

    原地址 http blog csdn net u012116196 article details 51782934 一 刚来公司时间不长 看到公司原来的同事写了这样一段代码 下面贴出来 1 这是在一个方法调用下面代码的部分 java vi
  • AutoCAD二次开发_从入门到放弃

    在建筑与设计行业中 CAD有着非常广泛的应用 而其中的很多基本操作无法满足实际需求 容易产生大量的重复性的操作 这种重复性的操作违背了程序设计的思维 因此诞生了入门CAD二次开发的想法 跟大多数程序设计语言一样 在了解CAD二次开发所应用的
  • Kruskal算法&Prim算法的区别

    贪心算法 Kruskal Prim算法的区别 贪心算法是一种对某些求最优解问题的更简单 更迅速的设计技术 贪心算法的特点是一步一步地进行 常以当前情况为基础根据某个优化测度作最优选择 而不考虑各种可能的整体情况 省去了为找最优解要穷尽所有可
  • Linux下搭建Webdav(apache)

    环境 RHEL 5 4 x86 64 创建webdav 1 安装apache yum install httpd y 2 配置webdav vim etc httpd conf httpd conf
  • Ubuntu下用Lean源码编译openwrt及一行命令u盘启动openwrt安装x86硬盘上

    Ubuntu下用Lean源码编译openwrt 源码地址 https github com coolsnowwolf lede 1 首先微软云服务器装好 Ubuntu 64bit 推荐 Ubuntu 20 04 LTS x64 免费一年 i
  • ftell函数的用法(用于获取指针位置)

    ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数 下面给出一个简单的例子 cpp view plain copy include
  • 【CKEditor5】CKEditor5相关问题

    问题解决 如图 这个样式没效果 解决方法 因为没有导入css 导入css后 配置style插件就生效了 问 你的css哪来的 答 所有的样式与插件CXEditor5官网都可以找到 配置的css ck ck content font fami
  • 春招Java后端开发面试 2021-10-8

    春招Java后端开发面试 春招Java后端开发面试总结包含了JavaOOP Java集合容器 Java异常 并发编程 Java反射 Java序列化 JVM Redis Spring MVC MyBatis MySQL数据库 消息中间件MQ
  • 常用linux命令记录

    常用linux命令记录 1 常用linux命令基本使用列表 序号 命令 英文 作用 01 ls list 查看当前文件夹的内容 02 pwd print work directory 查看当前所在文件夹 03 cd 目录名 change d
  • 高云FPGA系列教程(5):ARM点灯工程设计

    文章目录 toc 1 ARM核定制 2 ARM核程序设计 3 ARM程序烧写 4 工程下载 本文是高云FPGA系列教程的第5篇文章 前面几篇笔记都是介绍的高云GW1NSR 4C FPGA部分的使用 本篇文章介绍片上ARM Cortex M3
  • MES解决方案 附下载地址

    MES Manufacturing Execution System 即制造企业生产过程执行系统 是一套面向制造企业车间执行层的生产信息化管理系统 是美国AMR公司在90年代初提出的 旨在加强MRP计划的执行功能 把MRP计划同车间作业现场
  • 从源码角度看R语言的format函数

    先提一个问题 请问下面最后的两个逻辑语句的判断 结果是什么 x lt c 1234567 8 12 12345 x11 lt format x scientific FALSE x12 lt format x scientific TRUE
  • 安装多版本node

    一 安装多版本node的原因 在项目开发过程中 不同项目使用的nodejs版本不同 有时会因为node版本过高或太低 导致报错 解决方式 利用nvm进行管理 本文使用此种方式 配置环境变量 如理解环境变量可自行配置 二 利用nvm进行管理
  • router-link标签Cannot read property '$route' of undefined"报错解决方法

    报错代码 div class card mb 3 px 3 div
  • vue渲染页面的流程_Vue中DOM渲染的过程

    vue中dom渲染过程 1 响应式 监听data属性的getter setter 2 模板编译 模板到render函数再到vnode 模板不是html 有指令 插值 js表达式 能够实现循环 判断 html是标签语言 只有js才能实现循环判
  • vision transformer

    一 网络构建 import torch from torch import nn from functools import partial 1 patch embedding img size 224 输入图像的宽高 patch size
  • win10进入安全模式的方法(F8不管用/开不开机)

    win10默认不能进入安全模式 这时候开机黑屏怎么办 下面介绍强制进入安全模式的方法 1 关机情况下 按开机键开机 等到出现徽标 下图 这时候长按开机键强制关机 2 再次开机 出现徽标 再次强制强制关机 重复三次 直到出现 正在准备自动修复
  • 【vscode】 VsCode 代码片段

    1 打开Vscode 文件 gt 首选项 gt 用户片段 或用快捷键ctrl shift p输入snip 2 点击用户片段 选择html json或者新建全局代码片段文件 3 随后会打开一个json文件设置 可直接将以下代码粘贴复制到自己的
  • 微信小程序地理位置API使用流程

    地理位置接口使用具体流程 开发者如需在最新版本发布后使用地理位置相关接口 除需完成接口权限开通外 还需在 app json 或ext json 配置环节 具体如下 以wx chooseLocation为例 1 接口权限开通 以下 8 个接口
  • 从mysql数据库中读取二进制文件_MySQL-主从复制:基于二进制文件复制详解

    前言 主从复制是指把一个MySQL的数据库服务器作为主服务器 master 然后把master的数据复制到一个或者多个MySQL数据库服务器作为从服务器 slave 从master到slave的复制一般是异步复制 所以从服务器的复制可以随时