linux sqlserver定时备份

41 阅读1分钟
# 授予 mssql 用户对备份目录的所有权
sudo chown -R mssql:mssql /var/opt

# 设置适当的权限(确保读写执行权限)
sudo chmod -R 755 /var/opt
执行sh脚本 /var/opt/mysql_backup.sh >> /var/opt/backup_log.txt 2>&1

sh脚本

#!/bin/bash
# SQL Server 数据库备份脚本(修正版)
DB_USER="sa"
DB_PASSWORD="123qwe..."
DB_NAME="DXFB_GZ"
BACKUP_DIR="/var/opt"

# 检查 sqlcmd 是否存在
if ! command -v sqlcmd &> /dev/null; then
    echo "错误:未找到 sqlcmd 工具,请先安装 SQL Server 客户端。"
    exit 1
fi

# 创建备份目录
mkdir -p "$BACKUP_DIR" || { echo "错误:无法创建备份目录 $BACKUP_DIR"; exit 1; }

# 生成备份文件名
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$DB_NAME-$TIMESTAMP.bak"
FULL_PATH="$BACKUP_DIR/$BACKUP_FILE"

# 执行 SQL Server 备份(注意:SQL Server 备份不需要通过 gzip 管道)
echo "开始备份数据库 $DB_NAME..."
sqlcmd -S localhost -U "$DB_USER" -P "$DB_PASSWORD" -Q \
"BACKUP DATABASE [$DB_NAME] TO DISK = N'$FULL_PATH' WITH NOFORMAT, NOINIT, NAME = N'$DB_NAME-$TIMESTAMP', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

# 检查备份是否成功
if [ $? -eq 0 ] && [ -f "$FULL_PATH" ] && [ -s "$FULL_PATH" ]; then
    BACKUP_SIZE=$(du -h "$FULL_PATH" | awk '{print $1}')
    echo "备份成功:$FULL_PATH (大小: $BACKUP_SIZE)"
else
    echo "备份失败!"
    rm -f "$FULL_PATH"
    exit 1
fi