源碼 mysqlDump.sh
#!/bin/bash
################################################
# TODO: 備份當前服務器上指定的數據庫(多個庫,以 , 分隔)
# 示例:
# ./mysqlDump.sh 備份默認設置的數據庫
# ./mysqlDump.sh db_name1,db_name2,... 備份指定名稱的數據庫
#
# Author: whoru.S.Q <[email protected]>
# Version: 1.0
################################################
# 數據庫連接參數
DB_HOST="127.0.0.1"
DB_USER="root"
DB_PWD=""
DB_PORT="3306"
# 待備份的數據庫名稱,多個庫時以 , 分隔
DB_NAME=
# 備份文件路徑
DUMP_FILE_PATH=/opt/backup
function main {
# 參數檢查
# 如果當前腳本在執行時傳遞了參數,則優先級高於當前腳本文件中變量的默認設置
if [ -n "$1" ]; then
DB_NAME=$1
else
if [ ! "$DB_NAME" ]; then
read -p "請輸入要備份的數據庫名稱:" dbname
DB_NAME=$dbname
fi
fi
# 檢查備份目錄是否存在
if [ ! -d "$DUMP_FILE_PATH" ]; then
mkdir -p $DUMP_FILE_PATH
if [ "$?" -ne "0" ]; then
echo -en "無法創建備份文件目錄:$DUMP_FILE_PATH"
exit 1
fi
fi
# 操作開始
OLD_IFS="$IFS"
IFS=","
arr=($DB_NAME)
IFS="$OLD_IFS"
for db in ${arr[@]}
do
# echo "$db"
doDump $db
done
}
function doDump {
echo -en "\n\033[32m==>\033[0m 開始備份數據庫:$1\n"
dump_date=`date +%Y%m%d%H%M%S`
dump_file=$1"_"$dump_date".sql"
final_dump_file=$dump_file".tar.gz"
# 備份
# 考慮還原數據庫時的通用性,備份的同時不執行壓縮操作
$(which mysqldump) -u$DB_USER -p$DB_PWD -P $DB_PORT $DB_NAME > $dump_file
if [ "$?" -ne "0" ]; then
echo -en "操作失敗"
exit 1
fi
# 壓縮、轉移備份的文件
tar -zcvf $final_dump_file $dump_file
mv $final_dump_file $DUMP_FILE_PATH
rm -rf $dump_file
echo -en "\n\033[32m==>\033[0m 備份完成,生成備份文件:$DUMP_FILE_PATH/$final_dump_file\n"
}
# 運行
main $1
使用說明
-
使用前先設置數據庫連接參數
-
設置待備份的數據庫名稱
- 方式一:在腳本文件裏修改變量 DB_NAME
- 方式二:運行腳本時動態傳參,如
./mysqlDump.sh db_name
注意:腳本運行參數優先級高於腳本文件中的設置;待備份的數據庫名稱支持多個,以
,
分隔。
示例
[root@local wwwroot]# ./mysqlDump.sh online_v3.0
==> 開始備份數據庫:online_v3.0
Warning: Using a password on the command line interface can be insecure.
online_v3.0_20181012164400.sql
==> 備份完成,生成備份文件:/opt/backup/online_v3.0_20181012164400.sql.tar.gz
更新:https://github.com/whorusq/linux-learning/blob/master/shell/mysqlDump.sh