聊聊mysql liangdong@smzdm.com.

Slides:



Advertisements
Similar presentations
校园及周边治安防范 暨应急预案桌面演练 实 训 乐山应急管理学会 贾 伟. 目 录 校园治安问题包含的内容 校园治安问题的特点 避免引发校园治安问题的对策 校园应急预案桌面演练实训 校园治安问题的成因.
Advertisements

“ 我不能 上学了,我 每天还要帮 家里拾柴火 呢。 ” 给远方的小学生写一封信 书信的基本格式: 开头顶格写称呼,打上冒号; 换行空两格写问候语; 接下来换行空两格写正文部分; 正文结束后,换行写祝颂语; 最后在右下方写上寄信人姓名和 写信日期。
中醫藥就醫用藥 - 婦女篇 中醫藥安全衛生教育資源中心 中醫藥就醫用藥百分百、就是藥做到: 停、看、聽、選、用專業.
下背痛 林口長庚醫院內科 住院醫師 毛畯台. 下背痛常見原因 軟組織受傷/背部筋膜發炎 椎間盤突出症 脊椎退化性關節炎 壓迫性骨折 椎間盤滑脫 惡性腫瘤 泌尿道疾患 姿勢不良.
華德學校上午校 「協助小學中國語文科教師建立專業學習型社群」計劃 (2008) 總結分享會 二零零九年一月十日.
園藝二乙 1 號 丁楷儒 32 號 孫子恩. 1. 福山萵苣 ( 大陸妹 ) : 福山萵苣,萵苣家族成員之一,鮮甜脆綠又帶有萵苣類的 特殊苦味,用來代替生菜搭配烤肉也別具風味。極少病蟲 害,只需定時澆水施肥就能健康長大,是相當容易種植又 能有大收穫的蔬菜 。 感想: 雖然大陸妹好吃又好種,但種了太多而吃不完.
第五单元 口语交际和作文.
第15章 备份与恢复数据库 日志文件 基本概念 恢复数据库的基本原理 数据库故障的种类 备份数据库 备份的内容和时间 备份的一般方法
第八章 負債 8-1 負債之意義及內容 8-2 流動負債 8-3 長期負債 8-4 其他負債.
工业财务状况表 财务部分培训 (2010年年报).
定海区渔农村集体资产 股份合作制改革工作 档案管理培训班
北京市工作居住证办理讲解.
厦门大学数据库实验室 刘颖杰 2014年11月15日 实习总结报告 厦门大学数据库实验室 刘颖杰 2014年11月15日.
祝贺您获得国家留学基金资助 请您登陆“国家留学网”查看《出国留学人员须知》,您在出国前及在外学习期间所需要办理的手续及具体流程,以及可能遇到的政策上疑问均在此《须知》上有所列明。
实际问题与一元二次方程(一).
6 Copyright © Oracle Corporation, All rights reserved. 维护控制文件.
审题与立意 夏邑高中高四语文组.
述职报告 ( 二○○七年度 ) 述职人: xxx 部 门: 计划财务部 岗 位: 部门经理.
转正述职报告 电商文案策划 XXX.
國立清華大學 國科會計畫經費管理 報告人:周 杏 貞 中華民國101年5月.
护患沟通技巧 护理部 马红云.
一、會計循環之意義 二、會計憑證概要 三、日記簿概要 四、分類帳概要
2013华东数据库技术大会 MySQL5.6版InnoDB引擎深入剖析 演讲嘉宾:何登成
MHA(Master High Availability) 作者
思想道德修养与法律基础 主讲人:XXX.
淘宝 商品库MySQL优化实践 QCon 2011 Beijing
特种设备安全法简介 中原油田分公司 杜习广 2015年4月 视频.
马街乡综治维稳工作情况汇报 汇报人:xxx.
11.3 国产大数据库技术 阿里巴巴OceanBase 云创存储数据立方(DataCube)
第三課 宗教(倫理)的獨特向度 單元 3.2 全球倫理:兩項原則和四項座右銘
通病文章 休 闲   今天天气真好,晴空万里,天上飘着朵朵白云。(偶可从没见过这样的情景^_^)我和同学小刚一起骑车去上学,突然他的车气门芯坏了,我就把我车上的拔下来给他装上,我俩继续一起高高兴兴地骑车往学校赶。(原来“我”的自行车可以不用气门芯啊^_^)   我们经过一家百货商店时,我不禁感慨道:啊!看来人民生活水平的确提高了,你看那位农民老大爷,左手一台电冰箱,右手一台电视机,一溜小跑回家去了。(比周星弛在《功夫》里还要厉害?!)都说一心不能二用,当我注视老大爷的时候,冷不丁岔道里冲出来一位老太太,说
科學與科技課程 教師分享會 二OO四年五月七日.
MySQL主从同步
应如何深化普通高中学生综合素质评价 北京教科院基础教育研究所 赵学勤 2010、12、14-15.
追问课堂,寻求效益 —有效教学的几点思考 牟平区实验小学 战丽娜.
电商2班 第五组. 电商2班 第五组 小组成员: 组长:汤昀 成员:杨阳、陆萍、邹斯斯、吴晓庆、吴盈盈.
陈 汉 文 厦门大学会计系 主任 经济学教授 博士生导师
Oracle数据库 Oracle 子程序.
我真的很不想活,日子過得太沒有意思了。. 我真的很不想活,日子過得太沒有意思了。 聽起來,你現在的日子真難熬,你 願意說說看為什麼嗎?
课程名称 黄杉 讲师的CSDN博客地址:

