Backup
將 Mariadb 數據庫的 crontab 備份作業從一台遠端伺服器設置到另一台遠端伺服器
我正在使用 SSH 遠端連接到 Ubuntu 伺服器,其中有 x 個 MariaDB 數據庫。現在我想設置一個 crontab 作業來自動為所有這些創建備份到另一台伺服器,該伺服器儲存來自不同伺服器的備份。我怎樣才能做到這一點?
你的任務不適合一個命令。
你需要一個 bash 腳本。如果您的備份伺服器有 FTP,那麼這是一個很好的腳本。如果伺服器上沒有安裝 FTP,並且您不想啟動它,那麼您可以使用 .ssh 通過 ssh 傳輸文件
rsync
。要
rsync
在腳本中使用,您需要通過 ssh 密鑰訪問 ssh。如果這個沒有配置,那麼做起來很簡單:首先,生成密鑰:
ssh-keygen
該實用程序將要求您輸入文件名和密碼(可選)。要保留預設值,只需按 Enter。
然後,將公鑰傳輸到備份伺服器:
ssh-copy-id <my-remoute-user>@<my-remoute-host>
請注意,如果出現問題,您需要收到通知。最簡單的方法是接收電子郵件。你可以通過 postfix mailutils 包來實現。要安裝 tit,請執行:
sudo apt-get install postfix mailutils
好吧,腳本本身。作為基礎,我採用了上面推薦的腳本,添加了通過
rsync
.在腳本的開頭,指定設置:
set -x # MySQL user user=ivan # MySQL password password=my-secret-password # Local backup storage directory local_backupfolder=mysql/backups # Notification email address recipient_email=my-email@gmail.com # Number of days to store the backup keep_day=30 # remote backup storage remoute_backupfolder=backup-admin@my-backup-server.com:/home/backup-admin/ sqlfile=$local_backupfolder/all-database-$(date +%d-%m-%Y_%H-%M-%S).sql #create backup folder mkdir -p $local_backupfolder mysqldump -u $user -p$password --all-databases > $sqlfile; # Create a backup if gzip $sqlfile; then echo 'Backup compressed' else echo 'gzip return non-zero code' | mailx -s 'No backup was created!' $recipient_email exit fi # Delete old backups find $local_backupfolder -mtime +$keep_day -delete # Local and remote storage sync if rsync -avh --delete $local_backupfolder $remoute_backupfolder ; then echo 'Backup sended' else echo 'rsync return non-zero code' | mailx -s 'No backup was sended!' $recipient_email exit fi echo $sqlfile.gz | mailx -s 'Backup was successfully created' $recipient_email
這個“備份腳本”一次備份伺服器上的所有數據庫。如果您只需要備份特定的數據庫,請使用 –database 參數代替 –all-database 參數來指定要備份的數據庫的名稱。