Mysql刨根问底之五(数据复制)

6 篇文章 0 订阅
订阅专栏
mysql复制概念

复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。 它的实现机制可以这样概括,首先在源服务器(source server)上,任何数据修改和数据结构变更的事件(event)都会被写入日志文件 中,然后,副本服务器从源服务器上的日志文件中读取这些事件并在本地重放执行。这是一个异步处理的过程,也就是说,并不能保证副 本服务器上的数据是最新的。复制延迟(副本数据和最新数据之间的时间差)也并没有上限。一个大的SQL查询语句可能会导致副本服务器 落后于源服务器几秒钟、几分钟,甚至是几小时。

复制用途
  • 数据分发
  • 读流量扩展
  • 备份
  • 分析与报告
  • 高可用性和故障切换
  • MYSQL升级测试
复制步骤

在详细介绍如何设置复制之前,让我们先看看MySQL实际上是如何复制 数据的。在这里,我们使用最简单的复制拓扑结构,单一源服务器和单一副本服务器。复制步骤:

  1. 源端把数据更改记录记录到二进制日志中,称之为 二进制日志事件(binary log events)

  2. 副本将源上的日志复制到自己的中继日志中

  3. 副本服务中继日志中的事件,将其重放到副本数据之上

  4. 在这里插入图片描述

  5. 在复制架构中,读取和重放日志事件是解耦的,这就允许读取日志和重放日志异步进行,也就是说,这里的IO线程和SQL线程都是可以独立运行的。

复制原理

选择复制格式
MySQL提供了三种不同的二进制日志格式用于复制:基于语句的基于行的和混合模式。可以通过系统参数binlog_format控制日志写入时使用哪种日志格式。
基于语句的复制是通过记录所有在源端执行的数据变更语句来实现的。当副本从中继日志读取到事件并执行时,实际上是重新执行在源端执行过的SQL语句。其最大的弊端则在于会遇到某些具有“不确定性”的SQL语句问题。假设有一条语句删除了一张有1000行记录的表中的100行,但没有用ORDER BY子句。如果在源和副本上,记录的排序不同,这条SQL语句在源和副
本上删除的100条记录就会不同,这将导致数据不一致。
基于行的复制将事件写入二进制日志,该事件包含了该行记录发生了什么改变。这听起来很简单,但是,因为这种模式的确定性,相比基于语句的方式来说,其实发生了很大的变化。使用基于行的复制,通过查看二进制日志中的事件,可以看到究竟是哪一行记录发生了什么样的改变。在基于语句的复制模式下,SQL语句在执行时被解析,服务器在执行时找到所有需要变更的记录进行操作。而在基于行的复制模式下,每条被改变的记录都会作为事件被写入二进制日志,这可能会让二进制日志的大小发生巨大的增长。
**混合模式”(the mixed method)**试图结合以上两种格式的优点。在这种模式下,事件的写入,默认使用基于语句的格式,仅在需要时才切换到基于行的格式。
**最后建议:**我们建议坚持使用基于行的复制,除非某些场景下明确需要临时使用基于语句的复制。基于行的复制提供了最安全的数据复制方法。

全局事务标识

MySQL新增了另一种跟踪复制位点的方法:全局事务标识符(GTID)。使用GTID,源服务器提交的每个事务都被分配一
个唯一标识符。此标识符是由server_uuid [2] 和一个递增的事务编号组成的。当事务被写入二进制日志时,GTID也随之被写入。防止漏掉事件。GTID解决了运行MySQL复制的一个令人痛苦的问题:处理日志文件和位置。强烈建议始终按照MySQL官方文档中的说明,在数据库中启用GTID。

崩溃后的复制安全

为了尽量降低复制中断的可能性,建议MySQL的部分参数按照如下讲解内容进行配置。

innodb_flush_log_at_trx_commit参数

innodb_flush_log_at_trx_commit=0
表示每隔一秒把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。也就是说一秒之前的日志都保存在日志缓冲区,也就是内存上,如果机器宕掉,可能丢失1秒的事务数据。
innodb_flush_log_at_trx_commit=1,
表示在每次事务提交的时候,都把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。这样的话,数据库对IO的要求就非常高了,如果底层的硬件提供的IOPS比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升。
innodb_flush_log_at_trx_commit=2,
表示在每次事务提交的时候会把log buffer刷到文件系统中去,但并不会立即刷写到磁盘。如果只是MySQL数据库挂掉了,由于文件系统没有问题,那么对应的事务数据并没有丢失。只有在数据库所在的主机操作系统损坏或者突然掉电的情况下,数据库的事务数据可能丢失1秒之类的事务数据。这样的好处,减少了事务数据丢失的概率,而对底层硬件的IO要求也没有那么高(log buffer写到文件系统中,一般只是从log buffer的内存转移的文件系统的内存缓存中,对底层IO没有压力)。