让道德之花越开越鲜艳 主讲 xxx.
老员工心态管理.
平昌县泥龙初中校本培训 中小学微型课题研究
二、感谢信的种类 根据寄送对象不同,感谢信可以分为三种: 1、直接寄送给感谢对象; 2、寄送对方所在单位有关部门或在其单位公开张贴; 3、寄送给广播电台、电视台、报社、杂志社等媒体公开播发。
在PHP和MYSQL中实现完美的中文显示
MySQL Replication 新功能介绍
热烈祝贺医院开业.
產品責任險的意義 想一想,什麼是「產品責任險」? Q
Hadoop I/O By ShiChaojie.
面向高能所信息化系统的高可用数据库服务 王丽 计算中心 中科院高能所 第十八届全国科学计算与信息化会议.
浅谈MySql索引及锁的应用 厦门大学数据库实验室 刘颖杰 2014年3月8日.
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
刘红岩 清华大学 管理科学与工程系 第17章 事务管理 刘红岩 清华大学 管理科学与工程系
An Introduction to Cloud RDBMS
网易杭州研究院---胡争(博客:openinx.github.io)
分布式数据库系统及其应用.
古诗鉴赏.
实验讲评
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
An Introduction to Database System
第六類 資料庫備份與回復.
信号量(Semaphore).
解决“最后1公里”问题.
Visual Basic程序设计 第13章 访问数据库
Touch Github = Touch the World
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
§4 连续型随机变量.
6.1.1 平方根.
Mycat官方出品 中国第一开源社区
Presentation transcript:

聊聊mysql liangdong@smzdm.com

innodb redo undo checkpoint

innodb - undo - 回滚 优势:事务原子性,数据持久化 劣势:数据总是写磁盘 内存修改,数据无变化 根据undo log回滚 提交事务 a = 3 b = 4 读取文件片段 到内存 客户端 磁盘数据 a = 1 b = 2 优势:事务原子性,数据持久化 劣势:数据总是写磁盘 事务开始 内存操作 undo log buffer 备份a=1 覆盖 宕机 更新a=3 内存修改,数据无变化 备份a=2 更新b=4 undo log 文件 undo log落地 根据undo log回滚 记录事务提交 磁盘新数据 a = 3 b = 4 新数据落地 根据undo log回滚 事务提交 数据已更新,无需回滚 返回客户端

innodb - undo - 回滚 为了保障事务原子性以及数据持久化,在事务提交前需要调用sync保证undo log和data被刷出到磁盘。 凡是事务最终提交前宕机,都可以依靠磁盘保存的undo log完成数据恢复( 回滚)。 通过某种技术手段(redo),避免每个事务持久化data(定时的sync),可 以大幅提升写入性能,主要思路: 更新后的data先缓存在内存,不立即落盘。—-宕机丢失更新? 将更新的数据顺序写到redo log,比覆盖data要快。—- 增量取代全量 宕机重放redo log,恢复已经提交的事务(恢复本应落地的data)。

innodb - redo - 重做 提交事务 a = 3 b = 4 读取文件片段 到内存 客户端 磁盘数据 a = 1 b = 2 事务开始 undo log buffer redo log buffer 内存操作 备份a=1 覆盖 事务回滚: 记录1: <trx1, Undo log insert <undo_update xxx set a=1 …>> 记录2: <trx1, update xxx set a=3 …> 记录3: <trx1, Undo log insert <undo_update xxx set b=2…>> 记录4: <trx1, update xxx set b=4…> 记录5: <trx1, update xxx set a=1 …> 记录6: <trx1, update xxx set b=2 …> 记录5: <trx1, rollback …> 更新a=3 备份a=2 内存数据 a = 3 b = 4 按一定策略,定时刷出 磁盘新数据 a = 3 b = 4 更新b=4 redo+undo log 文件 redo+undo log落地 事务回滚 记录事务提交 事务提交: 记录1: <trx1, Undo log insert <undo_update xxx set a=1 …>> 记录2: <trx1, update xxx set a=3 …> 记录3: <trx1, Undo log insert <undo_update xxx set b=2…>> 记录4: <trx1, update xxx set b=4…> 记录5: <trx1, commit …> 事务提交 返回客户端

