数据库单表增量备份方案

方案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执行删除,这样就可以把这张表的数据实现恢复。

posted @ 2015-07-31 23:37  SevenLin  阅读(1218)  评论(0编辑  收藏  举报