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 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

则在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数据结束" &

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

猜你喜欢

转载自blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119710632