线上mysql数据库备份
admin
2023-05-28 07:21:50
0

#!/bin/bash
#=============================================================================
# FileName: MySQLBackup.sh
# Desc: MySQL Databases backup tool.
# Author: chenzm
# Email:969113439@qq.com
# 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"
                                                                                           

相关内容

热门资讯

赖清德“5·20”讲话包装“台... 针对台湾地区领导人赖清德“5·20”发表的就职两周年讲话,台湾劳动党主席吴荣元接受港媒“中评社”访问...
广东两地:全市停工停课 5月21日凌晨1时37分,广东江门开平发布停工停课通知。全市各单位和广大市民群众:根据气象和水文部门...
警惕盲盒卡牌“概率陷阱”,中消... 【大河财立方消息】中国消费者协会今天(21日)发布“六一”消费提示:一、警惕盲盒卡牌“概率陷阱”,防...
马斯克离全球首位万亿美元富翁又... 财联社5月21日讯(编辑 潇湘)在SpaceX周三递交的备受瞩目的IPO申报文件中,有诸多值得关注的...
全链条培育科技型企业,河南擘画... 【大河财立方 记者 张克瑶】河南科技型企业再获全生命周期全链条支持。近日,河南省科技厅会同省委金融办...
俄罗斯总统普京访华期间两国元首... 新华社北京5月20日电俄罗斯总统普京访华期间两国元首会晤成果文件清单一、请两国元首签署并发表的文件《...
免费抽蒜薹 这账怎么“蒜” 打捆出售的蒜薹。孟亚威 摄5月5日,在河南省开封市鼓楼区仙人庄街道杨岗村,农民在田间收获大蒜。新华社...
几首词勾勒出千年宋韵,一部剧道... 杨洋饰演的展昭 图片来源:电视剧《雨霖铃》官方微博大宋御河景区呈现古之汴河风貌 图片来源:汴河游船公...
IPO“静默期”遭自媒体精准围... 近日,最高人民检察院披露了一起财经自媒体假借“舆论监督”之名,精准围猎拟上市企业的敲诈勒索案。据了解...
风声|AI狂奔全民分钱,有可能... 作者丨刘正Simon Kucher 战略咨询顾问从某种意义上说,韩国,这个“东亚怪物房吊车尾,内卷文...