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}.sql else echo "${DateTime} ERROR: ${MySql_Bak_Dir} 目录不存在" >> /tmp/sourcedb.log echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log exit 1 fi #获取本机表最大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 fi else echo "${DateTime} ERROR: ID 等于 NULL" >> /tmp/sourcedb.log echo "${DateTime} -----脚本执行完成!!!-----" >> /tmp/sourcedb.log exit 1 fi
注意!脚本中需要注意的是,从源库中使用mysqldump时必须加参数 -t ,-t 表示备份插入数据,如果不加 -t ,那么导入到目标库的数据将替换源有数据。
测试:
上面两图可以看到,源表中比目标表多了一个数据
执行脚本后
数据已同步过来
日志:
再看看导入的sql脚本
可
以看到只备份并导入了自己新加的那一条数据
到此这篇关于shell脚本实现数据库表增量同步的文章就介绍到这了,更多相关shell数据库表增量同步内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/weixin_38367535/article/details/120845
相关文章
- webshell对于我们站长来讲肯定听到比较多了,我们网站可能经常被人使用期webshell方式注入一些东西了,下面一起来看一个php webshell下直接反弹shell的例子,具体如下。...2016-11-25
- 本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。...2020-06-30
- 这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒、若干分钟、若干小时,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了c# 线程同步的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-08-29
- 1. MySQL数据库主从同步延迟原理。要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日...2013-10-04
- 这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了shell脚本实战-while循环语句,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-09
- 这篇文章主要介绍了Shell字符串比较相等、不相等方法小结,本文直接给出代码,但代码中含有大量注释,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了自动设置安卓手机wifi代理的PowerShell脚本,帮助大家进行抓包测试,感兴趣的朋友可以了解下...2020-10-17
- 这篇文章主要介绍了shell中的for循环用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-11
PowerShell中使用Get-Date获取日期时间并格式化输出的例子
这篇文章主要介绍了PowerShell中使用Get-Date获取日期时间并格式化输出的例子,本文讲解了直接调用Get-Date、在Write-Host中使用Get-Date、格式化输出的方法,需要的朋友可以参考下...2020-06-30PowerShell读取文件内容、替换文件内容、读取限定行的例子
这篇文章主要介绍了PowerShell读取文件内容、替换文件内容、读取限定行的例子,本文使用3个例子来说明实现这3个需求的操作技巧,需要的朋友可以参考下...2020-06-30- 周一今天给大家分享shell脚本多实例部署nginx的详细教程,文章通过实例代码脚本给大家详细介绍,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-10-26
- 这篇文章主要介绍了Linux Shell脚本中获取本机ip地址方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-20
- 这篇文章主要介绍了C#同步网络时间的方法,以实例形式较为详细的分析了C#获取网络时间与同步本机系统时间的相关技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Shell脚本8种字符串截取方法总结,每个方法给出了实例代码和操作结果,一目了然,需要的朋友可以参考下...2020-07-11
- 本文章介绍两个实例来介绍mysql同步状态检测实现程序有需要的朋友可参考一下。 代码如下 复制代码 #!/bin/sh #check MySQL_Slave St...2016-11-25
- 这篇文章主要介绍了mac使用Shell(终端)SSH连接远程服务器的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-11
- 这篇文章主要介绍了Shell逐行读取文件的4种方法,本文介绍了while循环法、重定向法、管道法、文件描述符法等一些方法,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了批量复制及执行命令shell脚本,本文通过列举几个示例给大家详细介绍,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11