伺服器定時自動備份MySQL資料庫

2021-06-13 03:28:13 字數 3259 閱讀 8024

本文記錄了伺服器資料庫備份、壓縮、加密、傳送記錄郵件的一套流程。

需求:伺服器的資料庫自動在增長,但是難保某個時候發生意外導致資料庫崩潰。所以需要做定時備份。

使用要點:利用mysql中提供的mysqldump功能匯出資料庫,利用gzip進行壓縮,利用gpg進行對稱加密,最後使用php指令碼傳送記錄郵件。

用於php編譯,傳送記錄郵件

php**如下:

<?php

require_once("phpmailer/class.phpmailer.php");

$file = system("/backup/autobackup >> /backup/log");

$mail = new phpmailer();

$mail->issmtp();

$mail->host = "smtp.163.com";

$mail->smtpauth = true;

$mail->username = "這裡填上傳送郵箱使用者名稱";

$mail->password = "這裡填上傳送郵箱密碼";

$mail->from = '填發件人@163.com';

$mail->fromname = '填自己的名字';

$mail->charset = 'utf-8';

$mail->encoding = "base64";

$mail->addaddress("test","test");

$mail->addreplyto('test',"test");

$mail->wordwrap = 50;

//$mail->addattachment($file); //這裡可以新增上備份檔案,但是為了安全不建議這麼做。

$mail->ishtml(false);

$date = date("y-m-d", time());

$mail->subject = "backup-db".$date;

$mail->body = 'db-backup-'.$date.'content-is-'.$file;

$mail->altbody ='text/html';

$mail->send();

?>

用於備份-壓縮-加密

**如下:

filename=`date +%y%m%d`

echo "****************************************===="

date

/opt/mysql/bin/mysqldump 資料庫名 -u賬戶名 -p密碼 | gzip > /var/www/html/mysql\_backup/$filename.gz

cd /var/www/html/mysql\_backup/

encryptpasswd="加密密碼"

echo $ | gpg --yes -c --passphrase-fd 0 $filename.gz > /var/www/html/mysql\_backup/$filename.gz.gpg

rm $filename.gz

find /var/www/html/mysql\_backup/ -mtime +20 -name "*.gz.gpg" -exec rm -rf {} \;

echo /var/www/html/mysql\_backup/$filename.gz.gpg

date

注意此處-u  -p後面沒有空格。

此處兩個date輸出兩次時間以便記錄所耗費時間。

加密完以後會刪除原有gz壓縮檔案。

find -exec命令用於刪除20天前的備份檔案,及時清空檔案防止伺服器硬碟耗費過大。

最後輸出備份檔案所在位址。

可以將檔案備份於ftp目錄,使得遠端異地備份得以實現。參見我另一篇文章:

《遠端備份伺服器自動獲取備份via ftp》

在redhat下面,輸入

crontab -u root -e

利用crontab實現定時,這行命令用vi開啟cron的配置檔案,修改後會自動重新整理,也可以執行

/etc/rc.d/init.d/crond restart

進行重啟。

配置檔案修改方法如下:

crontab -l -u [-e|-l|-r] 第乙個命令列中,file是命令檔案的名字。如果在命令列中指定了這個檔案,那麼執行crontab命令,則將這個檔案拷貝到crontabs目錄下;如果在命令列中沒有制定這個檔案,crontab命令將接受標準輸入(鍵盤)上鍵入的命令,並將他們也存放在crontab目錄下。 

命令列中-r選項的作用是從/usr/spool/cron/crontabs目錄下刪除使用者定義的檔案crontab;

命令列中-l選項的作用是顯示使用者crontab檔案的內容。

使用命令crontab -u user -e命令編輯使用者user的cron(c)作業。使用者通過編輯檔案來增加或修改任何作業請求。

執行命令crontab -u user -r即可刪除當前使用者的所有的cron作業。

作業與它們預定的時間儲存在檔案/usr/spool/cron/crontabs/username裡。username使使用者名稱,在相應的檔案中存放著該使用者所要執行的命令。命令執行的結果,無論是標準輸出還是錯誤輸出,都將以郵件形式發給使用者。檔案裡的每乙個請求必須包含以spaces和tabs分割的六個域。前五個字段可以取整數值,指定何時開始工作,第六個域是字串,稱為命令字段,其中包括了crontab排程執行的命令。

第一道第五個欄位的整數取值範圍及意義是:

0~59 表示分

1~23 表示小時

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

/usr/lib/cron/cron.allow表示誰能使用crontab命令。如果它是乙個空檔案表明沒有乙個使用者能安排作業。如果這個檔案不存在,而有另外乙個檔案/usr/lib/cron/cron.deny,則只有不包括在這個檔案中的使用者才可以使用crontab命令。如果它是乙個空檔案表明任何使用者都可安排作業。兩個檔案同時存在時cron.allow優先,如果都不存在,只有超級使用者可以安排作業。

伺服器定時備份測試

看到一篇文章 雙伺服器或多伺服器夜間自動備份問題的解決方案 感覺思路不錯,自己測試了下 出現錯誤 0x80041315,任務計畫程式服務沒有執行 解決方法 0x80041315,任務計畫程式服務沒有執行主要原因是你的任務計畫服務被禁用,在計算機管理裡面找到服務,在服務裡面找到task schedul...

mysql定時自動備份

假想環境 mysql 安裝位置 c mysql 論壇資料庫名稱為 bbs mysql root 密碼 123456 資料庫備份目的地 d db backup 程式 echo off c mysql bin mysqladmin u root password 123456 shutdown c my...

mysql 自動定時備份

說明 以下是資料庫自動備份指令碼,可以儲存成.bat的方式,然後用計畫任務去定時執行。echo 資料庫開始備份!echo off 定義磁碟 set disk d 定義單位名稱 set unit jd scjdj 定義壓縮檔案路徑 set rar c program files winrar 定義存放...