温馨提示×

debian中sqlserver如何迁移

小樊
59
2026-10-07 11:49:08
栏目: 云计算

在 Debian 上迁移 SQL Server(通常是 SQL Server on Linux)常见有几种方式,取决于你是同版本迁移、跨版本迁移、还是换服务器。下面按最常用场景给你一套清晰方案。


一、迁移前准备(重要)

1. 确认 SQL Server 版本

sqlcmd -S localhost -U sa -Q "SELECT @@VERSION"

2. 备份目录权限

SQL Server 默认使用 mssql 用户:

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

二、方式一:使用备份还原(最推荐 ✅)

源服务器(旧 Debian)

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/

目标服务器(新 Debian)

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 容器迁移(如果你用容器)

旧容器

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 ..."

七、常见问题

1. 版本不兼容

  • 高版本 → 低版本 ❌ 不支持
  • 低版本 → 高版本 ✅

2. 文件路径不一致

使用 WITH MOVE 明确指定

3. Debian 防火墙

sudo ufw allow 1433

八、推荐方案总结

场景 推荐方式
整库迁移 备份还原 ✅
跨平台 bacpac
单表 bcp
容器 挂载卷 / 备份

如果你愿意,可以告诉我:

  • SQL Server 版本
  • 是否 Docker
  • 是否跨服务器
  • 数据量大小

我可以给你定制化迁移命令。

0 踩