#!/bin/bash ################################################ # TODO: 備份當前服務器上指定的數據庫(多個庫,以 , 分隔) # 示例: # ./mysqlDump.sh 備份默認設置的數據庫 # ./mysqlDump.sh db_name1,db_name2,... 備份指定名稱的數據庫 # # Author: whoru.S.Q <whoru@sqiang.net> # 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
使用前先設置數據庫鏈接參數mysql
設置待備份的數據庫名稱linux
./mysqlDump.sh db_name
注意:腳本運行參數優先級高於腳本文件中的設置;待備份的數據庫名稱支持多個,以
,
分隔。git
[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.shgithub