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 进行大批量表级迁移
五、关键注意事项与常见问题
- 版本兼容:目标 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)。
- 验证与回滚:迁移后做行数、约束、索引、触发器、存储过程、登录/权限及关键业务场景验证,并保留回滚预案(源库备份与只读窗口)。