zoukankan      html  css  js  c++  java
  • Windows上通过bat实现不同数据库之间同步部分表的部分字段数据

    场景

    A系统的数据库中的部分表中的部分数据需要提供给B系统。

    首先利用Mysqldump将A系统中的部分表导出为文件,然后建立中间数据库

    将导出的数据文件还原到中间数据库,然后再B系统中选择中间数据库的部分

    字段进行同步。

    为什么不用mysqldump导出的文件直接还原到B系统。

    因为文件中会将表先进行删除,再创建表结构,再插入数据。

    那么B系统中会高频读取数据库中数据,如果在数据同步的过程中,就会找不到表。

    怎样从中间数据库同步到B系统的数据库。

    首先根据相同表的唯一标识(一般是id),将不存在的数据删除,然后使用Replace进行替换更新需要的字段。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    bat命令如下:

    @echo off 
    title "sys_data_task"
    REM 声明采用UTF-8编码
    chcp 65001
    
    ::定时执行的时间间隔(秒)
    set INTERVAL=30
    
    ::mysql.exe所在的路径
    set mysql_home="C:Program FilesMySQLMySQL Server 5.6inmysql"
    
    ::源数据库地址
    set origin_host=127.0.0.1
    ::源数据库用户名
    set origin_user=root
    ::源数据库密码
    set origin_pass=123456
    ::临时库和目标库地址
    set target_host=127.0.0.1
    ::临时库和目标库用户名
    set target_user=root
    ::临时库和目标库密码
    set target_pass=123456
    
    timeout %INTERVAL%
    
    :Again 
    
    echo "备份源数据库到sql文件开始" &
    echo %date% %time:~0,8% &
    "C:Program FilesMySQLMySQL Server 5.6inmysqldump" -h%origin_host% -u%origin_user% -p%origin_pass% uwb t_base_station t_locaker_card t_employee t_work_type > "D:\uwb.sql" &
    echo "备份数据库到sql文件结束" &
    echo %date% %time:~0,8% &
    
    ping 127.0.0.1 -n 3 &
    
    echo "还原sql文件到临时数据库开始" &
    echo %date% %time:~0,8% &
    
    %mysql_home% -h%target_host% -u%target_user% -p%target_pass% uwb_tmp< D:\uwb.sql &
    
    echo "还原sql文件到临时数据库结束" &
    
    ping 127.0.0.1 -n 2 &
    
    echo "同步t_base_station数据开始" &
    
    echo "删除目标数据库中t_base_station表不存在的数据" &
    %mysql_home% -h%target_host% -u%target_user% -p%target_pass% -e "DELETE FROM uwb_loc.t_base_station WHERE station_id  NOT IN ( SELECT station_id FROM uwb_tmp.t_base_station)" &
    echo "插入或更新目标数据库中t_base_station更改的数据" &
    %mysql_home%  -h%target_host% -u%target_user% -p%target_pass% -e "REPLACE INTO uwb_loc.t_base_station SELECT * FROM uwb_tmp.t_base_station" &
    
    echo "同步t_base_station数据结束" &
    
    timeout %INTERVAL%
    
    goto Again 

    注意:

    1、中间数据库要和目标数据库在一个服务器上,并且执行脚本前,需要先建立好中间数据库以及相关表,使其与目标数据库一致。

    2、注意这里的编码设置的为UTF-8,即65001,在执行cmd时如果提示:

    The system cannot write to the specified device

    则在cmd中输入:chcp

    查看cmd当前的编码 是否一致,不一致则修改为一致即可。

    3、时间间隔、mysql和mysqldump所在路径、源数据库和目标数据库的地址和用户名和密码 已经加注释,

    mysqldump 后面紧跟数据库名uwb以及后面的表名t_base_station,多个表用空格分开。

    4、然后根据每个表对应的情况,编写同步命令,首先根据唯一键,这里是id,将目标表中不存在的删除,然后将部分字段

    进行replace,这里是select *,如果是部分字段可以这样

    echo "同步t_work_type数据开始" &
    
    echo "删除目标数据库中t_work_type表不存在的数据" &
    %mysql_home%  -h%target_host% -u%target_user% -p%target_pass% -e "DELETE FROM uwb_loc.t_work_type WHERE work_type_id  NOT IN ( SELECT work_type_id FROM uwb_tmp.t_work_type)" &
    echo "插入或更新目标数据库中t_work_type更改的数据" &
    %mysql_home%  -h%target_host% -u%target_user% -p%target_pass% -e "REPLACE INTO uwb_loc.t_work_type(work_type_id,work_type_name) SELECT work_type_id,work_type_name FROM uwb_tmp.t_work_type" &
    
    echo "同步t_work_type数据结束" &

    注意要加括号声明要同步的字段。

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    推荐系统(9)—— 推荐系统重排序-注意力模型小结
    代码题(66)— 二叉树的所有路径、最长同值路径
    推荐系统(8)—— 多目标优化应用总结_1
    推荐系统(7)—— CTR 预估算法综述
    推荐系统(6)—— 特征组合作用
    推荐系统(5)—— 推荐系统多目标优化(ESMM、MMOE、CGC、PLE)
    代码题(65)— 在排序数组中查找元素的第一个和最后一个位置、长度最小的子数组
    机器学习(三十三)— 机器学习中如何利用id类特征
    navicate怎么快速写数据库设计文档
    SpringBoot:整合log4j2
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/15142826.html
Copyright © 2011-2022 走看看