shell脚本实现数据库表增量同步的流程是怎么样的
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,shell脚本实现数据库表增量同步的流程是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需求:每天定时将 源数据库 stud
千家信息网最后更新 2024年09月22日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安全错误
数据库的锁怎样保障安全
江苏机电计算机网络技术推广设备
数据库用到什么程度算好
海淀区质量软件开发供应
安徽网络技术学校
抢小米 服务器
软件开发有难度吗
网络安全专业本科分数线
网络安全 评估 规定
海南亿成网络技术有限公司电话
做软件开发成本怎么算
apex服务器不一样能一起玩吗
双流区公兴镇农民网络技术学校
服务器有网络安全模式吗
战地5为什么连接不了服务器
arcgist数据库连接
腾讯网络技术首席顾问
科唯网络技术有限公司
网络安全信息的手抄报八开纸
计算机网络安全特征有
服务器电源管理系统
视频 数据库
中医方剂数据库
陈酿数据库是谁 老蛮
社会信用信息基础数据库
计算机等级网络技术考试复习题
类似于知网的国内数据库
网络安全防御模型
邮件服务器配置要求
网络安全技术 有前景吗
网络安全进校园200字