mysql单表增量_数据库单表增量备份方案

方案1:

对于一个表来说,我们要实现备份最简单的方法就是直接备份,这张表包括数据与结构直接备份,这种情况对已小的数据库表来说是行的通的,但是这种方法存在一些问题:例如,如果这个表的数据很大呢?达到上G、几G、几十个G之类的,这样的话备份的时候很占资源和时间,所以,我觉得这样的备份不值得推荐。

所以针对上面的问题,我用触发器来实现,具体思路如下:

1、  假设现在有一个表mytest需要做备份,然后有mytest_backup表来保存备份的数据,然后这两个表的结构是一样的;

例如:

mytest:

CREATE TABLE `mytest` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`colum1` varchar(50) DEFAULT NULL,

`colum2` varchar(50) DEFAULT NULL,

`colum3` varchar(50) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

mytest_backup:

CREATE TABLE mytest_backup like mytest;

2、  建立触发器mytest_backup,每当mytest有数据插入的时候,就向mytest_backup中也插入刚才的数据,这样就实现了备份,具体的实现如下:

BEGIN

INSERT INTO mytest_backup

SET id = new.id,

colum1 = new.colum1,

colum2 = new.colum2,

colum3 = new.colum3;

END

3、  那更新的时候怎么办呢?新建一个表mytest_update,新建一个触发器,每当我们修改过数据,就把修改的每一条数据都记录下来,备份的时候只需在执行这些数据来更新就可以了:

mytest_update:

CREATE TABLE `mytest_update` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`colum1` varchar(50) DEFAULT NULL,

`colum2` varchar(50) DEFAULT NULL,

`colum3` varchar(50) DEFAULT NULL,

`update_id` bigint(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

触发器如下:

BEGIN

INSERT INTO mytest_update

set update_id = new.id,

colum1 = new.colum1,

colum2 = new.colum2,

colum3 = new.colum3;

END

4、  那么删除以同样的方法也就可以实现,新建mytest_delete表,然后每当有删除操作的时候我们就把id保存下来,备份的时候把备份表所对应的ID删除之后就可以了:

mytest_delete

CREATE TABLE `mytest_delete` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`delete_id` bigint(20) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

触发器:

BEGIN

INSERT INTO mytest_delete

set delete_id = old.id;

END

5、  恢复:恢复的时候,把test_backup的所有数据记录恢复到原表,然后把test_update表中的所有数据都执行备份,然后再根据mytest_delete的所有ID执行删除,这样就可以把这张表的数据实现恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值