温馨提示×

Linux与SQL Server数据迁移步骤是什么

小樊
34
2025-12-27 16:17:44
栏目: 云计算

Linux与SQL Server数据迁移步骤

一 迁移方式概览

  • 备份与还原(.bak):同版本或升级迁移的首选,停机时间短、操作直观,适合大多数业务库。
  • bcp 批量导入导出(CSV/原生格式):适合超大数据量、分批/增量迁移或跨网络传输。
  • BACPAC 导入导出:便于“架构+数据”一体化迁移,适合中等规模或需要版本管理/审查的场景。
  • SSIS 数据集成:适合复杂转换、清洗、编排与自动化调度。
  • 第三方工具:如 Navicat 等图形化工具,便于快速搬迁与校验。
    以上方式均为在 Linux(如 Ubuntu) 上的 SQL Server 环境中常用且可落地的路径,可按数据量、复杂度与停机窗口选择组合方案。

二 标准步骤流程

  • 1 准备目标环境
    • Ubuntu 安装并初始化 SQL Server:导入 GPG 密钥、注册仓库、安装 mssql-server、执行 sudo /opt/mssql/bin/mssql-conf setup 设置 SA 密码、启动服务并设为开机自启。
    • 安装命令行工具 mssql-toolsunixodbc-dev,并将 /opt/mssql-tools/bin 加入 PATH
    • 验证连接:sqlcmd -S localhost -U SA -P '<YourPassword>' -Q "SELECT @@VERSION"
    • 开放防火墙端口(默认 1433):如 sudo ufw allow 1433(或 firewalld 对应规则)。
  • 2 评估与准备源库
    • 检查数据库大小(如 sp_spaceused)、对象依赖(存储过程、触发器、用户等),记录 schema 与关键约束,便于迁移后校验。
  • 3 选择迁移方式并执行
    • 备份还原:源库做 FULL 备份 → 用 SCP/SFTP.bak 传到 Ubuntu → 在目标库用 RESTORE DATABASE … WITH MOVE … 指定新数据/日志文件路径并上线。
    • bcp:在源端导出表为 CSV/原生 → 传到目标端 → 用 bcp … in 批量导入,必要时用 -F 2 跳过表头、用 -e 记录错误。
    • BACPAC:源库导出 .bacpac → 传到目标端 → 通过导入向导或命令行导入到目标 SQL Server。
    • SSIS:在 Visual Studio/SSDT 设计包(OLE DB Source → 转换 → OLE DB Destination),测试后部署执行,可结合 SQL Server Agent/cron 调度。
  • 4 校验与切换
    • 数据一致性:对比 COUNT(*)、抽样记录、关键业务校验;可用 HASHBYTES 做行级或集合级校验。
    • 对象一致性:核对 表/列/索引/约束/触发器/权限 等是否齐全一致。
    • 应用切换:更新连接串指向新库(如 Server=ubuntu_ip;Database=YourDB;User Id=sa;Password=…),回归 CRUD 与性能测试,必要时优化索引/统计信息。

三 常用命令示例

  • 备份(Linux 端 sqlcmd)
    sqlcmd -S localhost -U SA -P '<YourPassword>' \
      -Q "BACKUP DATABASE [MyDB] TO DISK = N'/var/opt/mssql/backup/MyDB.bak' WITH INIT, STATS = 10"
    
  • 传输(SCP)
    scp username@source_server:/path/MyDB.bak /home/ubuntu/backup/
    
  • 还原(WITH MOVE 指定新文件路径)
    sqlcmd -S localhost -U SA -P '<YourPassword>' -Q "
      RESTORE DATABASE [MyDB_New]
      FROM DISK = N'/home/ubuntu/backup/MyDB.bak'
      WITH
        MOVE 'MyDB_Data' TO N'/var/opt/mssql/data/MyDB_New.mdf',
        MOVE 'MyDB_Log'  TO N'/var/opt/mssql/data/MyDB_New_log.ldf',
        STATS = 10, REPLACE, RECOVERY"
    
  • bcp 导出/导入(CSV)
    # 导出
    bcp MyDB.dbo.MyTable out /home/ubuntu/export/MyTable.csv -c -t, -S localhost -U SA -P '<YourPassword>'
    
    # 导入(有表头时跳过首行)
    bcp MyDB_New.dbo.MyTable in /home/ubuntu/export/MyTable.csv -c -t, -S localhost -U SA -P '<YourPassword>' -e /home/ubuntu/export/error.log -F 2
    
  • 快速连通性验证
    sqlcmd -S localhost -U SA -P '<YourPassword>' -Q "SELECT @@VERSION"
    

以上命令覆盖了 备份/还原bcp连通性验证 的高频用法,可按实际路径、逻辑文件名与分隔符调整。

四 常见问题与排查

  • 权限与账户:确保 SA 启用且具备备份/还原/创建对象权限;必要时检查登录状态与角色。
  • 文件路径与权限:.bak.csv 与目标 /var/opt/mssql/data 需存在且 mssql 用户可写;RESTORE … WITH MOVE 中的逻辑文件名必须与原库一致。
  • 版本兼容:目标 SQL Server(Linux) 版本应不低于源库,避免功能/兼容级别不兼容导致还原失败。
  • 连接与网络:确认防火墙放行 1433/TCP、网络可达;必要时用 sudo /opt/mssql/bin/mssql-conf set network.tcpport 1433 固定端口并重启服务。
  • 大对象与日志:批量导入前评估事务日志空间,必要时分批提交或阶段性收缩日志,避免空间耗尽。
  • 校验策略:除 COUNT(*) 外,对关键表使用 HASHBYTES 或业务主键范围校验,确保迁移无损。

五 方法选择建议

  • 小型库、可接受短停机:优先 备份与还原,步骤少、风险低。
  • 超大数据量/跨公网/分批上线:优先 bcp 分批导入,配合校验与重试机制。
  • 需要转换/清洗/编排:使用 SSIS 在 Windows 端执行,稳定可控。
  • 需要“一键打包”迁移与版本留存:使用 BACPAC 导出/导入,便于审计与回滚。
  • 无命令行经验或需快速交付:使用 Navicat 等图形化工具完成迁移与比对。

0