shell脚本实现数据库表增量同步的流程是怎么样的
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,shell脚本实现数据库表增量同步的流程是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需求:每天定时将 源数据库 stud
千家信息网最后更新 2025年01月21日shell脚本实现数据库表增量同步的流程是怎么样的
shell脚本实现数据库表增量同步的流程是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
需求:
每天定时将 源数据库 study_plan 库的 zxxt_class 表
增量同步到 目标数据库 axt_statistics 库的 zxxt_class 表中
前提条件:
两个库中的 zxxt_class 表结构一致
询问开发根据哪个字段作为增量参考,这里开发给的是id字段
流程:
获取 axt_statistics 库的 zxxt_class 表中id字段的最大id值
通过这个id值备份study_plan 库的 zxxt_class 表中大于此id的数据
将数据导入
脚本:
#!/bin/bash #通用变量MySql_Comm='/usr/local/mysql/bin/mysql'MySqldump_Comm='/usr/local/mysql/bin/mysqldump'DateTime=`date +%Y-%m-%d-%H:%M:%S` echo -e "\n\n${DateTime} -----脚本开始执行-----" >> /tmp/sourcedb.log #源数据库信息Source_MySql_User='root'Source_MySql_Pass='123456'Source_MySql_Port='3306'Source_MySql_DB='study_plan'Source_MySql_Table='zxxt_class'Source_Host_IP='192.168.0.100' #本机数据库信息Mysql_User='root'MySql_Pass='12345678'MySql_Port='3306'MySql_DB='axt_statistics'MySql_Table='zxxt_class'MySql_Bak_Dir="/tmp/`date +%Y-%m-%d-%H-%M`" #创建备份目录mkdir ${MySql_Bak_Dir} #备份本机表if [ -d ${MySql_Bak_Dir} ];then ${MySqldump_Comm} \ -u${Mysql_User} \ -p${MySql_Pass} \ -h 127.0.0.1 \ -P${MySql_Port} \ ${MySql_DB} ${MySql_Table} > ${MySql_Bak_Dir}/${MySql_DB}-${MySql_Table}.sqlelse echo "${DateTime} ERROR: ${MySql_Bak_Dir} 目录不存在" >> /tmp/sourcedb.log echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log exit 1fi #获取本机表最大ID${MySql_Comm} \-u${Mysql_User} \-p${MySql_Pass} \-h 127.0.0.1 \-P${MySql_Port} \--compress ${MySql_DB} -e "select max(id) from ${MySql_Table}" > /tmp/tmp.txt ID_Num=`tail -1 /tmp/tmp.txt`echo $ID_Num #备份源表大于本机获取id的数据if [[ ${ID_Num} -gt 0 ]];then if [ -d ${MySql_Bak_Dir} ];then echo "${DateTime} 开始备份原主机${Source_MySql_DB} ${Source_MySql_Table} ID大于${ID_Num}的数据..." >> /tmp/sourcedb.log ${MySqldump_Comm} -t \ -u${Source_MySql_User} \ -p${Source_MySql_Pass} \ -h${Source_Host_IP} \ -P${Source_MySql_Port} \ --single-transaction --compress ${Source_MySql_DB} ${Source_MySql_Table} --where="id > '`tail -1 /tmp/tmp.txt`'" > ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql echo "${DateTime} 数据备份完成 ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql" >> /tmp/sourcedb.log #导入数据 if [ -f ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql ];then echo "${DateTime} 开始导入数据..." >> /tmp/sourcedb.log ${MySql_Comm} \ -u${Mysql_User} \ -p${MySql_Pass} \ -h 127.0.0.1 \ -P${MySql_Port} \ ${MySql_DB} -e "source ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql" echo "${DateTime} 数据导入完成${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql..." >> /tmp/sourcedb.log echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log else echo "${DateTime} ERROR: sql文件${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql不存在!" echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log exit 1 fi else echo "${DateTime} ERROR: ${MySql_Bak_Dir} 目录不存在" >> /tmp/sourcedb.log echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log exit 1 fielse echo "${DateTime} ERROR: ID 等于 NULL" >> /tmp/sourcedb.log echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log exit 1fi
注意!脚本中需要注意的是,从源库中使用mysqldump时必须加参数 -t ,-t 表示备份插入数据,如果不加 -t ,那么导入到目标库的数据将替换源有数据。
测试:
上面两图可以看到,源表中比目标表多了一个数据
执行脚本后
数据已同步过来
日志:
再看看导入的sql脚本
可以看到只备份并导入了自己新加的那一条数据
关于shell脚本实现数据库表增量同步的流程是怎么样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
数据
脚本
备份
数据库
增量
同步
本机
流程
字段
目录
目标
问题
最大
信息
更多
帮助
开发
解答
易行
一致
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关系数据库一对多查询运算问题
软件开发项目过程记录册
网络安全应具有什么特征
高科技与互联网
注册云服务器实名认证需要什么
计算机网络技术发源于
乐清网络技术有限公司
发达国家第一个对网络安全
网络安全什么部门负责
淘宝软件开发什么类目
网络安全法转载
大连网络技术公司电话
登陆ftp服务器什么意思
安装数据库时的服务账户怎么设置
南京升望网络技术怎么样
天津智德合盛网络技术
最简便的数据库
MYSQL数据库技术学校
数据库的学习多久能熟练掌握
计算机网络技术系统说明书
创造与魔法怎么维修服务器
远程指导软件开发价格走势
为什么开数据显示未开服务器
H3C服务器来电开机
黑境外服务器
江津区常规软件开发服务代理商
广西网络安全法第四十四条案例
安装数据库时的服务账户怎么设置
估值系统是软件开发吗
控制式软件开发