+
95
-

如果 MySQL 数据库中的数据丢失,有哪些补救的办法呢?

如果 MySQL 数据库中的数据丢失,有哪些补救的办法呢?


网友回复

+
15
-

在介绍 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%

我知道答案,我要回答