shell脚本实现数据库表增量同步的流程是怎么样的

技术shell脚本实现数据库表增量同步的流程是怎么样的shell脚本实现数据库表增量同步的流程是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需

壳脚本实现数据库表增量同步的流程是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

需求:

每天定时将源数据库学习计划库的zxxt_class表

增量同步到目标数据库axt _统计信息库的zxxt_class表中

前提条件:

两个库中的zxxt_class表结构一致

询问开发根据哪个字段作为增量参考,这里开发给的是编号字段

流程:

获取axt _统计信息库的zxxt_class表中编号字段的最大编号值

通过这个编号值备份学习计划库的zxxt_class表中大于此编号的数据

将数据导入

脚本:

#!/bin/bash

#通用变量

MySQL _ Comm='/usr/local/MySQL/bin/MySQL '

MySQL dump _ Comm='/usr/local/MySQL/bin/MySQL dump '

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/`日期% Y-% m-% d-% H-% m ` '

#创建备份目录

mkdir${MySql_Bak_Dir}

#备份本机表

if[-d $ { MySQL _ Bak _ Dir }];然后

${MySqldump_Comm}\

-u${Mysql_User}\

-p${MySql_Pass}\

-h127.0.0.1\

-P${MySql_Port}\

$ { MySQL _ DB } $ { MySQL _ Table } $ { MySQL _ Bak _ Dir }/$ { MySQL _ DB }-$ { MySQL _ Table } .结构化查询语言

其他

echo ' $ { DateTime } ERROR : $ { MySQL _ Bak _ Dir }目录不存在/tmp/sourcedb.log

echo'${DateTime} -脚本执行完成!- '/tmp/sourcedb.log

exit1

船方不负担装货费用

#获取本机表最大身份

${MySql_Comm}\

-u${Mysql_User}\

-p${MySql_Pass}\

-h127.0.0.1\

-P${MySql_Port}\

-压缩${MySql_DB}-e'selectmax(id)来自${MySql_Table}'/tmp/tmp.txt

ID_Num=`tail-1/tmp/tmp.txt `

回声$ID_Num

#备份源表大于本机获取编号的数据

if[$ { ID _ Num } nbs

p;-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 ,那么导入到目标库的数据将替换源有数据。 

测试:

shell脚本实现数据库表增量同步的流程是怎么样的 shell脚本实现数据库表增量同步的流程是怎么样的

上面两图可以看到,源表中比目标表多了一个数据

执行脚本后

shell脚本实现数据库表增量同步的流程是怎么样的 

数据已同步过来

日志:

shell脚本实现数据库表增量同步的流程是怎么样的

再看看导入的sql脚本

shell脚本实现数据库表增量同步的流程是怎么样的 可以看到只备份并导入了自己新加的那一条数据

关于shell脚本实现数据库表增量同步的流程是怎么样的问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/37090.html

(0)

相关推荐

  • Python环境变量的示例分析

    技术Python环境变量的示例分析这篇文章将为大家详细讲解有关Python环境变量的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python环境变量具有一个强大灵活的工业级的

    攻略 2021年12月1日
  • css3标准是在哪年完成的

    技术css3标准是在哪年完成的本篇内容介绍了“css3标准是在哪年完成的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    攻略 2021年12月11日
  • python web开发基础教程(django)版pdf(django项目开发实战)

    技术Django1.9如何开发web项目这篇文章主要介绍“Django1.9如何开发web项目”,在日常操作中,相信很多人在Django1.9如何开发web项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

    攻略 2021年12月23日
  • 湿毒的症状图片,怎样知道身体湿气排出去了

    技术湿毒的症状图片,怎样知道身体湿气排出去了感谢邀请。一湿难去。当我们身体存心湿气的时候是很难祛除的湿毒的症状图片,因为这个湿气就像油一样,黏性非常大。而且这个湿气可以说是万病之源,它与寒在一起就容易形成寒湿;它与热在一

    生活 2021年10月25日
  • iOS用到的宏有哪些

    技术iOS用到的宏有哪些这篇文章给大家分享的是有关iOS用到的宏有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一些常用的宏判断,遇到了我在更新,一步一步坚持判断系统版本的#define

    攻略 2021年11月23日
  • 一千瓦时等于多少焦耳,瓦和焦耳是什么换算关系

    技术一千瓦时等于多少焦耳,瓦和焦耳是什么换算关系1W=1J/s 1瓦=1焦耳/秒 我再补充一下:这里面,瓦是功率单位,既然是“功率”,有一个“率”字,就可以知道,是单位时间上的意义了一千瓦时等于多少焦耳。比如,速率:m

    生活 2021年10月24日