数据库单表增量备份方案

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

时间: 2025-01-31 14:41:39

数据库单表增量备份方案的相关文章

在线热备份数据库之innobackupex 增量备份InnoDB

在线热备份数据库之innobackupex 增量备份InnoDB 什么是增量备份?其原理是什么? 增量备份是基于上一次备份后对新增加的内容进行备份,优点相较于完整备份而言备份内容少时间短,能够节省磁盘空间.但相较于完整备份而言可靠性有所降低,不能缺失基于完整备份的增量备份区间备份包,建议完整备份区间时间不可大于一周,通常情况下如果数据库非常庞大个人建议三天到七天完整备份一次,期间每天进行增量备份.如果数据库小那么每天进行完整备份才是最安全的选择. 增量备份原理是什么?他是如何记录上次备份的位置?

mysql数据库单表只有一个主键自增id字段,ibatis实现id自增

mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id values(null)        <selectKey resultClass="int">SELECT @@IDENTITY As id</selectKey>    </insert>

使用mysqldump进行全量+增量备份方案操作记录

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是MySQL打开binlog日志功能,在my.cnf中加入log-bin=/opt/Data/MySQL-bin"log-bin="后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘

xtrabackup备份工具两种命令单库增量备份还原

Innobackupex 参数解释: --defaults-file=[MY.CNF]该选项传递给xtrabackup子进程,从指定文件读取缺省选项 --apply-log 从备份恢复. --redo-only 该选项强制跳过rollback阶段,只进行redo.这是有必要使用的,如果备份后,要使用增量改变的. --copy-back 从备份目录拷贝数据和索引文件到datadir目录 --remote-host=HOSTNAME备份到远程主机上,使用ssh --stream=[tar|cpio(

Hibernate学习笔记(一)--&gt;数据库单表操作

Hibernate框架是一个全ORM映射框架,是一个非常流行的数据库操作框架之一,现在比较流行的还有MyBatis半ORM映射框架 在MyEclipse IDE开发工具中,可以很轻松的搭建Hibernate框架. 一.搭建一个项目 1.首先在MyEclipse中搭建一个web项目. 2.选中项目右键-->myeclipse-->Project Facets-->找到hibernate.这样就为项目添加了hibernate支持 3.打开hibernate.cfg.xml配置文件,在可视化编

MySQL数据库及表的备份与还原

备份 导出数据库所有表结构 mysqldump -uroot -ppassword -d dbname > db.sql 导出数据库某个表结构 mysqldump -uroot -ppassword -d dbname tablename > db.sql 导出数据库所有表结构及数据 mysqldump -uroot -ppassword dbname > db.sql 导出数据库某个表结构及数据 mysqldump -uroot -ppassword dbname tablename

xtrabackup2.4 备份Precona5.6数据库,做增量备份与还原

1.Full backuop,一定要先做:     innobackupex --defaults-file=/etc/my.cnf --user=root --password=evlink /home/mysql/backup/2.Incremental backup,可以每隔一小时或者三小时做一次:    innobackupex --defaults-file=/etc/my.cnf --user=root --password=evlink --incremental /home/my

Mysql数据库单表查询

1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法 select * from,这个select * 指的是要查询所有字段的数据. SELECT distinct 字段1,字段2... FROM 库名.表名 #from后面是说从库的某个表中去找数据,mysql会去找到这个库对应的文件夹下去找到你表名对应的那个数据文件,找不到就直接报错了,找到了就继续后面的操作 WHERE 条件 #从表中

数据库 -- 单表的数据查询

单表查询的语法及关键字执行的优先级 单表查询语法 select distinct 字段一,字段二,... from 表名 where 条件 group by field having 筛选 order by field limit 限制条数  关键字执行的优先级 1. 找到表: from 2. 拿着where指定的约束条件,去文件 / 表中取出一条条记录 3. 将取出的一条条记录进行分组group by , 如果没有group by ,则整体作为一组 4. 执行select  (distinct