温馨提示×

CentOS上SQL Server数据库迁移方法

小樊
36
2025-11-08 06:50:22
栏目: 云计算

一、准备工作

  1. 安装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-serversudo systemctl enable mssql-server
    • 开放防火墙1433端口(允许远程连接):sudo firewall-cmd --zone=public --add-port=1433/tcp --permanentsudo firewall-cmd --reload
  2. 安装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:备份还原法(适用于完整数据库迁移)

  1. 源服务器备份数据库
    使用SQL Server Management Studio(SSMS)或T-SQL命令备份源数据库:

    • SSMS操作:右键源数据库→“任务”→“备份”,选择备份路径(如网络共享或U盘),格式为.bak文件。
    • T-SQL命令示例:BACKUP DATABASE [SourceDB] TO DISK = 'NUL' WITH INIT, NAME = 'Full Backup';(需替换为实际路径)
  2. 复制备份文件至目标服务器
    通过SCP、SFTP或网络共享将.bak文件传输至目标CentOS服务器的SQL Server数据目录(默认/var/opt/mssql/data/

  3. 目标服务器还原数据库
    使用SSMS或T-SQL命令还原数据库,需指定逻辑文件的新路径(避免与现有文件冲突):

    • SSMS操作:右键“数据库”→“任务”→“还原”→“数据库”,选择备份文件,点击“选项”→“将数据库文件移动到新位置”,设置新逻辑文件名(如SourceDB_DataNewDB_DataSourceDB_LogNewDB_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表示恢复数据库为可用状态)

方法2:脚本生成法(适用于结构迁移)

  1. 生成数据库脚本
    使用SSMS生成源数据库的结构脚本(表、视图、存储过程等):

    • 右键源数据库→“任务”→“生成脚本”,选择“所有数据库对象”,在“高级”选项中设置“脚本数据”为“True”(若需迁移数据),生成.sql文件
  2. 执行脚本至目标数据库
    在目标服务器上创建新数据库,使用SSMS或sqlcmd工具执行脚本:

    • SSMS操作:右键目标数据库→“新建查询”,粘贴脚本并执行。
    • 命令行操作:sqlcmd -S localhost -U sa -P 'YourPassword' -i /path/to/script.sql

方法3:SSIS数据迁移(适用于大量数据同步)

  1. 创建SSIS项目
    使用SQL Server Data Tools(SSDT)创建Integration Services(SSIS)项目,添加“数据流任务”

  2. 配置数据源与目标

    • 数据源:选择“SQL Server Native Client”,配置源服务器连接(如SourceServersa账号、SourceDB)。
    • 目标:选择“SQL Server Native Client”,配置目标服务器连接(如TargetServer(CentOS IP)、sa账号、TargetDB
  3. 映射表与数据
    在“数据流任务”中添加“OLE DB源”(连接源数据库表)、“OLE DB目标”(连接目标数据库表),拖动箭头连接两者,映射字段(确保字段类型兼容)

  4. 执行SSIS包
    保存并运行SSIS包,完成数据从源到目标的批量迁移

三、迁移后验证

  1. 检查数据库状态
    登录目标服务器,执行SELECT name, state_desc FROM sys.databases WHERE name = 'NewDB';,确认数据库状态为ONLINE

  2. 验证数据一致性
    抽取源数据库与目标数据库的关键表(如SELECT COUNT(*) FROM TableName),对比行数是否一致;或使用DIFF工具对比表数据

  3. 测试应用连接
    使用应用程序或客户端工具(如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法可实现最小停机或零停机。

0