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=123456timeout %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數據結束" &注意要加括號聲明要同步的字段。
總結
以上是生活随笔為你收集整理的Windows上通过bat实现不同数据库之间同步部分表的部分字段数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7中设置.sh开机自启动(以
- 下一篇: Windows上使用bat实现备份一个月