在 Debian 上备份 SQL Server,常见做法取决于你使用的是 SQL Server on Linux 还是 通过 Docker / 远程连接。下面按最常用场景给你一套完整方案。
先确认 SQL Server 是否在 Debian 上运行:
systemctl status mssql-server
或查看端口:
ss -lntp | grep 1433
sqlcmd 备份(官方推荐)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
sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [数据库名] TO DISK = '/var/opt/mssql/backup/db.bak'"
✅ 注意:
/var/opt/mssql/backup/ 必须存在创建目录:
mkdir -p /var/opt/mssql/backup
chown mssql:mssql /var/opt/mssql/backup
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
如果 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 -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'"
如果你愿意,我可以帮你:
直接告诉我你的 SQL Server 是 本机 / Docker / 远程 即可。