首页
学习
活动
专区
工具
TVP
发布

MySQL 案例:“丢失数据”的谜题

前言 最近偶尔会收到用户反馈数据不见了,数据丢失了的问题。...但是,作为一个以稳定为主的软件,其实丢数据的概率是非常低的,所以这些反馈的问题,是不是真的“丢失数据了”? 问题描述 某日中午接到用户反馈,用业务账号登录数据库以后,业务库不见了。...> 拓展一下 对于“丢失数据”这个现象来看,如果是“丢失”了整个库级别的数据,但是数据库本身又一切正常的话,其实有蛮大的可能性和这个案例是一样的问题:权限错误。...另外一类属于“丢失部分数据”,比如某张表不见了,或者是表的某些数据不见了等等。...总结一下 遇到这一类问题时,可以先花一点观察一下问题的现象,可能只需要几秒钟的时间重新授权就解决这类“丢失数据”的非常紧急且非常严重问题。

3.9K142
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL是如何保证数据丢失的?

但是,MySQL作为一个存储数据的产品,怎么确保数据的持久性和不丢失才是最重要的,感兴趣的可以跟随本文一探究竟。...这个时候就涉及到一个问题:如果MySQL服务宕机了,这些在内存中更新的数据会不会丢失?答案是一定会存在丢失现象的,只不过MySQL做到了尽量不让数据丢失。接下来来看一下MySQL是怎么做的。...数据持久化方案可以是可以,但是如果每次的DML操作都要将一个16KB的数据页刷到磁盘,其效率是极低的,估计也就没有人用MySQL了。但是如果不刷新到磁盘,就会发生MySQL服务宕机数据丢失现象。...总结InnoDB通过以上的操作可以尽可能的保证MySQL丢失数据,最后再总结一下MySQL是如何保障数据丢失的:为了避免频繁与磁盘交互,每次DML操作先在「Buffer Pool」中的缓存页中执行,...如果在「脏页」刷新到磁盘之前,MySQL宕机了,那么会在下次启动时通过 redo log 将脏页构建出来,做到数据恢复。通过以上步骤,MySQL做到了尽可能的不丢失数据

50441

面试系列-mysql如何确保数据丢失

预备知识 mysql内部是使⽤b+树的结构将数据存储在磁盘中,b+树中节点对应mysql中的页,mysql和磁盘交互的最⼩单位为页,页默认情况下为16kb,表中的数据记录存储在b+树的叶⼦节点中,当我们需要修改...mysql确保数据丢失原理分析 我们来思考⼀下,下⾯这条语句的执⾏过程是什么样的: start transaction; update t_user set name = '路⼈甲Java' where...⽂件中了,不会丢失 认真看⼀下上⾯过程中第9步骤,⼀个成功的事务记录在redo log中是有start和end的,redo log⽂件中如果⼀个trx_id对应start和end成对出现,说明这个事务执...redo log是mysql中所有连接共享的⽂件,对mysql执⾏insert、delete和上⾯update的过程似,都是先在内存中修改页数据,然后将修改过程持久化到redo log所在的磁盘⽂件中,...,不会丢失,做到了可靠性。

1.1K10

MySQL案例:一个数据丢失惨案

前言 最近,有一位朋友突然微信联系我,说MySQL出现了数据丢失的情况;毫无疑问,对于一个DBA而言,这无疑是最令人紧张的一件事情,没有之一;听到这个消息后,我也就立刻投入到问题排查中。...案例复现 看完刚刚的排查过程,相信很多童鞋都会有疑问,为什么修改字段长度对导致数据被截断?MySQL难道不会不会做数据校验吗?让我们接着往下看。...”;场景2是执行成功,导致“数据部分丢失”;那么,MySQL是没有进行数据校验吗?...其实MySQL都有对数据进行校验的,只是在场景2中,因为sql_mode配置有问题,没有设置STRICT_TRANS_TABLES,导致MySQL没有阻止该操作执行,从而导致“数据丢失”惨案。...总结 至此,“数据丢失”惨案也就可以告一段落,根本原因是sql_mode没有设置STRICT_TRANS_TABLES;这个案例也是在提醒我们,sql_mode是一个非常关键的配置,千万不可随便设置和修改

2K50

突然掉电,为啥MySQL也不会丢失数据?(收藏)

MySQL采用buffer机制,避免每次读写进行磁盘IO,提升效率: 《缓冲池(buffer pool)》 《写缓冲(change buffer)》 《日志缓冲(log buffer)》 MySQL的buffer...一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要写4个文件系统里的页。...如上图所示,MySQL内page=1的页准备刷入磁盘,才刷了3个文件系统里的页,掉电了,则会出现:重启后,page=1的页,物理上对应磁盘上的1+2+3+4四个格,数据完整性被破坏。...自己实验了几十次,仍没能复现“页数据损坏”,在网上找了一个“页数据损坏”时,MySQL重启过程利用DWB修复页数据的图。...结尾 MySQL有很强的数据安全性机制: (1)在异常崩溃时,如果不出现“页数据损坏”,能够通过redo恢复数据; (2)在出现“页数据损坏”时,能够通过double write buffer恢复页数据

