Backup

將 Mariadb 數據庫的 crontab 備份作業從一台遠端伺服器設置到另一台遠端伺服器

  • June 15, 2021

我正在使用 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 參數來指定要備份的數據庫的名稱。

引用自:https://dba.stackexchange.com/questions/294073