在 Debian 上迁移 SQL Server(通常是 SQL Server on Linux)常见有几种方式,取决于你是同版本迁移、跨版本迁移、还是换服务器。下面按最常用场景给你一套清晰方案。
sqlcmd -S localhost -U sa -Q "SELECT @@VERSION"
SQL Server 默认使用 mssql 用户:
sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup
sqlcmd -S localhost -U sa -Q \
"BACKUP DATABASE [YourDB] TO DISK='/var/opt/mssql/backup/YourDB.bak'"
拷贝备份文件到新服务器:
scp /var/opt/mssql/backup/YourDB.bak user@new-server:/var/opt/mssql/backup/
sqlcmd -S localhost -U sa -Q \
"RESTORE DATABASE [YourDB] FROM DISK='/var/opt/mssql/backup/YourDB.bak' WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_log' TO '/var/opt/mssql/data/YourDB_log.ldf'"
✅ 适合:
sqlpackage / DACPAC(结构+数据)适合跨环境、CI/CD。
sqlpackage /Action:Export \
/SourceServerName:localhost \
/SourceDatabaseName:YourDB \
/TargetFile:YourDB.bacpac
sqlpackage /Action:Import \
/TargetServerName:localhost \
/TargetDatabaseName:YourDB \
/SourceFile:YourDB.bacpac
bcp 导出导入(轻量)适合单表或少量数据。
bcp YourDB.dbo.Table1 out table1.dat -S localhost -U sa -P password -n
目标端:
bcp YourDB.dbo.Table1 in table1.dat -S localhost -U sa -P password -n
docker cp mssql:/var/opt/mssql/backup/YourDB.bak ./
docker cp YourDB.bak mssql:/var/opt/mssql/backup/
docker exec -it mssql sqlcmd -S localhost -U sa -Q \
"RESTORE DATABASE [YourDB] FROM DISK='/var/opt/mssql/backup/YourDB.bak'"
-- 用户
SELECT name FROM sys.database_principals;
-- 登录
SELECT name FROM sys.server_principals;
-- 兼容性
SELECT name, compatibility_level FROM sys.databases;
如涉及登录:
sqlcmd -S localhost -U sa -Q "CREATE LOGIN ..."
使用 WITH MOVE 明确指定
sudo ufw allow 1433
| 场景 | 推荐方式 |
|---|---|
| 整库迁移 | 备份还原 ✅ |
| 跨平台 | bacpac |
| 单表 | bcp |
| 容器 | 挂载卷 / 备份 |
如果你愿意,可以告诉我:
我可以给你定制化迁移命令。