• 数据库单表增量备份方案


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

  • 相关阅读:
    20169215 缓冲区溢出漏洞实验
    20169215 2016-2017-2 实验二Nmap的使用与分析
    20169215 2016-2017-2 《网络攻防实践》/《网络攻击与防范》第八周学习总结
    Numpy Usage Introduction
    [Example of Sklearn]
    [Example of Sklearn]
    [Example of Sklearn]
    [Scikit-Learn]
    [Scikit-Learn]
    [Scikit-Learn]
  • 原文地址:https://www.cnblogs.com/sevenlin/p/sevenlin_database20150721.html
Copyright © 2020-2023  润新知