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(..
相关推荐
数据库砖家8 分钟前
YashanDB 知识库|轻松打通多库数据,YashanDB DBLink 使用指南!
数据库
二进制_博客9 分钟前
高德MCP制作旅游攻略
数据库·旅游
数据库砖家10 分钟前
YashanDB 知识库|如何用闪回功能救回误删的数据?全流程实战演示
数据库
数据库砖家13 分钟前
YashanDB 知识库|手把手教你回收表空间,释放磁盘的正确姿势!
数据库
一只栖枝19 分钟前
关于OCP认证:有Oracle和MySQL两种
数据库·mysql·oracle·开闭原则·数据管理·ocp认证
小Tomkk32 分钟前
StarRocks SRCA 考试心得总结
数据库·数据库 starrocks·srca
千千寰宇41 分钟前
[数据库/SQL] 浅谈DDL、DSL、DCL、DML、DQL
数据库
爱编程的小新☆1 小时前
【MySQL】数据类型和表的操作
java·数据库·mysql
小妖6662 小时前
用 Nodemon 解决 npm run serve 频繁重启服务
前端·npm·node.js
Ten peaches2 小时前
苍穹外卖(缓存商品、购物车)
spring boot·redis·mysql·缓存