Ubuntu上SQL Server数据库迁移技巧
导读:Ubuntu 上 SQL Server 数据库迁移技巧 一、方法选型与适用场景 备份与还原(首选):在源端生成 .bak,通过 scp/sftp 传到 Ubuntu,用 RESTORE DATABASE 恢复。优点是流程成熟、兼容性好、对...
Ubuntu 上 SQL Server 数据库迁移技巧
一、方法选型与适用场景
- 备份与还原(首选):在源端生成 .bak,通过 scp/sftp 传到 Ubuntu,用 RESTORE DATABASE 恢复。优点是流程成熟、兼容性好、对应用改动最小,适合大多数版本升级与平台迁移(Windows → Linux)。
- SSMS 图形化导出/导入:在 SSMS 用“导出数据”生成脚本或文件,再在 Ubuntu 上执行脚本或用 sqlcmd/bcp 导入,适合小规模或需要定制映射的场景。
- 跨平台 Always On 可用性组:用于需要最小化停机的迁移,支持 Windows ↔ Linux 跨平台部署,但部署复杂度更高。
- 第三方对比与同步工具:如 Redgate SQL Compare、ApexSQL Diff,适合做对象级比对与增量同步,作为备份还原的补充手段。
二、标准流程 备份还原(Windows → Ubuntu)
- 源端备份(Windows)
- 用 SSMS 执行完整备份,或将备份放到默认目录(例如:C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak)。
- 也可用 T‑SQL:
- BACKUP DATABASE [YourDB] TO DISK = N’C:.…\YourDB.bak’ WITH NOFORMAT, NOINIT, NAME = N’YourDB-Full Database Backup’, SKIP, NOREWIND, NOUNLOAD, STATS = 10;
- 传输备份到 Ubuntu
- 在 Windows 上启用 Bash(如 WSL 或 Git Bash),使用 scp 拷贝到 Ubuntu:
- scp ‘C:.…\YourDB.bak’ user@ubuntu:/var/opt/mssql/backup/YourDB.bak
- 在 Windows 上启用 Bash(如 WSL 或 Git Bash),使用 scp 拷贝到 Ubuntu:
- 目标端还原(Ubuntu)
- 安装命令行工具(若未安装):
- sudo apt-get update & & sudo apt-get install -y mssql-tools unixodbc-dev
- 使用 sqlcmd 连接并执行还原(需先获取逻辑文件名):
- sqlcmd -S localhost -U SA -P ‘< YourStrong!Passw0rd> ’ -Q “RESTORE FILELISTONLY FROM DISK = ‘/var/opt/mssql/backup/YourDB.bak’”
- 依据上一步返回的逻辑名执行 MOVE(示例):
- sqlcmd -S localhost -U SA -P ‘< YourStrong!Passw0rd> ’ -Q “RESTORE DATABASE [YourDB] FROM DISK = ‘/var/opt/mssql/backup/YourDB.bak’ WITH MOVE ‘YourDB_Data’ TO ‘/var/opt/mssql/data/YourDB.mdf’, MOVE ‘YourDB_Log’ TO ‘/var/opt/mssql/data/YourDB_log.ldf’, STATS = 1, REPLACE, RECOVERY”
- 安装命令行工具(若未安装):
- 验证
- sqlcmd -S localhost -U SA -P ‘< YourStrong!Passw0rd> ’ -Q “SELECT name, state_desc FROM sys.databases WHERE name = N’YourDB’; ”
- 抽样查询关键表数据量与校验和,确认迁移一致性。
三、常见问题与实用技巧
- 逻辑文件名与 MOVE:还原时必须用 RESTORE FILELISTONLY 获取 逻辑数据/日志文件名,否则 MOVE 会失败;路径建议使用 /var/opt/mssql/data/。
- 文件权限与所有权:确保 mssql 用户对备份与目标数据文件具备读写权限(必要时使用 chown/chmod)。
- 版本兼容:跨版本迁移时遵循 SQL Server 的支持矩阵;一般从高版本备份还原到低版本会受限,必要时在源端使用与目标一致或更低版本的 工具/实例 生成备份。
- 大文件传输:跨公网传输大 .bak 时,优先使用 scp -C(压缩)或拆分包;内网可用 rsync 断点续传。
- 停机窗口:备份与最终切换阶段尽量短暂停写;如需近零停机,考虑 Always On 跨平台方案。
- 安全性:传输与存放过程使用 强密码 与 最小权限;备份文件传输完成后及时清理临时位置。
四、自动化与最小化停机的建议
- 脚本化:将备份、传输、获取逻辑名、还原、校验串成 bash/PowerShell 脚本,配合参数化与日志,便于回滚与重复执行。
- 对象级比对与增量:迁移后用 SQL Compare/ApexSQL Diff 做对象与数据一致性比对;对超大库可先迁移结构与原型数据,再用 bcp/SSIS 增量同步变更。
- 连接串与配置更新:切换前准备 回滚预案;迁移后更新应用的 连接字符串、连接池与超时设置,先在测试环境充分验证。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上SQL Server数据库迁移技巧
本文地址: https://pptw.com/jishu/761499.html