sync_binlog=1

该变量控制MySQL将二进制日志数据同步到磁盘的频率。将此值设置为1意味着在每次事务执行的时候都会把二进制日志同步写入磁
盘。这可以防止在服务器崩溃时丢失事务。就像之前的配置参数一样,它也会增加磁盘写入量。

relay_log_info_repository=TABLE

以前,MySQL的复制通常依赖磁盘上的文件来跟踪复制位置。这意味着,复制完成事务操作之后,还需要完成同步写入磁盘操作。
如果在事务提交和同步之间发生了服务器崩溃,此时,磁盘上的文件将可能包含错误的文件和位置信息。在该配置下,该信息将
被转移到MySQL本身的InnoDB表中,允许复制更新同一事务中的事务和中继日志信息。这会在一个原子操作中完成,并有助于崩溃
恢复。

relay_log_recovery=ON

简单地说,该参数使得副本服务器在检测到崩溃时会丢弃所有本地中继日志,并从源服务器中获取丢失的数据。这确保了在崩溃
中发生的磁盘上的任何损坏或不完整的中继日志都是可恢复的。配置该参数后,不再需要配置sync_relay_log,因为在发生崩溃
时,中继日志将被删除,也就无须花费额外的操作将它们同步到磁盘。

复制延迟

在一个拓扑结构中,某些副本有一些延迟反而是有好处的。在这个策略下,可以让副本中的数据保持在线并且持续运行,
但同时落后于源数据库数小时或者数天。延迟复制的配置语句是CHANGE REPLICATION SOURCE
TO,配置选项为SOURCE_DELAY。想象一下这样的场景,你正在处理大量数据,突然意外地做了一些变
更:删除了一个表。从备份中恢复可能需要几个小时。如果使用了延迟复制的副本,则可以找到DROP TABLE语句对应的GTID,使副本服务器的复制运行到表被删除之前的时间点,这会大大减少修复时间。

多线程复制

最新的MySQL版本则提供了多线程复制能力(参见图9-2),可以在副本端运行多个SQL线程,从而
加快本地中继日志的应用。
在这里插入图片描述
多线程复制有两种模式:DATABASE和LOGICAL_CLOCK。在DATABASE模式
下,可以使用多线程更新不同的数据库;但不会有两个线程同时更新同一个数据库。如果将数据分布在MySQL的多个数据库中,则可以同时并且一致地更新它们,这种模式非常有效。另一个模式LOGICAL_CLOCK允许对同一个数据库进行并行更新,只要它们都是同一个二进制日志组提交的一部分。此外,确保你的副本配置了参数replica_preserve_commit_order,这样就不会出现无序提交的问题。

复制过滤器

复制过滤选项可以让副本仅复制一部分数据,不过这个功能并没有想 象中那么实用。有两种复制过滤器:一种是从源上的二进制日志中过滤事件,另一种是从副本上的中继日志中过滤事件。图9-3展示了这两 种类型

在这里插入图片描述
控制二进制日志过滤的选项是binlog_do_db和binlog_ignore_db。事实上,并不建议启用这些参数,你可能会经常要向老板解释为什么数据会永久消失并且无法恢复。

