温馨提示×

centos下sqlserver迁移方案

小樊
42
2025-12-23 17:49:40
栏目: 云计算

CentOS 下 SQL Server 迁移方案

一 方案总览与选择

  • 适用场景与取舍如下:
方案 适用场景 优点 注意点
备份/还原(.bak) 全库迁移、版本跨度不大(如 2017/2019/2022)、停机窗口可控 操作简单、一致性好、工具成熟 需获取源库备份;还原时处理文件路径与日志;跨版本需满足兼容矩阵
生成脚本 + 数据导入/导出向导(SSIS) 选择性迁移(部分表/架构/数据)、跨网络带宽一般 粒度可控、可复用包、适合增量同步 需配置源/目标连接;大数据量需分批;注意身份与权限
Linux 端 sqlcmd/BACPAC 导入 无法在源端使用 SSMS、倾向命令行 脚本化、易自动化 依赖 sqlpackage;BACPAC 对复杂对象/触发器支持有限
  • 迁移前务必确认目标 CentOS 上的 SQL Server 版本与源库兼容,并在目标端完成实例安装与连通性验证(端口 1433 开放、sa 可用、mssql-tools 就绪)。

二 方案一 备份还原 .bak(推荐)

  • 源库备份
    • SSMS 中执行:数据库 → 任务 → 备份,生成 .bak;将备份文件复制到目标 CentOS(如 /var/opt/mssql/backup/)。
  • 目标端准备
    • 安装并初始化 SQL Server(以 CentOS 7/8 为例):
      • 配置仓库并安装:curl 对应 rhel/7rhel/8 的 mssql-server 仓库;执行 sudo yum install -y mssql-server;运行 sudo /opt/mssql/bin/mssql-conf setup 完成初始化;sudo systemctl start mssql-server 并设为开机自启。
      • 开放防火墙:sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent && sudo firewall-cmd --reload
      • 安装命令行工具:sudo yum install -y mssql-tools unixODBC-devel,并将 /opt/mssql-tools/bin 加入 PATH
  • 还原数据库
    • 基本命令(将逻辑名与文件路径替换为实际值):
      RESTORE DATABASE newdbname
      FROM DISK = '/var/opt/mssql/backup/a.bak'
      WITH
        MOVE 'LogicalDataFileName' TO '/var/opt/mssql/data/newdb.mdf',
        MOVE 'LogicalLogFileName'  TO '/var/opt/mssql/data/newdb_log.ldf',
        STATS = 1, REPLACE, RECOVERY;
      
    • 获取逻辑文件名:在源库执行 RESTORE FILELISTONLY FROM DISK = 'a.bak';;还原时确保目标目录(如 /var/opt/mssql/data/)存在且 mssql 用户可写。
  • 版本与兼容性
    • 建议目标版本不低于源库;跨版本还原需满足官方兼容矩阵与功能差异评估(如变更跟踪、全文检索、PolyBase 等)。

三 方案二 生成脚本 + SSIS 导入导出向导(选择性迁移)

  • 生成脚本
    • SSMS 中:数据库 → 任务 → 生成脚本;选择需要迁移的对象(架构、表、视图、存储过程、函数等);在“设置脚本编写选项”里选择“高级”,将“要编写的脚本的数据类型”设为“架构和数据”(或仅架构/仅数据);在目标 CentOS 上先创建空库,再执行脚本重建对象。
  • 数据导入导出(SSIS)
    • SSMS 打开“导入和导出向导”,数据源选择源库,目标选择 CentOS 上的 SQL Server(可用 IP/主机名SQL 认证);选择“从表或视图复制数据”或编写自定义查询;映射目标表后执行;可将生成的 SSIS 包保存到文件系统或 SSIS 目录以便复用与自动化调度。
  • 适用场景
    • 只需迁移部分表或做结构/数据分离迁移;需要在迁移过程中做字段映射、转换或清洗;网络带宽一般、希望分批传输与校验。

四 方案三 Linux 端 sqlcmd 与 BACPAC(命令行自动化)

  • 使用 sqlcmd 执行 T‑SQL 迁移
    • 适合脚本化执行备份、还原、批量对象创建与数据校验;示例:
      sqlcmd -S <centos_ip>,1433 -U sa -P '<YourPassword>' -i create_schema.sql
      sqlcmd -S <centos_ip>,1433 -U sa -P '<YourPassword>' -Q "RESTORE DATABASE newdb FROM DISK = '/var/opt/mssql/backup/a.bak' WITH MOVE '...' TO '...', REPLACE, RECOVERY"
      
  • 使用 sqlpackage 导入 BACPAC
    • Windows 端导出 BACPAC:sqlpackage /Action:Export /SourceServerName:<src> /SourceDatabaseName:<db> /TargetFile:<db>.bacpac;将 .bacpac 复制到 CentOS
    • CentOS 端导入(需安装 sqlpackage,通常随 mssql-tools 提供):
      sqlpackage /Action:Import /SourceFile:/var/opt/mssql/backup/db.bacpac /TargetServerName:<centos_ip>,1433 /TargetDatabaseName:<newdb> /TargetUser:sa /TargetPassword:'<YourPassword>'
      
    • 注意:BACPAC 更适合“表与数据为主”的迁移,复杂对象(如触发器、服务代理、全文索引等)可能需额外处理或改用备份还原/脚本方式。

五 迁移前后检查与常见问题

  • 连通性与权限
    • 确认 1433 端口开放、实例可远程登录(sa 或具备所需权限的域/SQL 登录);在 CentOS 上用 sqlcmd -S 127.0.0.1 -U sa -P '<pwd>' -Q "SELECT @@VERSION;" 做本机连通性自检。
  • 文件路径与磁盘
    • Linux 默认数据目录为 /var/opt/mssql/data/;还原时用 MOVE 指定实际文件路径;确保目录存在且 mssql 用户有读写权限。
  • 版本与兼容
    • 目标版本需满足源库功能与兼容要求;跨版本还原失败或不一致时,优先检查版本兼容矩阵与功能差异清单。
  • 数据一致性与校验
    • 迁移后对比行数、关键聚合、主外键/唯一性约束、索引与触发器状态;对大表可分批校验与抽样比对。
  • 防火墙与服务
    • 若迁移失败提示网络或超时,复核 firewall-cmd 规则与 SELinux 策略;确保 mssql-server 处于 active (running) 状态。

0