如何迁移SQL Server到CentOS平台
导读:迁移 SQL Server 到 CentOS 的可行方案与步骤 一、方案总览与前置检查 支持性:自 SQL Server 2017 起支持在 Linux(含 CentOS) 上运行,生产常用 CentOS 7/8 与 SQL Server...
迁移 SQL Server 到 CentOS 的可行方案与步骤
一、方案总览与前置检查
- 支持性:自 SQL Server 2017 起支持在 Linux(含 CentOS) 上运行,生产常用 CentOS 7/8 与 SQL Server 2019/2022 的组合,兼容性良好。迁移前建议统一版本并评估功能差异。
- 兼容性核对:
- 检查源库功能依赖(如 CLR 程序集、SQL Server Agent 作业、跨数据库查询、分布式事务等)在 Linux 上的支持情况。
- 评估数据库兼容级别与目标版本匹配(如 SQL Server 2019 → 150、SQL Server 2022 → 160),必要时预留升级窗口。
- 核对字符集/排序规则、文件路径长度、登录/权限模型(Windows 身份验证在 Linux 上不可用,需使用 SQL 身份验证或 Kerberos)。
- 资源与网络:
- 目标机建议内存 ≥4 GB(最小 2 GB),/var/opt/mssql 目录预留 ≥6 GB 空间;开放 1433/TCP 端口并放通防火墙。
- 建议准备一台跳板/中转机用于备份文件传输与工具连接。
二、方案一 备份还原(.bak,最通用)
- 步骤1 源库备份:在 Windows 上使用 SSMS 执行完整备份,生成 .bak 文件;将备份文件复制到 CentOS(如 /var/opt/mssql/backup/)。
- 步骤2 目标机准备:
- 安装 SQL Server(以 CentOS 7 + SQL Server 2019 为例):
- 添加仓库并安装:sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
- 安装: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 --zone=public --add-port=1433/tcp --permanent & & sudo firewall-cmd --reload
- 安装命令行工具(sqlcmd):
- 添加工具源:sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
- 安装:sudo yum install -y mssql-tools unixODBC-devel
- 环境变量:echo ‘export PATH=$PATH:/opt/mssql-tools/bin’ > > ~/.bash_profile & & source ~/.bash_profile
- 安装 SQL Server(以 CentOS 7 + SQL Server 2019 为例):
- 步骤3 还原数据库(sqlcmd 示例):
- 连接:sqlcmd -S localhost -U SA -P ‘< YourStrong!Passw0rd> ’
- 还原(注意 MOVE 到 Linux 默认数据目录,逻辑文件名可用 RESTORE FILELISTONLY 查看):
- RESTORE DATABASE YourDB FROM DISK = ‘/var/opt/mssql/backup/YourDB.bak’ WITH MOVE ‘YourDB’ TO ‘/var/opt/mssql/data/YourDB.mdf’, MOVE ‘YourDB_Log’ TO ‘/var/opt/mssql/data/YourDB_log.ldf’, STATS = 1, REPLACE, RECOVERY GO
- 步骤4 验证:SELECT name FROM sys.databases; 以及抽样查询校验数据一致性。
三、方案二 仅迁移数据(导入导出向导 SSIS,适合大库分片或选择性迁移)
- 在 Windows 上打开 SQL Server 导入和导出向导(SSIS):
- 数据源:选择源 SQL Server 与数据库;目标:选择目标 Linux 上的 SQL Server(可用 IP 连接,如 192.168.x.x)。
- 选择“从表或视图复制数据”或编写自定义查询,按需映射表结构/数据类型。
- 可保存 SSIS 包到文件系统或 SSIS 目录以便复用与自动化。
- 执行并校验:完成向导后,在目标库对关键表执行行数/聚合校验,确保数据完整一致。
四、方案三 仅迁移对象(生成脚本,适合“空库+结构+静态数据”)
- 使用 SSMS 在源库执行:任务 → 生成脚本,勾选“编写数据库脚本”,选择对象范围(表、视图、存储过程、函数、触发器、用户等),生成 .sql 脚本。
- 在目标 Linux 实例上用 sqlcmd 执行脚本:sqlcmd -S -U SA -P ‘’ -i C:\path\script.sql
- 适合“结构先行、数据后补”的场景;大数据量不建议一次性脚本导入。
五、迁移后验证与常见问题处理
- 版本与兼容级别:
- 确认版本:SELECT @@VERSION;
- 调整兼容级别(示例:SQL Server 2022 为 160):ALTER DATABASE [YourDB] SET COMPATIBILITY_LEVEL = 160;
- 一致性检查:DBCC CHECKDB([YourDB]) WITH NO_INFOMSGS, ALL_ERRORMSGS;
- 连接与网络:
- 远程连接测试:sqlcmd -S < Linux_IP> -U SA -P ‘’
- 若失败,检查防火墙 1433/TCP、SQL Server 是否监听 TCP、SELinux/AppArmor 策略。
- 常见报错与要点:
- 备份还原失败提示找不到逻辑文件名:先执行 RESTORE FILELISTONLY 查看 .bak 中的逻辑名,再在 MOVE 子句中使用正确名称。
- 工具未找到或命令不可用:确认已安装 mssql-tools 并正确设置 PATH。
- 功能不可用:如 SQL Server Agent 在 Linux 上以受限模式提供(部分作业类型不支持),需改造为脚本+T-SQL/外部调度。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何迁移SQL Server到CentOS平台
本文地址: https://pptw.com/jishu/768370.html
