Windows上通过bat实现不同数据库之间同步部分表的部分字段数据

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Windows上通过bat实现不同数据库之间同步部分表的部分字段数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

场景

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 Files\MySQL\MySQL Server 5.6\bin\mysql"

::源数据库地址
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 Files\MySQL\MySQL Server 5.6\bin\mysqldump" -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

Windows上通过bat实现不同数据库之间同步部分表的部分字段数据

 

则在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.bmabk.com/index.php/post/136215.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!