shell腳本實(shí)現(xiàn)數(shù)據(jù)庫(kù)表增量同步的流程
需求:
每天定時(shí)將 源數(shù)據(jù)庫(kù) study_plan 庫(kù)的 zxxt_class 表
增量同步到 目標(biāo)數(shù)據(jù)庫(kù) axt_statistics 庫(kù)的 zxxt_class 表中
前提條件:
兩個(gè)庫(kù)中的 zxxt_class 表結(jié)構(gòu)一致
詢問(wèn)開(kāi)發(fā)根據(jù)哪個(gè)字段作為增量參考,這里開(kāi)發(fā)給的是id字段
流程:
獲取 axt_statistics 庫(kù)的 zxxt_class 表中id字段的最大id值
通過(guò)這個(gè)id值備份study_plan 庫(kù)的 zxxt_class 表中大于此id的數(shù)據(jù)
將數(shù)據(jù)導(dǎo)入
腳本:
#!/bin/bash
#通用變量
MySql_Comm='/usr/local/mysql/bin/mysql'
MySqldump_Comm='/usr/local/mysql/bin/mysqldump'
DateTime=`date +%Y-%m-%d-%H:%M:%S`
echo -e "\n\n${DateTime} -----腳本開(kāi)始執(zhí)行-----" >> /tmp/sourcedb.log
#源數(shù)據(jù)庫(kù)信息
Source_MySql_User='root'
Source_MySql_Pass='123456'
Source_MySql_Port='3306'
Source_MySql_DB='study_plan'
Source_MySql_Table='zxxt_class'
Source_Host_IP='192.168.0.100'
#本機(jī)數(shù)據(jù)庫(kù)信息
Mysql_User='root'
MySql_Pass='12345678'
MySql_Port='3306'
MySql_DB='axt_statistics'
MySql_Table='zxxt_class'
MySql_Bak_Dir="/tmp/`date +%Y-%m-%d-%H-%M`"
#創(chuàng)建備份目錄
mkdir ${MySql_Bak_Dir}
#備份本機(jī)表
if [ -d ${MySql_Bak_Dir} ];then
${MySqldump_Comm} \
-u${Mysql_User} \
-p${MySql_Pass} \
-h 127.0.0.1 \
-P${MySql_Port} \
${MySql_DB} ${MySql_Table} > ${MySql_Bak_Dir}/${MySql_DB}-${MySql_Table}.sql
else
echo "${DateTime} ERROR: ${MySql_Bak_Dir} 目錄不存在" >> /tmp/sourcedb.log
echo "${DateTime} -----腳本執(zhí)行完成!??!-----" >> /tmp/sourcedb.log
exit 1
fi
#獲取本機(jī)表最大ID
${MySql_Comm} \
-u${Mysql_User} \
-p${MySql_Pass} \
-h 127.0.0.1 \
-P${MySql_Port} \
--compress ${MySql_DB} -e "select max(id) from ${MySql_Table}" > /tmp/tmp.txt
ID_Num=`tail -1 /tmp/tmp.txt`
echo $ID_Num
#備份源表大于本機(jī)獲取id的數(shù)據(jù)
if [[ ${ID_Num} -gt 0 ]];then
if [ -d ${MySql_Bak_Dir} ];then
echo "${DateTime} 開(kāi)始備份原主機(jī)${Source_MySql_DB} ${Source_MySql_Table} ID大于${ID_Num}的數(shù)據(jù)..." >> /tmp/sourcedb.log
${MySqldump_Comm} -t \
-u${Source_MySql_User} \
-p${Source_MySql_Pass} \
-h${Source_Host_IP} \
-P${Source_MySql_Port} \
--single-transaction --compress ${Source_MySql_DB} ${Source_MySql_Table} --where="id > '`tail -1 /tmp/tmp.txt`'" > ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql
echo "${DateTime} 數(shù)據(jù)備份完成 ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql" >> /tmp/sourcedb.log
#導(dǎo)入數(shù)據(jù)
if [ -f ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql ];then
echo "${DateTime} 開(kāi)始導(dǎo)入數(shù)據(jù)..." >> /tmp/sourcedb.log
${MySql_Comm} \
-u${Mysql_User} \
-p${MySql_Pass} \
-h 127.0.0.1 \
-P${MySql_Port} \
${MySql_DB} -e "source ${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql"
echo "${DateTime} 數(shù)據(jù)導(dǎo)入完成${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql..." >> /tmp/sourcedb.log
echo "${DateTime} -----腳本執(zhí)行完成?。?!-----" >> /tmp/sourcedb.log
else
echo "${DateTime} ERROR: sql文件${MySql_Bak_Dir}/${Source_MySql_DB}-${Source_MySql_Table}.sql不存在!"
echo "${DateTime} -----腳本執(zhí)行完成!?。?----" >> /tmp/sourcedb.log
exit 1
fi
else
echo "${DateTime} ERROR: ${MySql_Bak_Dir} 目錄不存在" >> /tmp/sourcedb.log
echo "${DateTime} -----腳本執(zhí)行完成?。?!-----" >> /tmp/sourcedb.log
exit 1
fi
else
echo "${DateTime} ERROR: ID 等于 NULL" >> /tmp/sourcedb.log
echo "${DateTime} -----腳本執(zhí)行完成?。?!-----" >> /tmp/sourcedb.log
exit 1
fi
注意!腳本中需要注意的是,從源庫(kù)中使用mysqldump時(shí)必須加參數(shù) -t ,-t 表示備份插入數(shù)據(jù),如果不加 -t ,那么導(dǎo)入到目標(biāo)庫(kù)的數(shù)據(jù)將替換源有數(shù)據(jù)。
測(cè)試:

上面兩圖可以看到,源表中比目標(biāo)表多了一個(gè)數(shù)據(jù)
執(zhí)行腳本后
數(shù)據(jù)已同步過(guò)來(lái)
日志:

再看看導(dǎo)入的sql腳本
可
以看到只備份并導(dǎo)入了自己新加的那一條數(shù)據(jù)
到此這篇關(guān)于shell腳本實(shí)現(xiàn)數(shù)據(jù)庫(kù)表增量同步的文章就介紹到這了,更多相關(guān)shell數(shù)據(jù)庫(kù)表增量同步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux bc命令實(shí)現(xiàn)數(shù)學(xué)計(jì)算器
這篇文章主要介紹了Linux bc命令實(shí)現(xiàn)數(shù)學(xué)計(jì)算器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Shell腳本實(shí)現(xiàn)的陽(yáng)歷轉(zhuǎn)農(nóng)歷代碼分享
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)的陽(yáng)歷轉(zhuǎn)農(nóng)歷代碼分享,本文是作者一個(gè)星期的工作成果,得來(lái)不易,需要的朋友可以參考下2014-09-09
linux重啟和關(guān)閉系統(tǒng)命令的寫(xiě)法
這篇文章給大家介紹了linux重啟和關(guān)閉系統(tǒng)命令的寫(xiě)法,然后在文中給大家分享了linux五個(gè)重啟命令,感興趣的朋友一起看看吧2017-10-10
實(shí)現(xiàn)core文件自動(dòng)生成配置文件的方法
這篇文章主要介紹了實(shí)現(xiàn)core文件自動(dòng)生成配置文件的方法,需要的朋友可以參考下2014-07-07
普通用戶啟動(dòng)supervisor報(bào)HTTP錯(cuò)誤(strace)解決分析
這篇文章主要為大家介紹了普通用戶啟動(dòng)supervisor報(bào)HTTP錯(cuò)誤strace的問(wèn)題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

