mysql crash 如何导出数据库_mysql 如何做到crash后无损恢复数据的
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后无损恢复数据的相关推荐
- mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解
Mysql命令行导入数据库: 1,将要导入的.sql文件移至bin文件下,这样的路径比较方便 2,同上面导出的第1步 3,进入MySQL:mysql -u 用户名 -p 如我输入的命令行:mysql ...
- mysql crash 如何导出数据库_MySQL数据库crash的问题分析
[问题] 生产环境有多台slave服务器,不定期的会crash,下面是error log中的堆栈信息 Thread pointer: 0x7f1e54b26410 Attempting backtra ...
- mysql快速导入导出数据库_mysql快速导出与导入
前言:目前各种客户端越来越智能,数据库也随之越来越大,如果要做个什么数据库备份,如果数据库较小还好说,数据库随随便便几十个G,光导出就要耗费大量时间,更别说导入,那么有什么办法可以快速导出,导入呢? ...
- mysql e 导出数据库_mysql导出数据库几种方法
方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...
- mysql命令导出数据库_MYSQL 数据库导入导出命令
在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生.所以一般推荐用SQL脚本形式导入.下面分别介绍两种方法. MySQL命令行导出数据库 1,进入MySQL目录下的bin ...
- mysql怎样dao出数据库_mysql怎么导出数据库?
mysql怎么导出数据库?下面本篇文章就来给大家介绍3种mysql导出数据库的方法,希望对你们有所帮助. mysql导出数据库的方法: 方法一 cmd 到mysql bin目录下用如下命令:mysql ...
- MySQL命令行导出数据库
MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...
- MySQL命令行导出数据库(sql脚本)
MySQL命令行导出数据库: 1.进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 输入的命令行:cd C:\Program Files\MySQL\MySQL Server ...
- Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题
MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...
最新文章
- 任正非签发最新电邮:过去我们是为了赚点小钱,现在是要战胜美国
- 如何做好SOC的一点点体会
- 【教程】jQuery打造动态下滑菜单
- 牛客多校7 - A National Pandemic(树链剖分+线段树)
- OpenJDK8 u282发布一个月了,龙芯还没有更新跟进
- 【九天教您南方cass 9.1】 10 DTM土方计算的四种方法
- 数学建模—多元回归分析
- 黑马Python教程实战项目--美多商城(一)
- mysql auto_increment 重置_如何重置MySQL中的AUTO_INCREMENT?
- 红包来咯!免费的红包封面快来领取!
- linux 软件包kbd 位置,6.42. Kbd-1.12
- ES7、ES8、ES9、ES10新特性大盘点
- Cloudera是个什么东西
- IP 别名和辅助 IP 地址
- 极光将赴美上市,哈米宣布倒闭,然:又有8家公司拿到融资!
- mysql切换Tidb
- Alcohol 120% 的五种烧录方式各有什么区别
- android渗透工具是什么意思,android渗透攻击工具合集
- Excel拼接单引号和逗号
- “OpenI/O 2020启智开发者大会”共话开源,百度飞桨引领行业发展
热门文章
- 16位计算机cpu电路图,简单16位CPU设计.doc
- 华为鸿蒙系统智能手机_余承东再度确认:鸿蒙系统将适配到华为手机上
- 参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)
- H5 使用微信开放标签跳转小程序
- 2019数据安装勾选_【安装部署】esweb服务器如何单独部署
- 在vlan2用计算机名访问,计算机是如何访问一个网页的?vlan间如何实现通信?
- 发票管理软件_财务人员都在用的这款发票管理软件,真的值得购买么?
- 轻gc和重gc分别在什么时候发生_GC发展与现状
- linux创建目录的语句,Linux的 文件 和 目录 管理(基本语句)
- ASP.NET MVC 入门7、Hellper与数据的提交与绑定