1.6K20

MySQL实战问题02 mysql是如何保证数据丢失

fa只要保证redolog 和 binlog 持久化到磁盘, 就能保证mysql异常重启后, 数据可以恢复. binlog与redolog的写入机制 binlog的写入机制 binlog 的写入逻辑比较简单...,所以速度比较快 图中的 fsync,才是将数据持久化到磁盘的操作。...两阶段提交细化 写binlog这个步骤实际上是分成两步的 先把binlog从 binlog cache 中写到磁盘上binlog文件; 调用fsync持久化 mysql为了让组提交的效果更好, 实际步骤如下...一些问题: 如果你的 MySQL 现在出现了性能瓶颈,而且瓶颈在 IO 上,可以通过哪些方法来提升性能呢?...这个方法是基于“额外的故意等待”来实现的,因此可能会增加语句的响应时间,但没有丢失数据的风险 将 sync_binlog 设置为大于 1 的值(比较常见是 100~1000)。

2.1K20

docker|docker安装mysql数据

docker 安装数据库 说明,本文DEMO示例仅适用于本机开发环境,不适用线上生产环境 使用命令 docker ps 如有以下输出,则是已安装docker ?...如没有安装,可参考docker官网,windows/mac 直接下载安装包安装就可以了 下载地址: https://www.docker.com/products/docker-desktop 安装Mysql...的命令 docker run -p 33306:3306 --name mysql-docker -e MYSQL_ROOT_PASSWORD=javastudy -d mysql ?...-d 容器启动后会后台运行 mysql 使用哪个镜像 使用工具连接mysql 这里博主使用的是idea自带的数据库连接工具,连接成功后,可以看到数据库版本号是 8.0.18 ?...Demo总评 以前安装很复杂的东西,现在用docker基本上都是一行命令解决,以前在电脑上装mysql战战兢兢,因为一装错,还不好卸载,只能重装系统,现在用docker 就完全不用担心这个问题,装错了,

2.1K20

docker部署mysql的坏处_docker创建mysql数据

swapfile 再次启动容器后,容器正常运行 ————————————————-割———————————————– 有些问题到这里可能就已经解决了,然而我遇到的情况可能还要复杂一些,容器启动后,docker...这个时候,应该就是容器自身的问题了,使用docker logs –tail 100 查看容器日志,看到有报错。 报错看着像是之前为了修改密码添加配置文件参数报错了。...查看了以下,当初创建这个mysql容器时没有添加容器数据卷,所以只能把里面的文件复制出来,改了再复制回去了。...docker cp :/etc/mysql/conf.d/docker.cnf /root/mysql.cnf 然后修改宿主机上的/root/mysql.cnf文件,再复制回去 docker...cp /root/mysql.cnf :/etc/mysql/conf.d/docker.cnf 再次启动容器后,终于运行正常了。

2.2K20

关于MYSQL数据库管理员密码丢失找回

一、MYSQL数据库密码找回: 密码错误: 关于MYSQL数据库管理员密码丢失找回 1.vim /etc/my.cnf 进入配置文件,写入 skip-grant-tables 关于MYSQL数据库管理员密码丢失找回...2.重启:systemctl restart mysqld 再进mysql都不要密码了 关于MYSQL数据库管理员密码丢失找回 3.设置密码:进入到mysql数据库中设置密码 关于MYSQL数据库管理员密码丢失找回...数据库管理员密码丢失找回 7.输入密码: 关于MYSQL数据库管理员密码丢失找回 二、另一个修改密码方法: 1.在ssh中修改密码,需要原密码: mysqladmin -uroot -p'Aa123.123...' password 'QianFeng@123' 关于MYSQL数据库管理员密码丢失找回 2.登录mysql: 关于MYSQL数据库管理员密码丢失找回 登录成功 3.更加安全的修改密码加密方式: 1....3.更新权限:flush prinleges 关于MYSQL数据库管理员密码丢失找回 3.登录到mysql数据库: 关于MYSQL数据库管理员密码丢失找回 4.登录成功

2.1K42

Redis数据丢失问题

一、两种数据丢失的情况 主备切换的过程中(异步复制,脑裂),可能会导致数据丢失 1.1 异步复制导致的数据丢失 因为master -> slave的复制是异步的(客户端发送给redis,主节点数据同步到内存中后就返回成功了...) 所以可能有部分数据还没复制到slave,master就宕机了,此时master内存中的数据也没了,这些部分数据丢失了。...二 如何解决redis数据丢失的问题 解决以上两种情况redis数据丢失的问题都是靠以下两个参数配置将数据损失降到最低。...,防止宕机时候丢失数据更多,于此同时全力进行数据同步,当然我们可以在延迟很高的时候呢做限流降级,也可以把数据丢到mq里,每隔一段时间进行一次消费给他重新回流到redis的机会 2.2 减少脑裂的数据丢失...上面两个参数保证了发生脑裂后多长时间停止新的写入,让我们数据丢失的损失降低到最少,这里脑裂状态持续的越久就会丢失越久的数据,因为他重启后会变成从结点,所有数据同步于新的master,原来的数据都丢了

3K30
领券