首頁論壇分類作業系統Linux【Linux】實用 MySQL/MariaDB 自動備份 - 期間
【Linux】實用 MySQL/MariaDB 自動備份 - 期間
   編 輯        刪 除      # 5c8224a79b5ff 發表: Odyssey     新增:2018-11-26 09:48:27     更新:2018-12-20 11:30:06

此腳本原始出處來自「網頁搜尋」
所以出處已不可考
而且也已有所增修

#!/bin/bash

# MySQL自動備份 ( 2018 / 12 / 25 )
# 註:目錄路徑必須包含最後面的 /
# ------------------------------------------------------------------------------------------
# 變數設置區
# ------------------------------------------------------------------------------------------
# 備份所有資料庫 On / Off (預設為 Off)
DBAllDataBase='Off'
# 備份所有資料庫時的主要檔名
DBAllDataBaseName='fullDB'
# ------------------------------------------------------------------------------------------
# 資料庫使用者
DBUser=''
# 資料庫名稱
DBName=''
# 資料庫使用者密碼
DBPasswd=''
# 備份目錄
BackupPath='/home/'
# 備份記錄檔
LogFile='/home/mysql_autobackup.log'
# 連線校正 utf8 / latin1 (預設為utf8)
BackupCharacterSet='utf8'
# ------------------------------------------------------------------------------------------
# 定義檔案名稱
# ------------------------------------------------------------------------------------------
# 是否備份所有資料庫
if [ $DBAllDataBase = 'Off' ] ; then
	# 備份檔名 (資料庫名稱_年-月-日.7z,例:dbname_2018-12-25.7z)
	DumpFile="$BackupPath$DBName"_$(date +%Y-%m-%d).sql
	# 最後輸出的壓縮檔名(含路徑)
	NewFile="$BackupPath$DBName"_$(date +%Y-%m-%d).7z
	# 檔案名稱日期為八天前的,視為舊檔案(必須超過一星期)
	OldFile="$BackupPath$DBName"_$(date +%Y-%m-%d --date='8 days ago').7z
else
	# 備份檔名 (主要檔名_年-月-日.7z,例:fullDB_2018-12-25.7z)
	DumpFile="$BackupPath$DBAllDataBaseName"_$(date +%Y-%m-%d).sql
	# 最後輸出的壓縮檔名(含路徑)
	NewFile="$BackupPath$DBAllDataBaseName"_$(date +%Y-%m-%d).7z
	# 檔案名稱日期為八天前的,視為舊檔案(必須超過一星期)
	OldFile="$BackupPath$DBAllDataBaseName"_$(date +%Y-%m-%d --date='8 days ago').7z
fi
# ------------------------------------------------------------------------------------------
# 腳本語法區
# ------------------------------------------------------------------------------------------
echo "-------------------------------------------" >> $LogFile
# 寫入現在時間(年-月-日 時:分:秒)
echo $(date +"%Y-%m-%d %H:%M:%S") >> $LogFile

# 檢查基本變數是否已設定完成
if [ -z $DBUser ] || [ -z $DBName ] || [ -z $DBPasswd ] || [ -z $BackupPath ] || [ -z $LogFile ] ; then
	# 基本變數尚未設定完成
	echo '錯誤!基本設定尚未完成!' >> $LogFile
else
	# 檢查今日備份檔是否存在
	if [ -f $NewFile ] ; then
		echo "錯誤![$NewFile]備份檔已存在,無法備份!" >> $LogFile
	else
		# 是否備份所有資料庫
		if [ $DBAllDataBase = 'On' ] ; then
			# 安全備份所有資料庫
			/usr/local/mysql/bin/mysqldump -u $DBUser -p$DBPasswd --all-databases --lock-all-tables --default-character-set=$BackupCharacterSet --complete-insert > $DumpFile
		else
			# 安全備份指定資料庫
			/usr/local/mysql/bin/mysqldump -u $DBUser -p$DBPasswd --lock-all-tables --default-character-set=$BackupCharacterSet --complete-insert $DBName > $DumpFile
		fi
		# 將備份檔案進行壓縮
		/usr/local/bin/7za a $NewFile $DumpFile >> $LogFile 2>&1
		echo "[$NewFile] 備份檔壓縮完成!" >> $LogFile
		# 刪除壓縮前的備份檔
		rm -rf $DumpFile
		echo "[$DumpFile] 來源檔刪除完成!" >> $LogFile
		# 檢查八天前的檔案是否存在,若存在,刪除它。不管存在與否,皆儲存結果至備份記錄檔
		if [ -f $OldFile ] ; then
		   rm -f $OldFile >> $LogFile 2>&1
		   echo "[$OldFile] 舊備份檔刪除完成!" >> $LogFile
		else
		   echo "[$OldFile] 查無此舊備份檔案!" >> $LogFile
		fi
	fi
fi
# 執行完畢
echo "-------------------------------------------" >> $LogFile

夢幻奧德修斯 - OdysseusDream
Website:https://www.odysseusdream.com/
Discord:https://discord.gg/ht4mwMG
FB社團:https://www.facebook.com/groups/OdysseusDream/

我要回覆
首頁論壇分類作業系統Linux【Linux】實用 MySQL/MariaDB 自動備份 - 期間