ps

真实的流程没有我说的那么简单,下面的是最基本的情况。

预备知识redolog

binlog

WAL机制

redolog简介

redolog是个循环日志,其大小固定为4g,存在2个指针来定位其是否已经满了。一个指针是当前写,一个指针是当前checkpoint,其2个指针的顺时针空间就是可写的空间。

这个redolog就是完成mysql突然宕机后,如何无损恢复数据的。

binlog简介

这个是mysql自身的日志,叫做归档日志。和redolog大致3个不同点。其为mysql自带的,redolog是innodb里面的。

redolog是物理日志,binlog是逻辑日志。

redolog是循环日志,binlog是增量日志。

这里不对其过多介绍,下一篇文章关于主从的详细介绍,主从就是通过binlog完成的。

WAL机制简介

MySQL里经常说到的 WAL 技术,意思就是数据入库前先写进去日志,再写磁盘里面。

这里采用的是数据安全性最高的双1策略。

其数据更新顺序也保持着其顺序。

下面我来简单介绍下。

1.当要更新id=2这一行数据时,先通过这个表的索引,查询到这行记录所在的数据页。然后判断这个数据页是否在buffer pool(这个是内存)。

2.如果不在内存则需要读到内存(其实也可以不用读入内存,当要更新的这行数据没有唯一索引时,mysql为了提高效率,采用了change buffer(别看有个buffer,但是人家也是持久化到磁盘的)这个东西,将对这行修改的动作记录到change buffer里面,就不用读到内存了)。

3.在buffer pool 内存上修改这行数据(仅仅只是在内存上修改了这行数据,并没有持久化到磁盘里面)。

4.将上面的操作,写入到redolog里面,且将这个操作状态设置为prepare状态,首先写到redologbuffer里面(为了提高效率,mysql做了组提交这个优化,这里不扩展),等到这个事务提交后,redologbuffer然后再写入到文件系统的page cache里面,然后立马调用fsync,将其刷到磁盘。

5.然后写入到binlog里面,先写到binlog cache里面,然后写入page cache,然后调用fsync,写入磁盘。

6.redolog继续写一次,将其状态设置为commit状态。

如此就算完成了一个更新操作。

mysql 如何做到crash后,数据不丢失的

前面说了数据更新操作。

当前buffer pool里面存在大量脏页(就是一些数据页,只在内存里面修改了,没有刷新到磁盘),当系统宕机了,内存里面的数据全部丢失了怎么办?

方法如下:我们需要redolog来完成灾难备份,check point到writ pos这块空间记录的所有的操作步骤派上用场了,根据这些redolog记录从磁盘里面读取所有相关的数据页。然后按照redolog上的操作恢复数据即可,那么我们发现存再内存的数据全部恢复了。

mysql crash 如何导出数据库_mysql 如何做到crash后无损恢复数据的相关推荐

  1. mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解

    Mysql命令行导入数据库: 1,将要导入的.sql文件移至bin文件下,这样的路径比较方便 2,同上面导出的第1步 3,进入MySQL:mysql -u 用户名 -p 如我输入的命令行:mysql ...

  2. mysql crash 如何导出数据库_MySQL数据库crash的问题分析

    [问题] 生产环境有多台slave服务器,不定期的会crash,下面是error log中的堆栈信息 Thread pointer: 0x7f1e54b26410 Attempting backtra ...

  3. mysql快速导入导出数据库_mysql快速导出与导入

    前言:目前各种客户端越来越智能,数据库也随之越来越大,如果要做个什么数据库备份,如果数据库较小还好说,数据库随随便便几十个G,光导出就要耗费大量时间,更别说导入,那么有什么办法可以快速导出,导入呢? ...

  4. mysql e 导出数据库_mysql导出数据库几种方法

    方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...

  5. mysql命令导出数据库_MYSQL 数据库导入导出命令

    在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生.所以一般推荐用SQL脚本形式导入.下面分别介绍两种方法. MySQL命令行导出数据库 1,进入MySQL目录下的bin ...

  6. mysql怎样dao出数据库_mysql怎么导出数据库?

    mysql怎么导出数据库?下面本篇文章就来给大家介绍3种mysql导出数据库的方法,希望对你们有所帮助. mysql导出数据库的方法: 方法一 cmd 到mysql bin目录下用如下命令:mysql ...

  7. MySQL命令行导出数据库

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...

  8. MySQL命令行导出数据库(sql脚本)

    MySQL命令行导出数据库: 1.进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 输入的命令行:cd C:\Program Files\MySQL\MySQL Server ...

  9. Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题

    MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...

最新文章

  1. 任正非签发最新电邮:过去我们是为了赚点小钱,现在是要战胜美国
  2. 如何做好SOC的一点点体会
  3. 【教程】jQuery打造动态下滑菜单
  4. 牛客多校7 - A National Pandemic(树链剖分+线段树)
  5. OpenJDK8 u282发布一个月了,龙芯还没有更新跟进
  6. 【九天教您南方cass 9.1】 10 DTM土方计算的四种方法
  7. 数学建模—多元回归分析
  8. 黑马Python教程实战项目--美多商城(一)
  9. mysql auto_increment 重置_如何重置MySQL中的AUTO_INCREMENT?
  10. 红包来咯!免费的红包封面快来领取!
  11. linux 软件包kbd 位置,6.42. Kbd-1.12
  12. ES7、ES8、ES9、ES10新特性大盘点
  13. Cloudera是个什么东西
  14. IP 别名和辅助 IP 地址
  15. 极光将赴美上市,哈米宣布倒闭,然:又有8家公司拿到融资!
  16. mysql切换Tidb
  17. Alcohol 120% 的五种烧录方式各有什么区别
  18. android渗透工具是什么意思,android渗透攻击工具合集
  19. Excel拼接单引号和逗号
  20. “OpenI/O 2020启智开发者大会”共话开源,百度飞桨引领行业发展

热门文章

  1. 16位计算机cpu电路图,简单16位CPU设计.doc
  2. 华为鸿蒙系统智能手机_余承东再度确认:鸿蒙系统将适配到华为手机上
  3. 参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)
  4. H5 使用微信开放标签跳转小程序
  5. 2019数据安装勾选_【安装部署】esweb服务器如何单独部署
  6. 在vlan2用计算机名访问,计算机是如何访问一个网页的?vlan间如何实现通信?
  7. 发票管理软件_财务人员都在用的这款发票管理软件,真的值得购买么?
  8. 轻gc和重gc分别在什么时候发生_GC发展与现状
  9. linux创建目录的语句,Linux的 文件 和 目录 管理(基本语句)
  10. ASP.NET MVC 入门7、Hellper与数据的提交与绑定