温馨提示×

Debian怎么备SQLServer

小樊
32
2026-07-15 03:31:25
栏目: 云计算

Debian 上备份 SQL Server,常见做法取决于你使用的是 SQL Server on Linux 还是 通过 Docker / 远程连接。下面按最常用场景给你一套完整方案。


一、确认环境

先确认 SQL Server 是否在 Debian 上运行:

systemctl status mssql-server

或查看端口:

ss -lntp | grep 1433

二、使用 sqlcmd 备份(官方推荐)

1️⃣ 安装 sqlcmd

如果还没安装:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /usr/share/keyrings/microsoft.gpg

echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \
> /etc/apt/sources.list.d/mssql-release.list

apt update
ACCEPT_EULA=Y apt install -y mssql-tools unixodbc-dev

加入 PATH:

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

2️⃣ 使用 T-SQL 备份数据库

备份单个数据库

sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [数据库名] TO DISK = '/var/opt/mssql/backup/db.bak'"

✅ 注意:

  • /var/opt/mssql/backup/ 必须存在
  • SQL Server 需要对该目录有写权限

创建目录:

mkdir -p /var/opt/mssql/backup
chown mssql:mssql /var/opt/mssql/backup

3️⃣ 自动生成带日期的备份(推荐)

DATE=$(date +%F)
sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [TestDB] TO DISK = '/var/opt/mssql/backup/TestDB_$DATE.bak'"

三、备份所有数据库(脚本)

#!/bin/bash
USER="sa"
PASS="密码"
BACKUP_DIR="/var/opt/mssql/backup"
DATE=$(date +%F)

mkdir -p $BACKUP_DIR

DBS=$(sqlcmd -S localhost -U $USER -P $PASS -h -1 -W \
-Q "SELECT name FROM sys.databases WHERE name NOT IN ('master','model','msdb','tempdb')")

for db in $DBS; do
  sqlcmd -S localhost -U $USER -P $PASS \
  -Q "BACKUP DATABASE [$db] TO DISK = '$BACKUP_DIR/${db}_$DATE.bak'"
done

四、使用 Docker 运行的 SQL Server

如果 SQL Server 在 Docker 中:

docker exec sqlserver \
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [DB] TO DISK = '/var/opt/mssql/backup/db.bak'"

并挂载备份目录:

-v /backup:/var/opt/mssql/backup

五、定时自动备份(crontab)

crontab -e

每天凌晨 2 点:

0 2 * * * /root/sqlserver_backup.sh

六、备份文件管理(防止磁盘爆满)

保留 7 天:

find /var/opt/mssql/backup -name "*.bak" -mtime +7 -delete

七、常见错误排查

❌ 权限不足

Operating system error 5 (Access is denied.)

✅ 解决:

chown mssql:mssql /var/opt/mssql/backup

❌ 目录不存在

Cannot open backup device

✅ 解决:

mkdir -p /var/opt/mssql/backup

八、总结(推荐方案)

生产环境推荐

  • sqlcmd + BACKUP DATABASE
  • 定时任务
  • 本地 + 异地备份

最小可用

sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [DB] TO DISK = '/var/opt/mssql/backup/db.bak'"

如果你愿意,我可以帮你:

  • ✅ 写 完整备份脚本
  • ✅ 配置 自动清理 + 异地同步
  • ✅ 区分 全量 / 差异 / 日志备份
  • ✅ 做成 systemd timer

直接告诉我你的 SQL Server 是 本机 / Docker / 远程 即可。

0