Ubuntu上SQL Server的数据库迁移方法
导读:Ubuntu上 SQL Server 数据库迁移方法 一、常用迁移方式与适用场景 备份还原(.bak):最稳妥、适合跨版本/跨平台迁移,支持完整恢复与时间点恢复(若含差异/日志备份)。 生成脚本 + 批量导入(mssql-scripter...
Ubuntu上 SQL Server 数据库迁移方法
一、常用迁移方式与适用场景
- 备份还原(.bak):最稳妥、适合跨版本/跨平台迁移,支持完整恢复与时间点恢复(若含差异/日志备份)。
- 生成脚本 + 批量导入(mssql-scripter + bcp):适合无停机窗口、版本差异较大或仅需迁移部分对象/数据的场景。
- SSMS 图形化导出/导入数据:适合一次性小规模迁移或临时验证,操作直观。
二、方法一 备份还原 .bak(推荐)
- 源库备份(Windows 或 Linux)
- 使用 SSMS 执行完整备份,或用 T‑SQL:
- BACKUP DATABASE [YourDB] TO DISK = N’/path/YourDB.bak’ WITH INIT, NAME = N’YourDB-Full’;
- 使用 SSMS 执行完整备份,或用 T‑SQL:
- 将备份文件传输到 Ubuntu
- 推荐 scp:
- scp YourDB.bak user1@192.168.2.9:./
- 也可使用 Samba 网络共享(Windows 访问 \machinenameorip\share)。
- 推荐 scp:
- 在 Ubuntu 上准备目录并移动备份
- SQL Server on Linux 默认数据/备份目录属 mssql:mssql,应将 .bak 放入其可写目录(如 /var/opt/mssql/backup):
- ssh user1@192.168.2.9
- sudo su
- mkdir -p /var/opt/mssql/backup
- mv /home/user1/YourDB.bak /var/opt/mssql/backup/
- exit
- SQL Server on Linux 默认数据/备份目录属 mssql:mssql,应将 .bak 放入其可写目录(如 /var/opt/mssql/backup):
- 安装命令行工具(若未安装)
- Ubuntu 22.04 示例:
- curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
- curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
- sudo apt update
- sudo apt install mssql-tools18 unixodbc-dev
- echo ‘export PATH=“$PATH:/opt/mssql-tools18/bin”’ > > ~/.bashrc & & source ~/.bashrc
- Ubuntu 22.04 示例:
- 在 Ubuntu 上还原
- 连接并还原(需替换逻辑文件名与路径):
- sqlcmd -S localhost -U sa
- RESTORE DATABASE YourDB FROM DISK = ‘/var/opt/mssql/backup/YourDB.bak’ WITH MOVE ‘YourDB’ TO ‘/var/opt/mssql/data/YourDB.mdf’, MOVE ‘YourDB_Log’ TO ‘/var/opt/mssql/data/YourDB_Log.ldf’; GO
- 提示
- 逻辑文件名可用 RESTORE FILELISTONLY 查看;若目标库已存在,可加 WITH REPLACE。
- 如需变更默认备份/数据目录,可用 mssql-conf 配置。
- 连接并还原(需替换逻辑文件名与路径):
三、方法二 生成脚本 + 批量导入(无停机、脚本化)
- 在 Ubuntu 上导出数据库脚本(mssql-scripter)
- 安装(Python/pip 环境):
- sudo apt-get update
- sudo apt-get install python3-pip libunwind8
- pip3 install --upgrade pip
- pip3 install mssql-scripter
- 导出示例:
- mssql-scripter -S < 源服务器> -d < 数据库名> -U < 用户> -P < 密码> --schema-and-data --include-objects dbo.Table1,dbo.Table2 -f schema_data.sql
- 安装(Python/pip 环境):
- 在 Ubuntu 上导入脚本(sqlcmd)
- sqlcmd -S localhost -U sa -d master -i schema_data.sql
- 仅导出/导入大表数据(bcp)
- 导出:
- bcp < 数据库名> .dbo.Table1 out /tmp/Table1.dat -S localhost -U sa -P ‘< 密码> ’ -n -c
- 导入:
- bcp < 数据库名> .dbo.Table1 in /tmp/Table1.dat -S localhost -U sa -P ‘< 密码> ’ -n -c -t ‘,’ -r ‘\n’
- 提示
- bcp 适合大数据量批处理;结合 -F/-L 做分片导出,或在低峰期执行。
- 导出:
四、方法三 SSMS 图形化导出与导入数据
- 在 SSMS 中右键数据库 → 任务 → 导出数据,选择源/目标数据源(目标可用 SQL Server Native Client 指向 Ubuntu 上的实例),按向导映射表与列完成迁移。
- 适合小规模或一次性迁移;大数据量时建议改用 备份还原 或 bcp 以获得更好性能与可控性。
五、迁移后验证与常见问题
- 验证要点
- 对象一致性:核对表、视图、存储过程、触发器数量与定义。
- 数据一致性:抽样对比行数、关键聚合/校验和,必要时做全量比对。
- 依赖与权限:检查登录、用户、角色、权限及 SQL Server Agent 作业。
- 应用连通:更新连接字符串、连接池与超时设置,在预发环境充分回归。
- 常见问题与处理
- 权限/路径:确保 .bak 位于 /var/opt/mssql/ 下且属 mssql:mssql;否则还原会报权限错误。
- 逻辑文件名不匹配:用 RESTORE FILELISTONLY 确认后,在 RESTORE 语句中使用正确的 MOVE 参数。
- 版本兼容:跨版本迁移时遵循 SQL Server 支持矩阵;必要时在源端使用与目标版本兼容的备份工具/脚本。
- 工具缺失:Ubuntu 上需安装 mssql-tools18(含 sqlcmd/bcp)以执行还原与导入导出。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上SQL Server的数据库迁移方法
本文地址: https://pptw.com/jishu/763787.html
