node.js中实现MySQL的增量备份

有时候,我们需要对生产库进行备份,不要求实时性很高,大概每天一次就行,为性能考虑,只备份最新更改内容,即增量备份即可,这种场景下对DB的设计和备份语句有所要求。

首先要求按源表各字段定义目标表。

源表要有主键,没有主键的要增加一个自增ID来充当主键。

目标表跟源表一样定义主键,如果源表有自增字段,目标表取消该字段自增属性。

我们不仅要考虑新增记录,还要考虑记录的修改。要在源表中包含数据新增或者修改的时间属性字段。这样可以筛选出需要增量备份的记录。

可以采用insert into on duplicate key update方式来执行添加或修改。

示例代码如下:

javascript 复制代码
const getdata = 'select * from demotable where createtime> ? or modifytime> ?';
const incbackupcmd = 'insert into demotable(...) values ? on duplicate key update modifytime=values(modifytime),modifycontent=values(modifycontent)';

function pexecsql(mysqlconn,sqlcmd,args) {
	return new Promise((resolve, reject) => {
		mysqlconn.query(sqlcmd,args,(err,results)=> { 
			if (err) { errlog(jstrerr(err)); reject(err); }
			else { resolve({"rows":results}); }
			}); 
		});
	}
pexecsql(srcpool,getdata,[syncdb.lastsynctime,syncdb.lastsynctime]).then(res=>{
	if (res.rows.length>0) {
		let dataset=res.rows.map(item=>Object.values(item)); 
		pexecsql(destpool,incbackupcmd,[dataset]).then(..
相关推荐
7***99871 小时前
GaussDB数据库中SQL诊断解析之配置SQL限流
数据库·sql·gaussdb
Wang's Blog3 小时前
MongoDB小课堂: 文档操作核心技术指南:主键机制、CRUD操作与最佳实践
数据库·mongodb
i***t9193 小时前
Linux下MySQL的简单使用
linux·mysql·adb
g***26793 小时前
最新SQL Server 2022保姆级安装教程【附安装包】
数据库·性能优化
q***71854 小时前
windows下安装并使用node.js
windows·node.js
风123456789~4 小时前
【OceanBase专栏】OB背景知识
数据库·笔记·oceanbase
4***72134 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
c***42104 小时前
Django视图与URLs路由详解
数据库·django·sqlite
数据库学啊4 小时前
团队小希望运维简单,时序数据库选型有什么推荐?
运维·数据库·时序数据库
2***65635 小时前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite