温馨提示×

ubuntu怎么迁移sqlserver

小樊
35
2026-10-06 18:48:50
栏目: 云计算

在 Ubuntu 上“迁移 SQL Server”通常有以下几种常见场景,我先按最常见情况说明,然后给你具体做法。


一、场景说明(先确认你要哪种)

  1. 同机 / 跨机:迁移 SQL Server 数据库(数据迁移)

    • 从 Windows SQL Server → Ubuntu SQL Server
    • 或 Ubuntu SQL Server → 另一个 Ubuntu SQL Server
  2. 迁移整个 SQL Server 实例(含系统库、登录、作业等)

    • 较少见,通常不建议
  3. 从其他数据库(MySQL / PostgreSQL)迁移到 SQL Server on Ubuntu

下面以 最常见:数据库迁移(用户库) 为主。


二、Ubuntu 上 SQL Server 环境确认

先确认你已经安装好 SQL Server(Ubuntu):

sudo systemctl status mssql-server

连接测试:

sqlcmd -S localhost -U SA -P '你的密码'

三、推荐迁移方式(最稳妥)

✅ 方式 1:使用 .bak 备份还原(最推荐)

1️⃣ 在源 SQL Server 上备份

BACKUP DATABASE TestDB
TO DISK = '/tmp/testdb.bak';

如果是 Windows:

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

2️⃣ 拷贝备份文件到 Ubuntu

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

确保权限:

sudo chown mssql:mssql /var/opt/mssql/backup/testdb.bak

3️⃣ 在 Ubuntu 上还原

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';

✅ 方式 2:使用 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

⚠️ 不适合大表、二进制数据


✅ 方式 3:使用 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';

五、从 MySQL / PostgreSQL 迁移到 SQL Server

推荐工具:

  • SQL Server Migration Assistant (SSMA)
  • 或 mssql-scripter + 手动导入

六、如果你说的是“迁移 SQL Server 安装本身”

⚠️ SQL Server 不支持直接迁移程序文件

正确做法是:

  1. 在新 Ubuntu 安装同版本 SQL Server
  2. 只迁移 数据库 + 登录 + 作业

七、我可以更具体地帮你

你可以告诉我:

  • 源系统(Windows / Linux / 云)
  • 目标系统(Ubuntu 版本)
  • SQL Server 版本
  • 数据量大小
  • 是否含存储过程 / 作业 / 登录

我可以给你一步步命令级方案。

0 踩