如果 MySQL 数据库中的数据丢失,有哪些补救的办法呢?
网友回复
在介绍 MySQL 数据库在什么情况下可能会丢失数据之前,我们首先回顾一下写入一条数据到 MySQL 数据库中所经历的模块,具体如下。
第一个模块:将修改的数据逻辑保存在 change buffer 之中。
第二个模块:将修改的数据保存在 binlog cache 之中。
第三个模块:将修改的数据保存在 redo log 之中。
在这三个模块中,change buffer 是用来保存修改数据的逻辑的,在修改之后,通过 merge 的方式写入磁盘。 在这个模块中,有没有可能发生数据丢失呢?其实微乎其微,这主要是因为 MySQL 数据库为了防止数据丢失而增加了 redo log 这个模块,其主要的作用就是防止数据丢失。那么,我们就一起来聊一聊 redo log 是怎么保存数据的。 redo log 主要分为两个部分,分别是 redo log 和 redo log buffer 两个部分。redo log 和 redo log buffer 的功能我们之前多次说过,这里不再赘述。下面我们主要介绍 redo log 是怎么保存数据的。 当一条数据写入数据库之前,为了防止数据丢失,首先会将该条数据保存在 redo log buffer 之中,然后再保存在 redo log 之中,以便当数据库宕机之时作数据恢复使用。 那么这个时候我们就要问,在这个过程中 redo log 有没有可能会发生数据丢失呢? 这是有可能的。假如一个事务在执行一半的时候突然 MySQL 数据库宕机,此时 redo log buffer 中的所有数据将会全部丢失,不过一般这种情况只会发生在事务未提交的情况下,所有数据丢失也影响不大。 此时,我相信你会问,如果恰好在事务提交之时,MySQL 数据库发生宕机会不会丢失数据呢? 显然,这也是有可能的。下面我们根据 MySQL 数据库保存 redo log buffer 中的数据来分析丢失数据的可能。 在 MySQL 数据库中,redo log buffer 有三种保存数据的状态,分别是:redo log buffer 将数据保存在 MySQL 数据库的内存中,也就是 InnoDB 存储引擎的 buffer pool 之中。这其实跟上述的情况一致,保存的是未提交的数据,此时如果 MySQL 发生宕机,丢失的是未提交的事务信息,对于 MySQL 数据库整体而言,没有大的影响。
redo log buf...
点击查看剩余70%
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?