# 授予 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