shell根據SQL語句實現資料檔案離線異地備份

2021-09-20 10:09:52 字數 2852 閱讀 8541

1.需求

2.操作環境

centos linux release 7.5.1804 (core)

mysql server version: 5.7.21

3.前置環境準備

4.shell指令碼檔案

#!/bin/sh

#資料庫資訊

dbusername=backup

dbpasswd=123456

db=sms

dbport=3306

#遠端伺服器資訊

remoteip=116.114.18.147

remoteport=2233

remoteuser=backup

remotepath=/backup

#昨天時間

yesterday=$(date +%f -d '-1day')

year=$(date +%y -d '-1day')

month=$(date +%m -d '-1day')

#臨時檔案存放目錄

dirtemp=/home/backup/scripts/db_sms/temp

#日誌檔案目錄

dirlog=/home/backup/scripts/db_sms/logs

#資料存放目錄

dirdata=/backup/sms_mt

#表名檔案

tablesfile=$dirtemp/tables.txt

#每天生成乙個日誌檔案

logfile=$dirlog/info_`date +%y%m%d`.log

echo "`date +%y-%m-%d-%h:%m:%s` show tables start" >>$logfile

#查詢資料庫所有表名

/usr/local/mysql/bin/mysql -u$dbusername -p$dbpasswd -e "

use $db;

show tables;

" >$tablesfile

#將查詢的表名寫入日誌檔案,做記錄

cat $tablesfile >> $logfile

echo "`date +%y-%m-%d-%h:%m:%s` show tables finish" >>$logfile

#判斷表檔案是否存在

if [ ! -f $tablesfile ];

then

echo "`date +%y-%m-%d-%h:%m:%s` tables file not exists" >>$logfile

exit 1

fi#匯出資料離線文字

function exportsms()

#存放資料目錄

dirdatatbale=$dirdata/$provincecode/$year/$month

#判斷資料目錄是否存在

if [ ! -d $dirdatatbale ];then

mkdir -p $dirdatatbale

fi#資料檔案名稱

datafile=$provincecode-$yesterday

#執行sql語句

/usr/local/mysql/bin/mysql -u$dbusername -p$dbpasswd -e "

use $db;

select * from $1 where create_time >= '$yesterday 00:00:00' and create_time <='$yesterday 23:59:59';

">/$dirdatatbale/$datafile.txt

#進入檔案目錄,壓縮檔案

cd $dirdatatbale &&

#壓縮檔案

tar zcf $datafile.tar.gz $datafile.txt &&

#刪除txt檔案

rm -f $datafile.txt

echo "`date +%y-%m-%d-%h:%m:%s` export data:$1 end" >>$logfile

}#讀取表檔案,依次處理

cat $tablesfile | while read line

do #判斷表名是否以sms_mt結尾

if [[ $line == *_sms_mt ]];

then

exportsms $line

fidone

#推送資料給遠端伺服器端

echo "`date +%y-%m-%d-%h:%m:%s` push data start" >>$logfile

scp -p$remoteport -r -p $dirdata $remoteuser@$remoteip:$remotepath &&

rm -rf $dirdata/*

echo "`date +%y-%m-%d-%h:%m:%s` push data end" >>$logfile

#刪除7天後日誌

find $dirlog/ -type f -mtime +7 -name "*.log" |xargs rm -f

#複製日誌檔案

cp -r $logfile $logfile.mail &&

#將執行日誌郵件傳送給管理員

mail -s "sms db auto back `date +%y-%m-%d`" [email protected] < $logfile.mail &&

rm -f $logfile.mail

SQL語句實現水仙花數求取

水仙花數 所謂 水仙花數 是指乙個三位數,其各位數字立方和等於該數本身。例如 370是乙個 水仙花數 因為 370 3 的三次方 7的三次方 0 的三次方 本文用兩種方法解決水仙花數的求取 第一種使用一層while迴圈,從100 1000遍歷,取出其個位 十位 百位的數字,進行三次方計算後相加再與原...

shell 根據變數加減 進行迴圈語句操作

1 while語句 while condition do 迴圈體donecondition 迴圈控制條件 進入迴圈之前,先做一次判 斷 每一次迴圈之後會再次做判斷 條件為 true 則執行 一次迴圈 直到條件測試狀態為 false 終止迴圈 因此 condtion一般應該有迴圈控制變數 而此變數的值...

sql語句實現分頁

sql語句實現分頁 sqlstr select top 10 from shebei where id not in select top cint pagenum 1 10 id from shebei order by id desc order by id desc 計算總頁數 dimstr ...