温馨提示×

SQL Server在CentOS上的数据迁移指南

小樊
55
2025-09-18 03:51:29
栏目: 云计算

SQL Server在CentOS上的数据迁移指南

一、迁移前准备

1. 确认环境兼容性

确保源SQL Server与目标CentOS服务器上的SQL Server版本兼容(如SQL Server 2017及以上版本支持跨平台迁移);检查两台服务器之间的网络连接,确保可以通过TCP/IP通信(默认端口1433)。

2. 安装必要工具

在目标CentOS服务器上安装SQL Server客户端工具(如sqlcmdbcp)和ODBC驱动,用于数据迁移和连接:

# 添加Microsoft包仓库
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo
# 安装mssql-tools(包含sqlcmd、bcp)和unixODBC-devel
sudo yum install -y mssql-tools unixODBC-devel
# 配置sqlcmd环境变量(生效当前终端)
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
source ~/.bash_profile

3. 准备目标服务器

安装SQL Server实例(若未安装):

# 安装依赖
sudo yum install -y libatomic
# 添加SQL Server仓库(以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
# 开放防火墙端口
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

二、数据迁移步骤

方法1:备份还原法(适用于完整数据库迁移)

1. 备份源数据库

使用SQL Server Management Studio(SSMS)或T-SQL命令备份数据库:

  • SSMS:右键源数据库→“任务”→“备份”,选择备份路径(如本地磁盘或共享文件夹),格式为.bak
  • T-SQL(在SSMS中执行):
BACKUP DATABASE [YourDatabaseName] 
TO DISK = N'/path/to/source/backup/YourDatabaseName.bak' 
WITH NOFORMAT, NOINIT, NAME = N'YourDatabaseName-Full Backup', STATS = 10;

2. 传输备份文件到目标服务器

使用scp(安全拷贝)将.bak文件从源服务器复制到目标CentOS服务器:

scp /path/to/source/backup/YourDatabaseName.bak user@target_centos_ip:/path/to/target/backup/

3. 还原数据库到目标SQL Server

在目标服务器上使用T-SQL命令还原数据库(需调整文件路径为CentOS下的有效路径):

RESTORE DATABASE [YourDatabaseName] 
FROM DISK = N'/path/to/target/backup/YourDatabaseName.bak' 
WITH FILE = 1, 
MOVE N'YourDatabaseName_Data' TO N'/var/opt/mssql/data/YourDatabaseName.mdf',  -- 数据文件路径
MOVE N'YourDatabaseName_Log' TO N'/var/opt/mssql/data/YourDatabaseName.ldf',    -- 日志文件路径
NOUNLOAD, STATS = 10;

方法2:命令行工具迁移(适用于增量或选择性数据迁移)

1. 使用bcp导出/导入数据

  • 导出数据(从源服务器到CSV文件):
bcp "SELECT * FROM YourDatabaseName.dbo.YourTableName" queryout /path/to/export/YourTableName.csv -c -t, -T -S source_sql_server_ip
  • 导入数据(从CSV文件到目标服务器):
bcp YourDatabaseName.dbo.YourTableName in /path/to/export/YourTableName.csv -c -t, -T -S target_centos_ip

-T表示使用可信连接,若用SQL认证需替换为-U username -P password

2. 使用sqlpackage迁移(适用于结构化数据)

sqlpackage是微软提供的工具,支持将数据库导出为.bacpac文件(包含结构和数据),适用于跨平台迁移:

  • 安装sqlpackage
sudo yum install -y https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum install -y sqlpackage
  • 导出BACPAC文件(从源服务器):
sqlpackage export --server-name source_sql_server_ip --database-name YourDatabaseName --username sa --password YourPassword --output-file /path/to/export/YourDatabaseName.bacpac
  • 导入BACPAC文件(到目标服务器):
sqlpackage import --server-name target_centos_ip --database-name TargetDatabaseName --username sa --password YourPassword --file /path/to/export/YourDatabaseName.bacpac

三、迁移后验证

  1. 检查数据完整性:在目标数据库中执行查询,对比源数据库的记录数(如SELECT COUNT(*) FROM YourTableName)。
  2. 验证应用连接:更新应用程序的连接字符串,指向目标CentOS服务器的SQL Server实例(格式:Server=target_centos_ip,1433;Database=YourDatabaseName;User Id=username;Password=password;),测试应用功能是否正常。
  3. 检查性能:通过SQL Server Profiler或sys.dm_exec_query_stats视图监控查询性能,确保迁移后性能符合预期。

四、注意事项

  • 权限设置:确保目标SQL Server实例的登录账户(如sa或自定义账户)具有足够的权限(如db_owner)执行备份、还原操作。
  • 磁盘空间:目标服务器需预留足够磁盘空间(至少为源数据库大小的1.2倍),避免还原失败。
  • 版本兼容性:若源服务器版本高于目标服务器,需先升级目标服务器版本(如从SQL Server 2019升级到2022),或使用兼容模式还原。
  • 日志文件管理:还原后检查日志文件(.ldf)大小,若过大可通过DBCC SHRINKFILE命令收缩。
  • 错误处理:若还原过程中出现错误(如“文件路径无效”),需修改目标路径为CentOS下的有效目录(如/var/opt/mssql/data/),并确保SQL Server服务账户(mssql)对该目录有读写权限。

0