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(..
相关推荐
一线大码25 分钟前
SpringBoot 和 MySQL 的事务隔离级别关系
spring boot·后端·mysql
新知图书30 分钟前
扣子数据库实战案例:搭建AI登记助手
数据库·智能体·扣子
在未来等你1 小时前
SQL进阶之旅 Day 28:跨库操作与ETL技术
sql·mysql·postgresql·etl·cross-database·data-integration·database-optimization
麦兜*1 小时前
【Mysql及各种关系型数据库全面对比与深度解析(2025版)】
数据库·sql·mysql·postgresql·oracle·sqlserver·mariadb
懒羊羊大王呀1 小时前
Ubuntu20.04中MySQL的安装和配置
linux·mysql·ubuntu
扶光与望舒呀1 小时前
mysql 的卸载- Windows 版
数据库·mysql
星垣矩阵架构师1 小时前
架构设计之存储高性能——非关系型数据库(NoSQL)
数据库·架构·nosql
明月看潮生2 小时前
青少年编程与数学 01-011 系统软件简介 16 Redis数据库
数据库·redis·青少年编程·编程与数学
明月看潮生2 小时前
青少年编程与数学 01-011 系统软件简介 15 MongoDB数据库
数据库·mongodb·青少年编程·编程与数学
飞翔的佩奇2 小时前
Java项目:基于SSM框架实现的劳务外包管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·mysql·spring·毕业设计·ssm·毕业论文·劳务外包