在 Debian 上备份 Microsoft SQL Server,常见做法是使用 SQL Server 自带的工具 或 SQL 语句 进行备份,而不是单纯依赖系统级备份。下面是最常用、最可靠的方法。
sqlcmd 备份(官方推荐)sqlcmd -?
如果没有,先安装:
sudo apt update
sudo apt install mssql-tools unixodbc-dev
添加到环境变量(可选):
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
sqlcmd -S localhost -U SA -Q \
"BACKUP DATABASE [YourDB]
TO DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH COMPRESSION, INIT"
✅
/var/opt/mssql/backup/必须是 mssql 用户有权限的目录
创建备份目录:
sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup
sqlcmd -S localhost -U SA -Q \
"SELECT name FROM sys.databases WHERE name NOT IN ('master','tempdb','model','msdb')" \
-h -1 -W | while read db
do
sqlcmd -S localhost -U SA -Q \
"BACKUP DATABASE [$db] TO DISK = '/var/opt/mssql/backup/${db}_$(date +%F).bak' WITH COMPRESSION"
done
cron 定时备份(推荐生产环境)sudo crontab -e
每天凌晨 2 点备份:
0 2 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "BACKUP DATABASE [YourDB] TO DISK = '/var/opt/mssql/backup/YourDB_$(date +\%F).bak' WITH COMPRESSION"
不推荐用于大型数据库,但可用于迁移。
sqlcmd -S localhost -U SA -d YourDB -E -o backup.sql
或使用 bcp 导出表:
bcp YourDB.dbo.YourTable out data.csv -S localhost -U SA -c
⚠️ 不建议单独使用
sudo systemctl stop mssql-server
sudo tar czf mssql-data.tar.gz /var/opt/mssql
sudo systemctl start mssql-server
✅ 只能作为 容灾补充,不是 SQL Server 推荐方式。
| 类型 | 建议 |
|---|---|
| 全量 | 每天 |
| 差异 | 每小时 |
| 日志 | 每 15 分钟(完整恢复模式) |
| 备份保留 | 7~30 天 |
| 备份验证 | RESTORE VERIFYONLY |
sqlcmd -S localhost -U SA -Q \
"RESTORE DATABASE [YourDB]
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH REPLACE"
如果你愿意,可以告诉我:
我可以帮你设计一套 完整备份 + 自动清理 + 异地同步 的方案。