#!/bin/bash
#=============================================================================
# FileName: MySQLBackup.sh
# Desc: MySQL Databases backup tool.
# Author: chenzm
# Email:[email protected]
# HomePage: http://chenzm0592.blog.51cto.com/
# Version: 0.0.1
# LastChange: 2013-11-15 09:16:39
# History:
#=============================================================================
cd /opt/MySQLBackup
. /etc/profile
USERNAME='root'
PASSWORD='password'
U_ID=0
G_ID=
# 設置mysqldump參數
MYSQLDUMP="mysqldump --opt --default-character-set=utf8 --skip-lock-tables -C"
# 設置壓縮參數 從stdin讀取
COMPRESS="gzip -9"
# 設置壓縮文件的後綴名, 請與壓縮參數相對應
COMPRESS_EXT="gz"
DATE=$(date +%Y-%m-%d)
mkdir -p logs/
# 定義日誌輸入
function log() {
#echo -ne ${1}
echo -ne ${1} >>logs/backup-${DATE}.log
}
# 計算字符時,分, 秒
function charDate() {
DATE=$1
if [ ${DATE} -lt 60 ]; then
echo "${DATE}秒"
elif [ ${DATE} -ge 60 ] && [ ${DATE} -lt 3600 ]; then
echo "$((DATE/60))分$((DATE%60))秒"
else
M=$((DATE%3600))
echo "$((DATE/3600))小時$((M/60))分$((M%60))秒"
fi
}
TIME_HOST_START=$(date +%s)
retry=0
while :
do
data=$(mysql -u${USERNAME} -p${PASSWORD} -h IP -e 'SHOW DATABASES' 2>&1)
if [ $? == 0 ]; then
break
elif [ ${retry} -ge 5 ]; then
log "連接到數據庫失敗...退出.\n"
exit 1
fi
((retry++))
done
DBS=$(echo
${data} | awk 'BEGIN{split("test|information_schema",arr,"|"); for (i
in arr) b[arr[i]]} END{for(i=2;i<=NF;i++) if($i in b==0) print $i}')
DB_TOTAL=$(echo ${DBS} | awk '{print NF}')
log "總計數據庫數量: ${DB_TOTAL}\n"
log "正在備份,請稍後....\n"
mkdir -p /databak/IP/db/${DATE}
for DB in ${DBS}
do
TIME_DB_START=$(date +%s)
log "正在導出: ${DB}..."
${MYSQLDUMP} -u${USERNAME} -p${PASSWORD} -h IP ${DB}
2>>logs/error.log | ${COMPRESS} >
/databak/IP/db/${DATE}/${DB}.sql.${COMPRESS_EXT}
# 使用$PIPESTATUS獲取管道之前的exit status
if [ ${PIPESTATUS[0]} != 0 ]; then
log "失敗"
else
((OK++))
log "成功"
fi
TIME_DB_END=$(date +%s)
ELAPSED=$((TIME_DB_END - TIME_DB_START))
log " - 耗時: $(charDate ${ELAPSED})\n"
done
#chown -R ${U_ID}:${G_ID} /db/ip/${DATE}
TIME_HOST_END=$(date +%s)
ELAPSED=$((TIME_HOST_END - TIME_HOST_START))
log "總計: ${DB_TOTAL} 成功: ${OK} 失敗: $((DB_TOTAL-OK)) - 耗時: $(charDate ${ELAPSED})\n"
log "$(printf '%30s\n' | tr ' ' -) $(date "+%Y-%m-%d %H:%M:%S") $(printf '%30s\n' | tr ' ' -)\n"
線上mysql數據庫備份
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Linux 開機(腳本)啓動順序
Uchen
2019-02-24 13:53:20
Linux基本操作命令
wbzjacky
2019-02-24 13:12:38
tar Command Daily Work Summary
海膽階段
2019-02-24 12:58:10
SSH and SCP Daily Work Summary
海膽階段
2019-02-24 12:58:10
Linux積累-安裝與配置Hadoop
lftong
2019-02-23 14:00:30
centos ***
samplelife
2019-02-23 13:57:36
新手學習Linux系統的一點見解
jackieban
2019-02-23 13:57:24
CentOS 6.4下PXE+Kickstart無人值守安裝操作系統
paul8339
2019-02-23 13:56:09
Linux學習之旅 - 第一天
lichen_zt
2019-02-23 13:55:58
Linux I/O重定向以及正則表達式
zhongqijian916
2019-02-23 13:54:50
Linux---facl以及終端
zhongqijian916
2019-02-23 13:54:50
Linux---YUM
zhongqijian916
2019-02-23 13:54:50
Linux---LVM硬盤管理以及LVM的擴展
zhongqijian916
2019-02-23 13:54:50
Linux---LVM補充
zhongqijian916
2019-02-23 13:54:50
Linux---make
zhongqijian916
2019-02-23 13:54:50