centos下sqlserver迁移方案
导读:CentOS 下 SQL Server 迁移方案 一 方案总览与选择 适用场景与取舍如下: 方案 适用场景 优点 注意点 备份/还原(.bak) 全库迁移、版本跨度不大(如 2017/2019/2022)、停机窗口可控 操...
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/7 或 rhel/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。
- 配置仓库并安装:curl 对应 rhel/7 或 rhel/8 的 mssql-server 仓库;执行
- 安装并初始化 SQL Server(以 CentOS 7/8 为例):
- 还原数据库
- 基本命令(将逻辑名与文件路径替换为实际值):
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 更适合“表与数据为主”的迁移,复杂对象(如触发器、服务代理、全文索引等)可能需额外处理或改用备份还原/脚本方式。
- 在 Windows 端导出 BACPAC:
五 迁移前后检查与常见问题
- 连通性与权限
- 确认 1433 端口开放、实例可远程登录(sa 或具备所需权限的域/SQL 登录);在 CentOS 上用
sqlcmd -S 127.0.0.1 -U sa -P '< pwd> ' -Q "SELECT @@VERSION; "做本机连通性自检。
- 确认 1433 端口开放、实例可远程登录(sa 或具备所需权限的域/SQL 登录);在 CentOS 上用
- 文件路径与磁盘
- Linux 默认数据目录为 /var/opt/mssql/data/;还原时用
MOVE指定实际文件路径;确保目录存在且 mssql 用户有读写权限。
- Linux 默认数据目录为 /var/opt/mssql/data/;还原时用
- 版本与兼容
- 目标版本需满足源库功能与兼容要求;跨版本还原失败或不一致时,优先检查版本兼容矩阵与功能差异清单。
- 数据一致性与校验
- 迁移后对比行数、关键聚合、主外键/唯一性约束、索引与触发器状态;对大表可分批校验与抽样比对。
- 防火墙与服务
- 若迁移失败提示网络或超时,复核
firewall-cmd规则与 SELinux 策略;确保mssql-server处于 active (running) 状态。
- 若迁移失败提示网络或超时,复核
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos下sqlserver迁移方案
本文地址: https://pptw.com/jishu/779185.html