Mysql复制表结构、表数据的方法
09-10
MySQL是一种广泛使用的开源关系型数据库管理系统,其复制表结构和数据是常见的数据库管理任务,尤其在数据迁移、备份和恢复时。以下是对标题和描述中所述知识点的详细说明: 1. **复制表结构及数据到新表**: 使用...
mysql数据一条复制_Mysql 复制一条数据
weixin_29695125的博客
01-19 4960
从不同的表复制insert into 表1 select * from 表2 where id =** ;同一张表中复制(无主键)insert into 表1 select * from 表2 where id =** ;同一张表中复制(有主键)insert into 表1(字段1,字段2,字段3) select 字段1,字段2,字段3 from 表1 where id= ** ;一、复制表里面的...
MySQL8.0使用mysqlsh配置主从复制 InnoDB ReplicaSet
IOsetting的专栏
10-17 486
InnoDB ReplicaSet InnoDB ReplicaSet 由一个主节点和多个从节点构成. 可以使用ReplicaSet对象和AdminAPI操作管理复制集, 例如检查InnoDB复制集的状态, 并在发生故障时手动故障转移到新的主服务器. 与InnoDB cluster类似, MySQL Router 支持针对InnoDB ReplicaSet 的引导, 这意味着可以自动配置MySQ...
MySQL 复制技术详解
最新发布
www_tlj的专栏
06-27 1081
主从复制是一种常见的数据复制模式,其中一个数据库服务器作为主服务器(Master),负责处理所有的写操作和部分读操作,而一个或多个从服务器(Slave)负责复制服务器数据并处理读请求。这样可以实现读写分离,提高系统的性能和可用性。主主复制是一种高级的复制模式,两个MySQL服务器既是主服务器又是从服务器,能够互相同步数据。每个服务器既可以处理写操作,也可以处理从另一个服务器复制过来的写操作。高可用性:当一个服务器宕机时,另一个服务器可以继续提供服务。负载均衡。
Mysql Replication配置项简述(二)
深入一点
01-23 251
八、Replication主要配置项(配置文件)     1、log_bin:指定binlog文件的名称,同时也表示开启binlog功能,在replication模式下,master上必须开启log_bin,如果slave不需要failover,可以不开启。文件将会放置在“datadir”目录下。       2、binlog_checksum:是否开启binlog校验功能,在5.6.6...
MySQL 8.0】标准配置文件详解(下)
weixin_44265650的博客
04-12 674
relay_log指定中继日志的名称默认基本名称是指定relay log的索引名称开启后,服务器启动后立即启用自动中继日志恢复。恢复过程创建一个新的中继日志文件,将 SQL(应用程序)线程位置初始化到这个新的中继日志,并将 I/O(接收方)线程初始化到应用程序线程位置。然后继续从源读取中继日志用于决定允许哪些事务在副本上并行执行的策略1.:基于复制源写入二进制日志的时间戳,事务在副本上并行应用2.DATABASE:更新不同数据库的事务是并行应用的。
mysql快速复制一条数据(sql实现)
热门推荐
qq_39314099的博客
08-22 1万+
sql语法:insert into 表1 select * from 表1 where column= ? 这里的where条件指的是数据源,即被复制数据某一列,语法大致如此,可做变数修改。 建表如下,两条测试数据: 执行成功,结果如下: ...
MySQL5.6主从复制(mysql数据同步配置)
09-09
获取当前的二进制日志文件名(如`mysqlbin.000021`)和偏移量(如`120`),这是从哪里开始复制数据的关键信息。 ```sql mysql> show master status; ``` 5. **备份主数据库**: 备份主库数据,可以使用各种...
MySQL 半同步复制数据一致性分析
05-04
本文将详细探讨MySQL半同步复制数据一致性问题。 首先,MySQL Replication的发展历程至关重要。最早的复制功能是在2000年随MySQL 3.23.15版本的发布引入的。当时的复制是一种准实时同步方式,Master节点和Slave...
MySQL快速复制数据库数据表的方法
12-15
2. **使用mysqldump和mysql命令组合复制数据**: ```bash mysqldump db1 -u root -ppassword --add-drop-table | mysql newdb -u root -ppassword ``` 这条命令首先使用`mysqldump`导出`db1`的所有表结构和数据...
MySQL数据复制部署与维护
04-05
1. 固定master到slave单向复制数据。在这种情况下,需要在master服务器的配置文件中开启二进制日志,并设置唯一的server-id。同时,在slave服务器上也进行相应的配置,并创建用于数据复制的用户。 2. master与slave...
mysql8.0高可用集群架构实战
初秋和的博客
04-09 1931
InnoDB Cluster是MySQL官方实现高可用+读写分离的架构方案,其中包含以下组件MySQL Group Replication,简称MGR,是MySQL的主从同步高可用方案,包括数据同步及角色选举Mysql Shell 是InnoDB Cluster的管理工具,用来创建和管理集群Mysql Router 是业务流量入口,支持对MGR的主从角色判断,可以配置不同的端口分别对外提供读写服务,实现读写分离。
mySQL如何复制多条一条或多条记录
a200822146085的博客
01-09 2859
复制记录到另外的表 前提是另外的表article_bak已存在 ① insert into article_bak(title,keywords,desc,contents) select title,keywords,desc,contents from article where article_id = 100; 复制记录到当前表 一、复制表里面的一条记录并插入表里面 ① insert into article(title,keywords,desc,contents) select title,ke
MySQL精通之路】MySQL 8.0中添加、弃用或删除的服务器和状态变量及选项
Anakki的博客
05-16 539
欢迎大家关注专栏或者关注收藏我1.Mysql精通之路专栏: http://t.csdnimg.cn/4Rqp72.大家可以从这篇博客开始读,他是所有博客的根节点:【MySQL精通之路】详读MySQL8.0官方文档-CSDN博客MySQL 8.0中添加了以下系统变量、状态变量和服务器选项。 MySQL 8.0中删除了以下系统变量、状态变量和选项。
MySQL复制MySQL系列之十三
weixin_30887919的博客
06-16 432
一、MySQL复制相关概念 主从复制:主节点将数据同步到多个从节点 级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据 同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制策略叫同步复制 异步复制:只要数据写入到主节点就立即返回给用户同步完成 读写分离:在前端加一个调度器,负责将改变数据的语句和查询数据的语句分开调度,把写操作调度到主节点,读操作调度到从节点 主节...
MySQL之如何复制一张表的数据
wang0907的博客
09-13 3117
use db1;delimiter;;set i=i+1;end while;end;;delimiter;
MYSQL 8 innodb replicaset 怎么自动化部署,与手动切换 (不是innodb cluster)
sql server的专栏
10-15 489
MYSQL 截止目前高可用的方式主要有传统的复制方式,MGR 也叫innodb cluster , 以及今天要说的 innodb replicatset。实际上replicatset 就是...
php拷贝mysql表,php – 在MySQL复制一条记录
weixin_42162171的博客
03-23 351
搜索热词我有一个表,我想复制表中的特定行.我知道这不是最好的做事方式,但我们正在寻找快速解决方案.这里的内容比我最初的想法更难,我需要做的就是将整个记录复制MySql中自动增量表中的新记录,而无需指定每个字段.这是因为该表可能在将来发生变化,并可能会破坏重复.我将从PHP复制@R_301_198@记录.这是一个问题,因为在’SELECT *’查询中,@R_301_198@将尝试复制正在复制的记录...
SQL向同一张表复制数据,仅改动个别栏位
weixin_43041350的博客
01-09 1080
【代码】SQL向同一张表复制数据,仅改动个别栏位。
MySQL半同步复制数据一致性和源码分析
"MySQL 半同步复制数据一致性分析" MySQL半同步复制MySQL数据库系统提供的一种复制模式,旨在提高数据一致性,减少数据丢失的风险。它介于完全异步复制和全同步复制之间,实现了在主库事务提交后,至少等待一个从...
写文章

