温馨提示×

debian怎么迁移sqlserver

小樊
42
2026-09-13 17:41:46
栏目: 云计算

Debian 上“迁移 SQL Server”通常有三种常见场景,我先帮你理清,然后分别给出做法。


一、场景确认(先判断你要哪一种)

  1. 把 SQL Server 从 Windows 迁移到 Debian(跨平台迁移)

    • 源:Windows SQL Server
    • 目标:Debian 上的 SQL Server(Microsoft 官方支持)
  2. 在 Debian 之间迁移 SQL Server(服务器更换)

    • 源:Debian A
    • 目标:Debian B
  3. 把数据从其他数据库迁到 SQL Server(如 MySQL / PostgreSQL)

    • 这属于“异构迁移”

下面以 最常见情况 1 & 2 为主。


二、Debian 上安装 SQL Server(目标机)

1. 添加 Microsoft 源

curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/mssql.gpg

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/debian/12/mssql-server-2022.list)"
sudo apt update

(Debian 11 把 12 改成 11

2. 安装 SQL Server

sudo apt install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup

设置 SA 密码、选择版本(Evaluation / Developer / Express)。

3. 安装命令行工具

sudo apt install -y mssql-tools unixodbc-dev

三、迁移方式(推荐顺序)


✅ 方式一:备份还原(最稳定,推荐)

在源 SQL Server(Windows)

BACKUP DATABASE testdb
TO DISK = 'C:\backup\testdb.bak'
WITH COMPRESSION;

拷贝 .bak 到 Debian:

scp testdb.bak user@debian:/var/opt/mssql/backup/

在 Debian 上还原

sqlcmd -S localhost -U SA -P '密码'
RESTORE DATABASE testdb
FROM DISK = '/var/opt/mssql/backup/testdb.bak'
WITH MOVE 'testdb' TO '/var/opt/mssql/data/testdb.mdf',
MOVE 'testdb_log' TO '/var/opt/mssql/data/testdb.ldf';

✅ 方式二:导出 / 导入(无物理文件)

使用 sqlpackage

# 导出
sqlpackage /a:Export \
 /ssn:windows-server \
 /sdn:testdb \
 /su:sa /sp:密码 \
 /tf:testdb.bacpac

# 导入
sqlpackage /a:Import \
 /tsn:localhost \
 /tdn:testdb \
 /tu:sa /tp:密码 \
 /tf:testdb.bacpac

适合 跨版本 / 云迁移


✅ 方式三:逻辑迁移(脚本)

# 生成结构+数据
sqlcmd -S src -U sa -P pwd -Q "..." > schema.sql

# 在目标执行
sqlcmd -S localhost -U sa -P pwd -i schema.sql

适合 小库 / 表少 的情况。


四、注意事项(非常重要)

1. 排序规则

Windows 常见:

SQL_Latin1_General_CP1_CI_AS

Linux 默认:

Latin1_General_100_CI_AS

建议在 RESTORE 前确认,避免乱码。


2. 不支持的功能

Linux SQL Server 不支持

  • SQL Server Agent(部分)
  • Windows 身份认证
  • 某些 Windows 特性

3. 权限

确保:

/var/opt/mssql

属主是 mssql:mssql


五、如果你愿意,我可以更进一步帮你

你可以告诉我:

  1. 源系统(Windows?Debian?哪个版本?)
  2. 数据量(GB?表数量?)
  3. 是否允许停机
  4. SQL Server 版本(2016 / 2019 / 2022?)

我可以直接给你 一条可执行的迁移方案

0