在Ubuntu下透過cron執行SQL完整備份

這篇文章紀錄如何在Linux Ubuntu上使用SQL Server的sqlcmd工具,透過cron排程來執行完整備份。如果還沒有安裝過sqlcmd工具的可以在相關連結找到安裝方法。

切換到最高權限

切換到root身分,之後指令不再贅述

sudo -i

安裝cron排程工具

cron是Linux系統中用來定期執行任務的工具,通常預設已經安裝在Ubuntu上,但如果沒有的話可以透過下列指令安裝:

apt update
apt install cron -y

安裝後可以透過下列指令來檢查cron的狀態:

systemctl status cron

如果有出現綠色的active (running),就表示cron已經啟動了。

編輯bash排程檔案

我的目標是要先把YourSqlCatalogName這個資料庫桶子備份到/var/opt/mssql/backup這個資料夾中,然後再把這個備份檔案移動到/shared這個資料夾中以利後續的處理。如果你有其他的需求可以自行更換指令,指令碼其實不複雜,以下是的bash指令碼:

#!/bin/bash

# sql parameter
DB_NAME="YourSqlCatalogName"
SQL_USER="YourUserName"
SQL_PASS="YourSqlPassword"

# backup file path
BACKUP_DIR="/var/opt/mssql/backup"
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.bak"
SHARED_DIR="/shared"
SHARED_BACKUP_FILE="${SHARED_DIR}/${DB_NAME}.bak"

# get current timestamp in yyyy-MM-dd HH:mm:ss format
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")

# make sure folders exist
mkdir -p "$BACKUP_DIR"
mkdir -p "$SHARED_DIR"

# backup SQL catalog
if /opt/mssql-tools18/bin/sqlcmd -C -S localhost -U "$SQL_USER" -P "$SQL_PASS" -Q "BACKUP DATABASE [$DB_NAME] TO DISK = N'$BACKUP_FILE' WITH INIT, FORMAT, COMPRESSION;"; then
  echo "[$TIMESTAMP] Database backup successful. Backup file is located at [$BACKUP_FILE]."
  mv -f "$BACKUP_FILE" "$SHARED_BACKUP_FILE"
  echo "[$TIMESTAMP] Successfully moved backup file to [$SHARED_BACKUP_FILE]."
else
  echo "[$TIMESTAMP] ERROR: Database backup failed for database [$DB_NAME]."
fi

這個指令碼我將會儲存並放在/usr/local/sbin/backupDB.sh,下列是注意事項:

  1. 如果這個檔案是在Windows下編輯,那麼請務必取消UTF-8 BOM,否則會導致bash無法執行。
  2. 移動到這個目錄後,請務必給予執行權限:chmod +x /usr/local/sbin/backupDB.sh
  3. 確定檔案權限給root:chown root:root /usr/local/sbin/backup_media.sh
  4. 完成後可以測試跑看看是否有達成自動備份的需求。

編輯cron排程

接著我們可以透過cron來編輯排程,這邊我將會設定每天的凌晨7點執行這個備份指令碼,請輸入crontab -e,在檔案最末段插入下列指令:

0 7 * * * /usr/local/sbin/backupDB.sh >> /shared/backupDB_log.txt 2>&1

這個指令的意思是每天的7點整執行/usr/local/sbin/backupDB.sh,並將執行過程log檔案寫入到/shared/backupDB_log.txt中。

完成後可以透過下列指令來檢查排程是否成功加入:

crontab -l

相關連結

Linux Ubuntu MicrosoftSqlServer MsSqlServer MsSqlTools MsSqlTools18 SqlCmd Backup FullBackup Cron Schedule