在 Ubuntu 上“迁移 SQL Server”通常有以下几种常见场景,我先按最常见情况说明,然后给你具体做法。
同机 / 跨机:迁移 SQL Server 数据库(数据迁移)
迁移整个 SQL Server 实例(含系统库、登录、作业等)
从其他数据库(MySQL / PostgreSQL)迁移到 SQL Server on Ubuntu
下面以 最常见:数据库迁移(用户库) 为主。
先确认你已经安装好 SQL Server(Ubuntu):
sudo systemctl status mssql-server
连接测试:
sqlcmd -S localhost -U SA -P '你的密码'
.bak 备份还原(最推荐)BACKUP DATABASE TestDB
TO DISK = '/tmp/testdb.bak';
如果是 Windows:
BACKUP DATABASE TestDB
TO DISK = 'C:\backup\testdb.bak';
scp testdb.bak user@ubuntu:/var/opt/mssql/backup/
确保权限:
sudo chown mssql:mssql /var/opt/mssql/backup/testdb.bak
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_log.ldf';
sqlcmd + 生成脚本(小库适用)适合 跨版本 / 跨平台小数据库
sqlcmd -S source -U sa -P pwd -Q "SELECT * FROM TestDB.dbo.Table" -o data.sql
然后在 Ubuntu 执行:
sqlcmd -S localhost -U sa -P pwd -i data.sql
⚠️ 不适合大表、二进制数据
bcp 导入导出(中等数据量)导出:
bcp TestDB.dbo.Table out data.dat -S source -U sa -P pwd -n
导入:
bcp TestDB.dbo.Table in data.dat -S localhost -U sa -P pwd -n
还原数据库后,常出现:
用户存在但无法登录(孤立用户)
修复:
ALTER USER [username] WITH LOGIN = [username];
批量修复可用:
EXEC sp_change_users_login 'Auto_Fix', 'username';
推荐工具:
mssql-scripter + 手动导入⚠️ SQL Server 不支持直接迁移程序文件
正确做法是:
你可以告诉我:
我可以给你一步步命令级方案。