mysql无损复制_MySQL无损复制(转)

 2023-09-09 阅读 21 评论 0

摘要:MySQL5.7新特性:lossless replication 无损复制MySQL的三种复制方式asynchronous 异步复制fully synchronous 全同步复制复制表sql,Semisynchronous 半同步复制asynchronous replication原理:在异步复制中,master写数据到binlog且sync,slave req

MySQL5.7新特性:lossless replication 无损复制

MySQL的三种复制方式

asynchronous 异步复制

fully synchronous 全同步复制

复制表sql,Semisynchronous 半同步复制

asynchronous replication

原理:在异步复制中,master写数据到binlog且sync,slave request binlog后写入relay-log并flush disk

优点:复制的性能最好

缺点:master挂掉后,slave可能会丢失事务

row number over partition by去重?代表:MySQL原生的复制

a6f6aa28836f7a1cd1798bb888b7a9a6.png

fully synchronous replication

原理:在全同步复制中,master写数据到binlog且sync,所有slave request binlog后写入relay-log并flush disk,并且回放完日志且commit

优点:数据不会丢失

缺点:会阻塞master session,性能太差,非常依赖网络

mysql导出数据库?代表:MySQL-Cluster

b00f293b55cf8853f492d7b4de04f070.png

semisynchronous replication

普通的半同步复制

原理: 在半同步复制中,master写数据到binlog且sync,且commit,然后一直等待ACK。当至少一个slave request bilog后写入到relay-log并flush disk,就返回ack(不需要回放完日志)

优点:会有数据丢失风险(低)

mysql导入sql文件命令。缺点:会阻塞master session,性能差,非常依赖网络,

代表:after commit, 原生的半同步

重点:由于master是在三段提交的最后commit阶段完成后才等待,所以master的其他session是可以看到这个提交事务的,所以这时候master上的数据和slave不一致,master crash后,slave数据丢失

f8f68b43eb8500fed45a286d4c066a8c.png

增强版的半同步复制(lossless replication)

原理: 在半同步复制中,master写数据到binlog且sync,然后一直等待ACK. 当至少一个slave request bilog后写入到relay-log并flush disk,就返回ack(不需要回放完日志)

mysql转时间。优点:数据零丢失(前提是让其一直是lossless replication),性能好

缺点:会阻塞master session,非常依赖网络

代表:after sync, 原生的半同步

重点:由于master是在三段提交的第二阶段sync binlog完成后才等待, 所以master的其他session是看不见这个提交事务的,所以这时候master上的数据和slave一致,master crash后,slave没有丢失数据

cca89876f4f7e950017e5f93336fa68b.png

重要参数

mysql 复制表?参数

comment

默认值

推荐值

是否动态

mysql字符转日期。rpl_semi_sync_master_wait_for_slave_count

至少有N个slave接收到日志

1

1

dynamic

mysql 转字符串、rpl_semi_sync_master_wait_point

等待的point

AFTER_SYNC

AFTER_SYNC

dynamic

数据库复制,rpl_semi_sync_master_timeout

切换复制的timeout

10000(10s)

1000(1s)

dynamic

docker复制所有文件。rpl_semi_sync_master_enabled

是否开启半同步

OFF

ON

dynamic

将一个数据库表复制到另一个数据库?rpl_semi_sync_slave_enabled

是否开启半同步

OFF

ON

dynamic

sql如何复制数据库。如何开启lossless replication

########semi sync replication settings########

plugin_dir=/usr/local/mysql/lib/plugin

plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

loose_rpl_semi_sync_master_enabled = 1

loose_rpl_semi_sync_slave_enabled = 1

loose_rpl_semi_sync_master_timeout = 1000

实践是检验真理的唯一标准

如何检验上述after_sync,after_commit

如何检验上述原理的正确性

InnoDB commit : 三阶段提交过程

A阶段. wite prepare log -- 写入Xid

B阶段. write binlog

C阶段. write commit log

测试点

master上当一个事务Waiting for semi-sync ACK from slave的时候,后来的事务是在A,B,C哪个阶段卡住呢?

0,RC模式

1. semi-sync C阶段等待

假设设置time-out=100000s,当事务一提交了一个大事务,在write commit log(C阶段)时候等待,

那么第二个事务在敲commit命令的时候,是卡在哪个阶段呢?是卡在 wite prepare log(A阶段)?还是write binlog(B阶段)?还是write commit log(C阶段)

测试:semi-sync vs loss-less semi-sync

【semi-sync】 C阶段等待

0, 开启事务1,然后在slave上执行stop slave,制造timeout的情况,让其阻塞。(Waiting for semi-sync ACK from slave)

1,在开启一个事务2,事务2插入一条特殊记录(XXXXX)。 (Waiting for semi-sync ACK from slave)

2,在开启一个事务3。

2.1,测试案例:这个时候,kill -9 mysqld,造成人为的mysql crash

3,假设卡在A阶段,那么事务3,肯定是看不到事务1,2写入的记录(XXXXX),且重启mysql后,事务2不会提交。

4,假设卡在C阶段,那么事务3,肯定是可以看见事务1,2写入的记录(XXXXX)。

经过测试:

1,是卡在C阶段,也就是说事务3是可以看见事务1,事务2的。