热门文章

  • springboot 找不到index页面问题 4865
  • ShardingSphere-JDBC 介绍和基本概念 1112
  • ubuntu下安装Kubernetes 954
  • redis集群spring配置(java形式配置) 705
  • ubuntu安装特定版本软件 611

分类专栏

  • JVM 1篇
  • 分布式架构 2篇
  • spring 4篇
  • mysql刨根问底 6篇
  • ShardingSphere 9篇
  • linux 7篇
  • docker 1篇
  • k8s 1篇
  • 大数据 2篇

最新评论

  • ShardingSphere入门到精通之三(ShardingSphere-JDBC水平分片)

    CSDN-Ada助手: 非常感谢博主的辛勤创作,一篇篇的教程让我们更好地了解和掌握ShardingSphere。下一篇博客可以尝试讲解ShardingSphere的垂直分片,帮助读者更好地了解和应用这个分布式数据库中间件。

  • Mysql刨根问底之三(高性能索引)

    CSDN-Ada助手: 不知道 MySQL入门 技能树是否可以帮到你:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql

最新文章

  • 分布式架构之(Zookeeper原理)
  • 分布式一致性原理之(分布式架构以及Paxps协议)
  • 深入理解JVM之(内存管理)
2023年24篇
2020年7篇
2019年2篇
2018年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王晋州网站推广优化优化网站软件灰云速捷真诚网站如何去优化网站优化的要求马鞍山市网站优化哪家信誉好网站关键词优化价格青岛理工大学网站优化网站怎么进行百度优化推广教育网站seo优化方法莱芜网站优化房地产网站优化方法怎么seo优化网站娄底网站优化霸屏青州网站优化怎么做增城公司网站优化推广报价巩义网站关键词优化公司垦利网站优化公司巩义网站优化哪家好沈阳求推荐好的网站优化与推广龙岗搜索引擎网站优化当涂seo网站优化邛崃网站优化和推广浦江网站排名优化各大b2b网站优化排名网站快速优化弊云速捷明白江津网站自然优化湛江网站优化关键词工具无锡做网站优化哪家比较好鄞州网站如何首页优化网站可以同时做竞价和优化吗香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化