温馨提示×

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

小樊
34
2025-12-21 18:56:08
栏目: 云计算

CentOS 与 SQL Server 数据迁移步骤

一、迁移方式总览与选择

  • 备份还原(.bak):适合整库迁移,操作简洁、一致性好,跨平台(Windows→Linux)同样适用。要点是目标库版本需兼容、还原时正确 MOVE 数据/日志文件。
  • SSIS 导入导出向导:适合选择性迁移(部分表/视图/查询),可在 SSMS 中直接按向导配置源/目标连接与列映射,支持保存为 SSIS 包复用。
  • bcp/BULK INSERT/OPENROWSET(BULK…):适合大批量表级数据迁移或脚本化/自动化场景,灵活控制格式与性能。
    以上方式均为微软官方支持的数据移动手段,可按数据量、停机窗口与复杂度选择组合使用。

二、方式一 备份还原迁移整库(Windows→CentOS 或 Linux→Linux)

  • 步骤1 准备目标环境

    • CentOS 安装并初始化 SQL Server(示例为 RHEL/7 系列仓库,命令在 CentOS 7/8 通用):
      • 添加仓库并安装:sudo yum install -y mssql-server
      • 初始化配置:sudo /opt/mssql/bin/mssql-conf setup
      • 启动服务:sudo systemctl start mssql-server && sudo systemctl enable mssql-server
      • 开放端口:sudo firewall-cmd --permanent --add-port=1433/tcp && sudo firewall-cmd --reload
      • 安装命令行工具:sudo yum install -y mssql-tools unixODBC-devel;将 /opt/mssql-tools/bin 加入 PATH
      • 验证:sqlcmd -S localhost -U SA -P ‘’ -Q “SELECT @@VERSION”
  • 步骤2 在源库生成备份

    • 使用 SSMS 或 T‑SQL 备份到文件(示例):
      • BACKUP DATABASE [YourDB] TO DISK = N’D:\Backup\YourDB.bak’ WITH COPY_ONLY, STATS = 5
  • 步骤3 将备份文件传输到 CentOS

    • 可用 WinSCP(SFTP) 等工具将 .bak 上传至 CentOS(示例目录:/SQLServer/SQLBackup/)
  • 步骤4 在 CentOS 上还原数据库

    • 先查询备份中的逻辑文件名(在 Linux 上用 sqlcmd 执行):
      • RESTORE FILELISTONLY FROM DISK = N’/SQLServer/SQLBackup/YourDB.bak’
    • 按查询结果执行还原并重命名数据/日志文件(示例):
      • USE [master]
        RESTORE DATABASE [YourDB] FROM DISK = N’/SQLServer/SQLBackup/YourDB.bak’
        WITH
        MOVE N’YourDB_Data’ TO N’/var/opt/mssql/data/YourDB.mdf’,
        MOVE N’YourDB_Log’ TO N’/var/opt/mssql/data/YourDB_log.ldf’,
        STATS = 1, REPLACE, RECOVERY
  • 步骤5 验证

    • 检查数据库状态与对象:SELECT name, state_desc FROM sys.databases WHERE name=‘YourDB’
    • 抽样校验数据量与关键表行数,确认应用可正常连接访问

三、方式二 使用 SSIS 导入导出向导迁移部分数据

  • Windows 上的 SSMS 打开“SQL Server 导入和导出向导”,配置:
    • 数据源:选择源 SQL Server 实例与数据库;
    • 目标:选择目标 CentOS 上的 SQL Server(主机/IP、端口 1433、SQL 身份验证);
    • 选择“从表或视图复制数据”或编写查询;
    • 列映射与数据类型转换按需调整;
    • 可选择将 SSIS 包保存到文件系统或 SSIS 目录以便复用与自动化。

四、方式三 使用 bcp/BULK INSERT 进行大批量表级迁移

  • 使用 bcp 导出表数据(示例):

    • bcp YourDB.dbo.YourTable out “/tmp/YourTable.csv” -c -t"," -S <CentOS_IP>,1433 -U SA -P ‘’ -e /tmp/err.log
  • 使用 bcp 导入表数据(示例):

    • bcp YourDB.dbo.YourTable in “/tmp/YourTable.csv” -c -t"," -S <CentOS_IP>,1433 -U SA -P ‘’ -e /tmp/err.log
  • 在 T‑SQL 中使用 BULK INSERT(示例):

    • BULK INSERT YourDB.dbo.YourTable
      FROM ‘/tmp/YourTable.csv’
      WITH (FIELDTERMINATOR = ‘,’, ROWTERMINATOR = ‘\n’, FIRSTROW = 2);
  • 提示:跨实例/跨平台大批量传输时,可使用 Unicode 本机格式 减少字符集转换风险;必要时配合格式化文件以保持类型一致。

五、关键注意事项与常见问题

  • 版本兼容:目标 SQL Server 版本需不低于源库(尤其跨主版本还原时),否则可能失败或不支持特性。
  • 文件路径与权限:Linux 默认数据目录为 /var/opt/mssql/data;备份/数据文件需对 mssql 运行账户可读写,且 sqlcmd/bcp 能访问。
  • 逻辑文件名与 MOVE:还原时必须用 MOVE 将备份中的逻辑数据/日志文件映射到目标路径,逻辑名可通过 RESTORE FILELISTONLY 获取。
  • 防火墙与端口:确保 1433/TCP 对迁移客户端开放(firewall-cmd --add-port=1433/tcp --permanent && firewall-cmd --reload)。
  • 验证与回滚:迁移后做行数、约束、索引、触发器、存储过程、登录/权限及关键业务场景验证,并保留回滚预案(源库备份与只读窗口)。

0