在 Debian 上迁移 SQL Server(通常指 Microsoft SQL Server on Linux),常见场景有几种,下面按最常见、最稳妥的方式给你讲清楚。
| 场景 | 推荐方式 |
|---|---|
| 同版本、同实例结构迁移 | 备份 / 还原(最推荐) |
| 跨版本 / 跨平台(Win → Linux) | 备份还原 或 导出导入 |
| 只迁部分表 / 数据 | bcp / SSMS 导出 |
| 容器 → 物理机 / 虚拟机 | 挂载数据目录或备份还原 |
BACKUP DATABASE [dbname]
TO DISK = '/var/opt/mssql/backup/dbname.bak'
WITH COMPRESSION;
如果是 Windows:
BACKUP DATABASE dbname TO DISK='C:\backup\dbname.bak'
把 .bak 文件传到 Debian:
scp dbname.bak user@debian:/var/opt/mssql/backup/
登录 SQL Server:
sqlcmd -S localhost -U SA
还原数据库:
RESTORE DATABASE dbname
FROM DISK = '/var/opt/mssql/backup/dbname.bak'
WITH MOVE 'dbname' TO '/var/opt/mssql/data/dbname.mdf',
MOVE 'dbname_log' TO '/var/opt/mssql/data/dbname_log.ldf';
✅ 跨平台(Windows → Linux)完全支持
docker run -e ACCEPT_EULA=Y -e SA_PASSWORD='Passw0rd!' \
-p 1433:1433 \
-v /mssql/data:/var/opt/mssql \
mcr.microsoft.com/mssql/server
⚠️ 仅适用于相同版本
docker cp dbname.bak mssql_container:/backup/
docker exec -it mssql_container /opt/mssql-tools/bin/sqlcmd ...
bcp导出:
bcp dbname.dbo.table out table.dat -S src -U sa -P pwd -n
导入:
bcp dbname.dbo.table in table.dat -S localhost -U sa -P pwd -n
迁移后账号会“孤立”:
ALTER USER dbuser WITH LOGIN = dbuser;
批量修复:
EXEC sp_change_users_login 'Auto_Fix', 'dbuser';
| 源 | 目标 |
|---|---|
| 2017 → 2019 | ✅ |
| 2019 → 2022 | ✅ |
| 高版本 → 低版本 | ❌ 不支持 |
你可以告诉我:
我可以直接给你一套可执行命令。