全量備份數據庫shell腳本、sftp開啓免密連接、使用sftp上傳至固定服務器

目標: 將 XX.XX.X.165、 XX.XX.X.164 的數據庫全量備份打包,並上傳到 XX.XX.X.44

            想備指定庫的同學可以放開部分註釋掉的變量

 

以 root 用戶登錄 XX.XX.X.165、XX.XX.X.164操作:

  • 使用root權限創建目錄:

mkdir -p /app/backup/

 

  • 拷貝腳本auto_mysql_back.sh到 app 目錄下:

腳本如下:

#!/bin/bash  
#Shell Command For Backup MySQL Database Everyday Automatically By Crontab  
  
# 這部分是備份當天數據的  
USER=root  
PASSWORD="XXXXXXXX"  
#DATABASE="scidc"  
#HOSTNAME="XX.XXX.XXX.XXXX"  
   
   
MYSQLBIN=/app/mysql/bin/
BACKUP_DIR=/app/backup/ #備份文件存儲路徑  
LOGFILE=/app/backup/mysql_back/data_backup.log #日記文件路徑  
DATE=`date '+%Y%m%d-%H%M'` #日期格式(作爲文件名)  
DUMPFILE=$BACKUP_DIR$DATE.sql #備份文件名  
ARCHIVE=$BACKUP_DIR$DATE.sql.tgz #壓縮文件名  
OPTIONS="-u$USER -p$PASSWORD --all-databases"  
#OPTIONS="-h$HOSTNAME -u$USER -p$PASSWORD $DATABASE"  

#mysqldump -help  
   
#判斷備份文件存儲目錄是否存在,否則創建該目錄  
#if [ ! -d $BACKUP_DIR ] ;  
#then  
#        mkdir -p "$BACKUP_DIR"  
#fi  
   
#開始備份之前,將備份信息頭寫入日記文件  
echo " " >> $LOGFILE  
echo " " >> $LOGFILE  
echo "———————————————–" >> $LOGFILE  
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE  
echo "———————————————– " >> $LOGFILE  
    

#使用mysqldump 命令備份制定數據庫,並以格式化的時間戳命名備份文件  
$MYSQLBIN/mysqldump $OPTIONS > $DUMPFILE  
#判斷數據庫備份是否成功  
if [[ $? == 0 ]]; then  
    #創建備份文件的壓縮包  
    tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1  
    #輸入備份成功的消息到日記文件  
    echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE  
    #刪除原始備份文件,只需保 留數據庫備份文件的壓縮包即可  
    rm -f $DUMPFILE  
else  
    echo "Database Backup Fail!" >> $LOGFILE  
fi  
#輸出備份過程結束的提醒消息  
echo "Backup Process Done"  

# 這部分是清除30天前的數據庫備份
DELETEDATE=`date --date='30 day ago' '+%Y%m%d'` #三十天前的日期  

cd $BACKUP_DIR
for i in `ls -1` ;
do 
    if [[ "${i:0:8}" != "data_bac" ]]&&[[ $DELETEDATE > ${i:0:8} ]] ; then  
        rm -rf $BACKUP_DIR$i 
        echo "remove: "$i >> $LOGFILE
    fi 
done 
#清理備份結束
echo "Clean Up Done"


#開始上傳當天壓縮文件到44服務器備份
sftp [email protected] >> $LOGFILE <<EOF     #服務器地址
cd /app/sc_backup164    #服務器上的ftp路徑
lcd /app/backup/mysql_back  #本地的路徑
put $ARCHIVE
bye
EOF
echo "commit to ftp successfully"

 

  • 改變權限:

chown -R mysql:mysql /app/auto_mysql_back.sh

chown -R mysql:mysql /app/backup/

chmod 711 /app/auto_mysql_back.sh

chmod -R 711 /app/backup/

 

 

以 root 用戶登錄 XX.XX.X.44操作:

  • 創建sftp祕鑰文件夾及認證文件

mkdir  /home/mysql/.ssh

chown mysql:mysql  /home/mysql/.ssh

chmod 700 /home/mysql/.ssh

 

cat >> /home/mysql/.ssh/authorized_keys

chown mysql:mysql  /home/mysql/.ssh/authorized_keys

chmod 644 /home/mysql/.ssh/authorized_keys

 

 

  • sftp免密設置:

使用 mysql 用戶登錄165、164並執行以下操作:

1)執行: ssh-keygen 默認路徑生成即可

生成mysql用戶非對稱祕鑰:

目錄:/app/mysql/.ssh

公鑰:id_rsa.pub

私鑰:id_rsa

 

2)從服務器複製公鑰到客戶端

複製165的公共密碼

scp  /home/mysql/.ssh/id_rsa.pub [email protected]:/home/mysql/.ssh/ id_rsa165.pub

複製164的公共密碼

scp  /home/mysql/.ssh/id_rsa.pub [email protected]:/home/mysql/.ssh/ id_rsa164.pub

 

 

 使用 mysql 用戶登錄XX.XX.X.XX到/home/mysql/.ssh並執行以下操作:

3)將公鑰追加到認證中

cat id_rsa165.pub >> authorized_keys

cat id_rsa164.pub >> authorized_keys

 

 

 

  • crontab 定時任務設置:

使用 mysql 用戶登錄165、164並執行以下操作:

 

crontab –e

 

在文件中添加:

0 0,12 * * *  /bin/sh /app/auto_mysql_back.sh

 

想了解更多知識的同學可以參考這些資料:

http://note.youdao.com/noteshare?id=023a0156e033b03475e904799c96b965

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章