在 Debian 上“迁移 SQL Server”通常有三种常见场景,我先帮你理清,然后分别给出做法。
把 SQL Server 从 Windows 迁移到 Debian(跨平台迁移)
在 Debian 之间迁移 SQL Server(服务器更换)
把数据从其他数据库迁到 SQL Server(如 MySQL / PostgreSQL)
下面以 最常见情况 1 & 2 为主。
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)
sudo apt install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
设置 SA 密码、选择版本(Evaluation / Developer / Express)。
sudo apt install -y mssql-tools unixodbc-dev
BACKUP DATABASE testdb
TO DISK = 'C:\backup\testdb.bak'
WITH COMPRESSION;
拷贝 .bak 到 Debian:
scp testdb.bak user@debian:/var/opt/mssql/backup/
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
适合 小库 / 表少 的情况。
Windows 常见:
SQL_Latin1_General_CP1_CI_AS
Linux 默认:
Latin1_General_100_CI_AS
建议在 RESTORE 前确认,避免乱码。
Linux SQL Server 不支持:
确保:
/var/opt/mssql
属主是 mssql:mssql
你可以告诉我:
我可以直接给你 一条可执行的迁移方案。