场景
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数据结束" &
注意要加括号声明要同步的字段。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136215.html