使用Shell腳本批量對MySQL數據庫進行備份庫操作

shell代碼如下:


  以下的代碼與使用Shell對MySQL指定的庫進行SQL語句批量插入操作 原理流程一致,唯一不同點爲循環庫後一個爲插入操作,一個爲備份操作。 本章備份工具使用:mysqldump,以下shell腳本已在生產,測試環境中穩定運行!

#!/bin/bash
# this is a yankerp

host_url=數據庫的鏈接地址
db_name='數據庫用戶名'
db_password='數據庫密碼'
check_mysql_status=`netstat -anplt | grep mysqld | wc -l`
check_nc_status=`rpm -qa | grep nmap-ncat | wc -l`


# 測試是否能夠與服務器主機通信
function db_ping(){
    echo "正在檢測與數據庫主機連接通信是否正常....."
    ping -w 1 $host_url &> /dev/null
    if [ $? -eq 0 ]
        then
            echo "服務器:$host_url主機可正常連接....."
        else
            echo "ERROR:服務器:$host_url主機連接失敗....."
            return 1
    fi
}

function check_mysql(){
    echo "---------------------------------------"
    echo "正在檢測本地MySQL數據庫是否正常運行....."
    if [ $check_mysql_status -eq 0 ]
        then
            echo "ERROR:本地MySQL數據庫非正常運行,正在啓動本地MySQL數據庫"
            systemctl restart mysqld
            if [ $? -eq 0 ] || [ $check_mysql_status -eq 1 ]
                then
                    echo "MySQL數據庫啓動成功,目前正常運行....."
                else
                    echo "ERROR:MySQL啓動失敗,請及時檢測MySQL目前的狀態!!!"
                    return 1
            fi
        else
            echo "本地MySQL數據庫正常啓動中....."   
    fi
}

function check_telnet(){
    if [ $check_nc_status -eq 0 ]
        then
            yum clean all && yum install nmap-ncat -y &> /dev/null &
            if [ $? -eq 0 ]
                then
                    echo "nc命令安裝成功!!!"
                else
                    echo "ERROR:安裝nc包失敗,請您檢查您服務器是否能夠正常上網以及配置yum源!!!"
                    exit 1
            fi
        else
            echo "開始檢測$host_url數據庫3306端口是否開放...."
            sleep 2
            check=`nc -v -z -w 5 $host_url 3306; echo $?` 
            # echo $host_url
            if [ $check -eq 0 ]
                then
                    echo "遠程服務器數據庫可正常連接!!!"
                else
                    echo "ERROR:請您檢查遠程服務器的MySQL3306端口是否正常開放!!!"
                    return 1
            fi
    fi
}

function back_mysql(){
    select_db='show databases;'
        /usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} -e"${select_db}" > /root/all_database.txt && {
            cat /root/all_database.txt | grep "需要備份數據的前綴" > /root/all_gs1.txt
        }
        content=`cat /root/all_gs1.txt`
        # 開始備份
        day_date=`date +"%Y-%m-%d"`
        for gs1 in $content
        do
            echo "正在備份$gs1庫,請稍後。。。。。。。"
            sleep 2
            /usr/local/mysql/bin/mysqldump --no-defaults -u${db_name} -h${host_url} -p${db_password} --set-gtid-purged=off --opt -R $gs1 > /opt/sql_data/sql_back_data/需要備份數據的前綴/$gs1.sql
            echo "$gs1庫已經備份到/opt/sql_data/sql_back_data/$gs1.sql"
            # echo "===================================================================================================================="
        done
        mkdir /opt/sql_data/sql_back_data/需要備份數據的前綴$day_date_backup
        cd /opt/sql_data/sql_back_data/ && {
            tar -czfP 需要備份數據的前綴$day_date.tar.gz /opt/sql_data/sql_back_data/需要備份數據的前綴/備份數據的前綴*
        }
}       

function main(){
    db_ping
    check_mysql
    check_telnet
    back_mysql
}

main

定時備份,自動創建請自行操作吧。 過程可參考:使用Shell對MySQL指定的庫進行SQL語句批量插入操作本章內容。希望對您有所幫助,再見~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章