一、准备工作
-
安装SQL Server实例
在CentOS目标服务器上安装SQL Server(若未安装),步骤如下:- 添加SQL Server官方YUM仓库(以2022版为例):
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo - 安装SQL Server包:
sudo yum install -y mssql-server - 配置实例(设置SA密码、排序规则等):
sudo /opt/mssql/bin/mssql-conf setup - 启动服务并设置开机自启:
sudo systemctl start mssql-server、sudo systemctl enable mssql-server - 开放防火墙1433端口(允许远程连接):
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent、sudo firewall-cmd --reload
- 添加SQL Server官方YUM仓库(以2022版为例):
-
安装mssql-tools工具包
用于执行命令行数据库操作(如还原),步骤如下:- 添加工具包仓库:
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo - 安装mssql-tools及依赖:
sudo yum install -y mssql-tools unixODBC-devel - 配置环境变量(将工具路径加入PATH):
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile,执行source ~/.bash_profile使配置生效
- 添加工具包仓库:
二、数据库迁移步骤
方法1:备份还原法(适用于完整数据库迁移)
-
源服务器备份数据库
使用SQL Server Management Studio(SSMS)或T-SQL命令备份源数据库:- SSMS操作:右键源数据库→“任务”→“备份”,选择备份路径(如网络共享或U盘),格式为
.bak文件。 - T-SQL命令示例:
BACKUP DATABASE [SourceDB] TO DISK = 'NUL' WITH INIT, NAME = 'Full Backup';(需替换为实际路径)
- SSMS操作:右键源数据库→“任务”→“备份”,选择备份路径(如网络共享或U盘),格式为
-
复制备份文件至目标服务器
通过SCP、SFTP或网络共享将.bak文件传输至目标CentOS服务器的SQL Server数据目录(默认/var/opt/mssql/data/) -
目标服务器还原数据库
使用SSMS或T-SQL命令还原数据库,需指定逻辑文件的新路径(避免与现有文件冲突):- SSMS操作:右键“数据库”→“任务”→“还原”→“数据库”,选择备份文件,点击“选项”→“将数据库文件移动到新位置”,设置新逻辑文件名(如
SourceDB_Data→NewDB_Data、SourceDB_Log→NewDB_Log)和物理路径(如/var/opt/mssql/data/NewDB.mdf、/var/opt/mssql/data/NewDB_log.ldf)。 - T-SQL命令示例:
(RESTORE DATABASE [NewDB] FROM DISK = '/var/opt/mssql/data/SourceDB.bak' WITH MOVE 'SourceDB_Data' TO '/var/opt/mssql/data/NewDB.mdf', MOVE 'SourceDB_Log' TO '/var/opt/mssql/data/NewDB_log.ldf', STATS = 1, REPLACE, RECOVERY;REPLACE表示覆盖同名数据库,RECOVERY表示恢复数据库为可用状态)
- SSMS操作:右键“数据库”→“任务”→“还原”→“数据库”,选择备份文件,点击“选项”→“将数据库文件移动到新位置”,设置新逻辑文件名(如
方法2:脚本生成法(适用于结构迁移)
-
生成数据库脚本
使用SSMS生成源数据库的结构脚本(表、视图、存储过程等):- 右键源数据库→“任务”→“生成脚本”,选择“所有数据库对象”,在“高级”选项中设置“脚本数据”为“True”(若需迁移数据),生成
.sql文件
- 右键源数据库→“任务”→“生成脚本”,选择“所有数据库对象”,在“高级”选项中设置“脚本数据”为“True”(若需迁移数据),生成
-
执行脚本至目标数据库
在目标服务器上创建新数据库,使用SSMS或sqlcmd工具执行脚本:- SSMS操作:右键目标数据库→“新建查询”,粘贴脚本并执行。
- 命令行操作:
sqlcmd -S localhost -U sa -P 'YourPassword' -i /path/to/script.sql
方法3:SSIS数据迁移(适用于大量数据同步)
-
创建SSIS项目
使用SQL Server Data Tools(SSDT)创建Integration Services(SSIS)项目,添加“数据流任务” -
配置数据源与目标
- 数据源:选择“SQL Server Native Client”,配置源服务器连接(如
SourceServer、sa账号、SourceDB)。 - 目标:选择“SQL Server Native Client”,配置目标服务器连接(如
TargetServer(CentOS IP)、sa账号、TargetDB)
- 数据源:选择“SQL Server Native Client”,配置源服务器连接(如
-
映射表与数据
在“数据流任务”中添加“OLE DB源”(连接源数据库表)、“OLE DB目标”(连接目标数据库表),拖动箭头连接两者,映射字段(确保字段类型兼容) -
执行SSIS包
保存并运行SSIS包,完成数据从源到目标的批量迁移
三、迁移后验证
-
检查数据库状态
登录目标服务器,执行SELECT name, state_desc FROM sys.databases WHERE name = 'NewDB';,确认数据库状态为ONLINE -
验证数据一致性
抽取源数据库与目标数据库的关键表(如SELECT COUNT(*) FROM TableName),对比行数是否一致;或使用DIFF工具对比表数据 -
测试应用连接
使用应用程序或客户端工具(如SSMS、Navicat)连接目标服务器的SQL Server实例,执行常规操作(如查询、插入),确认功能正常
四、注意事项
- 版本兼容性:确保目标CentOS上的SQL Server版本不低于源服务器版本(如源为2017版,目标可为2019或2022版),避免功能缺失。
- 权限设置:目标数据库的逻辑文件路径(如
/var/opt/mssql/data/)需对mssql用户(SQL Server运行账号)有读写权限(chown -R mssql:mssql /var/opt/mssql/data/NewDB*)。 - 停机时间:备份还原法需停机(源数据库备份时不可写入),建议在业务低峰期操作;脚本生成法与SSIS法可实现最小停机或零停机。