Linux指令碼備份遠端資料庫或者本地資料庫
此類文章網上太多,指令碼也都是大神寫的,我只是借用。主要是把一些坑填起來個大家分享下,減少琢磨的時間。
1.vi /usr/local/script/BackupDatabase 第一步執行命令建立備份指令碼,注意點: mkdir /usr/local/script/ 先自行建立資料夾,他不會自己遞迴建立資料夾的。
2.編輯指令碼檔案
#!/bin/bash #Shell Command For Backup MySQL Database Everyday Automatically By Crontab #time 2018-09-15 #name huxianglin
HOST=127.0.0.1
USER=root
PASSWORD=14\!\[email protected]#2
DATABASE1=test
BACKUP_DIR=/data/backup/database/ #備份資料庫檔案的路徑
LOGFILE=/data/backup/database/data_backup.log #備份資料庫指令碼的日誌檔案
DATE=`date +%Y%m%d-%H%M -d -3minute` #獲取當前系統時間-3分鐘
DUMPFILE1=$DATE-test.sql #需要備份的資料庫名稱
ARCHIVE1=$DUMPFILE1-tar.gz #備份的資料庫壓縮後的名稱
if [ ! -d $BACKUP_DIR ]; #判斷備份路徑是否存在,若不存在則建立該路徑
then
mkdir -p "$BACKUP_DIR"
fi
echo -e "\n" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
echo "BACKUP DATE:$DATE">> $LOGFILE
echo "------------------------------------" >> $LOGFILE
cd $BACKUP_DIR #跳到備份路徑下
/usr/bin/mysqldump -h$HOST -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1 #使用mysqldump備份資料庫
if [[ $? == 0 ]]; then
tar czvf $ARCHIVE1 $DUMPFILE1 >> $LOGFILE 2>&1 #判斷是否備份成功,若備份成功,則壓縮備份資料庫,否則將錯誤日誌寫入日誌檔案中去。
echo "$ARCHIVE1 BACKUP SUCCESSFUL!" >> $LOGFILE
rm -f $DUMPFILE1
else
echo “$ARCHIVE1 Backup Fail!” >> $LOGFILE
fi
注意點:HOST 為資料庫遠端地址,首先得有遠端訪問許可權。如果備份是本機資料庫
命令 /usr/bin/mysqldump -h$HOST -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1
改寫/usr/bin/mysqldump -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1
注意點: /usr/bin/mysqldump 為mysqldump命令所在路徑,可以先find / -namemysqldump 查找出來位置
注意點:如果你報了mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect 那麼檢查下密碼,自己寫錯了不是我要說的,我要說的是像有!這樣的字元需要轉義 \!
3.編寫自動刪除備份指令碼,為了防止檔案一直生成佔用硬碟空間,不影響備份流程,可以不寫。
vi /usr/local/script/CleanDatabase
#!/bin/bash #time 2015-05-21 #name huxianglin
BACKUPDIR="/data/backup/database/" #定義備份檔案路徑 KEEPTIME=7 #定義需要刪除的檔案距離當前的天數 DELFILE=`find $BACKUPDIR -type f -mtime +$KEEPTIME -exec ls {} \;` #找到天數大於7天的檔案 for delfile in ${DELFILE} #迴圈刪除滿足天數大於七天的檔案 do rm -f $delfile done
這個自己根據需要寫多少天過期就好了
4.當然不可能自己手動執行這些指令碼,寫入系統定時任務裡面去
vi /etc/crontab
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/
# For details see man 4 crontabs
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 00 * * * * root /usr/local/script/BackupDatabase #定義每天沒小時執行備份資料庫指令碼 02 00 * * 0 root /usr/local/script/CleanDatabase #定義每週日凌晨0點02分執行刪除資料庫備份檔案
5.第五步也是最關鍵一步。請給備份指令碼可執行許可權
chmod +x /usr/local/script/BackupDatabase
chmod +x /usr/local/script/CleanDatabase
當然成功後附上一條檢視本目錄下檔案以及大小命令 ls -lht
到此全部搞定