2,MySQL crash重启后,事务1,事务2的dml都已经提交成功,说明不是卡在A阶段

【loss-less semi-sync】B阶段等待

0, 开启事务1,然后在slave上执行stop slave,制造timeout的情况,让其阻塞。(Waiting for semi-sync ACK from slave)

1,在开启一个事务2,事务2插入一条特殊记录(XXXXX)。(Waiting for semi-sync ACK from slave)

2,在开启一个事务3

3,假设卡在A阶段,那么事务3,肯定是看不到事务1,2写入的记录(XXXXX),且重启mysql后,事务2不会提交。。

4,假设卡在B阶段,那么事务3,肯定是可以看见事务1,2写入的记录(XXXXX),且重启mysql后,事务1,2都会提交。。

5, 假设卡在C阶段,那么事务3,肯定是可以看见事务3写入的记录(XXXXX)。

经过测试:

1,是卡在B阶段,也就是说事务3,既看不见事务1的提交内容,也看不见事务2的提交内容,且重启mysql后,事务1,2都已经提交。。

2,MySQL crash重启后,事务1,事务2的dml都已经提交成功,说明不是卡在A阶段。

性能

semi-sync vs lossless semi-sync 的性能对比

根据以上的测试,可以得知,lossless只卡在B阶段,普通的semi-sync是卡在C阶段。

lossless的性能远远好于普通的semi-sync,即(after_sync 优于 after_commit)

因为lossless 卡在B阶段的时候可以堆积事务,可以在C阶段进行group commit。

普通的semi-sync,卡在C阶段,事务都已经commit了,并没有堆积的过程。

CAP理论

一致性【C】

可用性【A】

分区容忍性【P】

理论:CAP 三者不可兼得,必须要牺牲一个

分区,是一定存在的,不是你想不要就不要的。所以,这里只剩下两种组合

CP 牺牲可用性

这种做法,就是保留强一致性,牺牲可用性

案例:可以将rpl_semi_sync_master_timeout设置成一个无限大的值,比如:100天,那么master和slave就强一致了,但是可用性就大打折扣

AP 牺牲一致性

这种做法,就是保留高可用性,牺牲一致性

案例:比如原生的异步复制就是这样咯。可以快速做到切换,但是一致性就没有保障

与MySQL传统复制相比,GTID有哪些独特的复制姿势?

与MySQL传统复制相比,GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军,苏宁云商IT总部资深技术经理,从事数 ...

MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS[转]

MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS 简介 目前Mysql高可用的方案有好多,比如MMM,heartbeat+drbd,Cluster等,还有per ...

mysql数据库‘复制’的办法

mysql数据库‘复制’的办法 2006-01-17 10:36:00 标签:Mysql SQL 数据库 休闲 职场 >mysqldump wap -u root -ppassword --ad ...

浅谈MySQL Replication(复制)基本原理

1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...

mysql 蠕虫复制

INSERT into user_info(version,create_user_count,create_pc_count) select version,create_user_count,cr ...

MySQL的复制

1.复制概述1.1.复制解决的问题数据复制技术有以下一些特点:(1)    数据分布(2)    负载平衡(load balancing)(3)    备份(4)    高可用性(high avail ...

mysql并行复制降低主从同步延时的思路与启示

一.缘起 mysql主从复制,读写分离是互联网用的非常多的mysql架构,主从复制最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么mysql主从延时这么大? 回答:从 ...

[转载自阿里丁奇]各版本MySQL并行复制的实现及优缺点

MySQL并行复制已经是老生常谈,笔者从2010年开始就着手处理线上这个问题,刚开始两三年也乐此不疲分享,现在再提这个话题本来是难免"炒冷饭"嫌疑.    最近触发再谈这个话题,是 ...

随机推荐

angularjs 依赖注入--自己学着实现

在用angular依赖注入时,感觉很好用,他的出现是 为了"削减计算机程序的耦合问题" ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个 ...

洛谷P1280 尼克的任务[DP]

题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...

九、数据库——sql server 2008导入excel

昨天分配给我一个活,让我手动录入新闻网页的数据,包括每条新闻的标题.时间和链接. 一开始,就是按照最原始的手动录入的方法,一条条的录入.发现这简直就是在浪费时间,于是就想了一种新方法. 1.将网页中的 ...

C#学习笔记-----C#枚举中的位运算权限分配

一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会 ...

HIVE: Map Join Vs Common Join, and SMB

HIVE  Map Join is nothing but the extended version of Hash Join of SQL Server - just extending Hash ...

Keil uVision4 代码编辑器中文字符乱码问题

MDK-ARM 使用中一直有个很纠结的问题,中文字符支持不好. 比如写代码注释,使用中文删除字符就会只删除一半问题.复制粘贴代码中间有中文就会出现乱码问题. 想过换IAR,新学个IDE也麻烦,上面的问 ...

dom4j处理xml文件,读取xml字符串,格式化xml文件

1.xml文件 <?xml version="1.0" encoding="UTF-8"?>

LocalDate常用技巧

LocalDate是Java8新增的处理日期的类,使用起来比java.utils.date方便了许多.记录一些常用技巧: // 取当前日期: LocalDate today = LocalDate.n ...

前端框架之Vue&lpar;3&rpar;-计算属性

计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如:

{{ ...

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/27235.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息