innodb - redo - 重做 无论事务 提交/回滚/宕机,每一条执行的SQL均记录到redo log。 恢复时,只需遍历redo log,收集每个事务关联的redo/undo记录,并重放所有redo记录用于恢复 data。 若能找到事务的commit/rollback日志,说明事务正常结束,无需回滚。 若未能找到事务的commit/rollback日志,说明事务意外中止,反向重放所有undo记录令数据回到 修改前的状态。 redo+undo log持续追加,宕机恢复花费时间长,可以借助checkpoint手段避免: 一个事务(trx)内的SQL关联到同1个LSN标识,LSN标识递增。 一个事务影响多个脏页,取当前最老的脏页的最早LSN作为checkpoint,确保所有拥有 LSN<checkpoint的脏页刷出磁盘。 最终将checkpoint写到redo log头部保存,下次宕机可以跳过redo log中LSN<checkpoint的log。

master-slave binlog gtid

master-slave - 架构

master-slave - GTID GTID在master-slave集群中唯一标识1个事务: GTID = UUID(server_id):transaction_id。 集群中每个mysqld的server_id各不相同。 每个mysqld内部transaction_id是自增整形。 GTID是引擎(例如:innodb)无关的。 GTID是master与slave进行数据同步的唯一标识。

master-slave - binlog binlog用于记录数据库的修改历史,因此只包含提交的事务 。 binlog是引擎无关的,所以不要和innodb的redo/undo log混 淆。 binlog是以事务为单元保存的,每个事务有唯一GTID标识 。

master-slave - binlog格式 gtid区间[0,n1) binlog.index binlog meta信息 指向最新binlog binlog.00002 gtid区间[n1,n2) previous_gtid_log_event gtid event - 1 binlog.00003 gtid区间[n2,n3) gtid event - 2 binlog.00123 gtid区间[nn,…) gtid event - N

master-slave - binlog format Statement Level:保存SQL语句。 优点:日志量少,性能高。 缺点: 特定功能/函数导致主从数据不同。 缺乏幂等性,异常情况导致SQL重复执行。 Row Level:保存变更的数据行。 优点:符合幂等性,高度保障数据一致。 若SQL影响多行数据,导致日志体积膨胀,进而增大了主从延迟。 Mixed:根据SQL类型动态选择上述2种模式。

master-slave - innodb+binlog 1,prepare阶段:落地redo/undo日志 xid XA:分布式事务 2PC:二阶段提交 - prepare+commit redo+undo log文件 3,commit阶段:落地commit日志 异常恢复: after step 1:innodb重放redo,发现无commit 记录。去binlog找xid无法找到,执行undo回滚。 after step 2:innodb重放redo,发现无commit 记录。去binlog找xid找到完整日志,提交innodb事务。 innodb mysqld 2,确保binlog落地 xid binlog 每个事务都sync太慢! sync_binlog=0:不主动sync(),可能丢失较多事务 sync_binlog=1:每次都sync(),不丢失事务 sync_binlog=N:每N个事务sync()一次,最多丢失N个事务

master-slave - 基于gtid的同步 executed_gtid_set master:1 master:2 master:3 并集 binlog-00000 binlog-00001 gtid range [1,2) gtid range [2,4) master master:2 master:3 master:2 master:3 master:1 master:2 master:1 executed_gtid_set master:1 master:2 executed_gtid_set master:1 slave1 slave2

master-slave - replica模式 异步(Asynchronous replication):master commit后先返回客户端,再由slave主动拉取master的binlog。 优点:master不需等待slave同步完成,延迟低。 缺点:日志异步传输,master宕机导致部分binlog没有及时同步到slave,造成数据丢失。 全同步(Fully synchronous replication):master commit后立即将binlog传输给所有slave,并等待它们全部执行成功。 优点:一定程度提升了安全性。 缺点:同步等待所有slave执行完成再返回客户端,导致吞吐大幅降低。 半同步(Loss-less Semi-Synchronous Replication):master commit后立即将binlog传输给一台slave,由slave刷出到relay-log后返回 ack给master,然后master返回客户端。 优点: 只等待1台slave落地relay-log即返回,在可容忍的延迟时间内加强了一定的安全性。 缺点: 存在主从一致性问题,解决一致性需要牺牲一定的性能。 这里主从一致是指:master宕机重启后,主从是否能继续同步。

master-slave - semi-sync WAIT_AFTER_COMMIT 开始事务提交 write binlog sync binlog (受sync_binlog参数影响) 正常情况XA可以重做,数据得以恢复。 engine commit relay-log 同步等待 send events master有而slave没有,造成”幻读”。 ack 返回客户端

master-slave - semi-sync WAIT_AFTER_SYNC 开始事务提交 write binlog sync binlog (受sync_binlog参数影响) 正常情况XA可以重做,数据得以恢复。 relay-log 同步等待 send events (受sync_binlog参数影响) slave得到日志并执行, master未sync binlog导致部分丢失, XA事务无法重放, 则slave领先于master。 ack engine commit 返回客户端

实战部署 部署mysql 5.7 GTID 1主2从 模拟场景:1从延迟,主宕机,将数据较新slave提高为 master。 模拟场景:基于mysqldump,向集群新增slave节点。

Q&A