目標: 將 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