1. 程式人生 > >Linux指令碼備份遠端資料庫或者本地資料庫

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

到此全部搞定