在 Debian 上备份 SQL Server(Microsoft SQL Server on Linux) 数据库,常见、推荐的做法是使用微软官方提供的命令行工具 sqlcmd 或 bcp,也可以通过 T-SQL 备份命令 生成 .bak 文件。
下面按最常用、最稳妥的方式讲。
systemctl status mssql-server
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 -P '你的密码'
BACKUP DATABASE [数据库名]
TO DISK = '/var/opt/mssql/backup/数据库名.bak'
WITH COMPRESSION, INIT;
GO
示例:
BACKUP DATABASE [testdb]
TO DISK = '/var/opt/mssql/backup/testdb.bak'
WITH COMPRESSION, INIT;
GO
⚠️ 注意:
/var/opt/mssql/backup/目录必须存在,且 mssql 用户有写权限- 备份文件是 .bak,只能用 SQL Server 恢复
sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [testdb] TO DISK='/var/opt/mssql/backup/testdb.bak' WITH COMPRESSION"
nano /opt/backup_mssql.sh
内容:
#!/bin/bash
DATE=$(date +%Y%m%d)
sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [testdb] TO DISK='/var/opt/mssql/backup/testdb_$DATE.bak' WITH COMPRESSION"
赋权:
chmod +x /opt/backup_mssql.sh
crontab -e
每天凌晨 2 点:
0 2 * * * /opt/backup_mssql.sh
如果你想要 跨平台 / 可编辑 SQL:
sqlcmd -S localhost -U sa -P '密码' \
-Q "SELECT * FROM 表名" -o data.sql
或者用 bcp 导出数据(适合大表)。
RESTORE DATABASE [testdb]
FROM DISK = '/var/opt/mssql/backup/testdb.bak'
WITH REPLACE;
GO
❌ 权限不足
✅ 确保目录属于 mssql:mssql
sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup
如果你愿意,可以告诉我:
我可以给你定制备份方案。