确保源SQL Server与目标CentOS服务器上的SQL Server版本兼容(如SQL Server 2017及以上版本支持跨平台迁移);检查两台服务器之间的网络连接,确保可以通过TCP/IP通信(默认端口1433)。
在目标CentOS服务器上安装SQL Server客户端工具(如sqlcmd、bcp)和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
安装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
使用SQL Server Management Studio(SSMS)或T-SQL命令备份数据库:
.bak。BACKUP DATABASE [YourDatabaseName]
TO DISK = N'/path/to/source/backup/YourDatabaseName.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDatabaseName-Full Backup', STATS = 10;
使用scp(安全拷贝)将.bak文件从源服务器复制到目标CentOS服务器:
scp /path/to/source/backup/YourDatabaseName.bak user@target_centos_ip:/path/to/target/backup/
在目标服务器上使用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;
bcp导出/导入数据bcp "SELECT * FROM YourDatabaseName.dbo.YourTableName" queryout /path/to/export/YourTableName.csv -c -t, -T -S source_sql_server_ip
bcp YourDatabaseName.dbo.YourTableName in /path/to/export/YourTableName.csv -c -t, -T -S target_centos_ip
(-T表示使用可信连接,若用SQL认证需替换为-U username -P password)
sqlpackage迁移(适用于结构化数据)sqlpackage是微软提供的工具,支持将数据库导出为.bacpac文件(包含结构和数据),适用于跨平台迁移:
sudo yum install -y https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum install -y sqlpackage
sqlpackage export --server-name source_sql_server_ip --database-name YourDatabaseName --username sa --password YourPassword --output-file /path/to/export/YourDatabaseName.bacpac
sqlpackage import --server-name target_centos_ip --database-name TargetDatabaseName --username sa --password YourPassword --file /path/to/export/YourDatabaseName.bacpac
SELECT COUNT(*) FROM YourTableName)。Server=target_centos_ip,1433;Database=YourDatabaseName;User Id=username;Password=password;),测试应用功能是否正常。sys.dm_exec_query_stats视图监控查询性能,确保迁移后性能符合预期。sa或自定义账户)具有足够的权限(如db_owner)执行备份、还原操作。.ldf)大小,若过大可通过DBCC SHRINKFILE命令收缩。/var/opt/mssql/data/),并确保SQL Server服务账户(mssql)对该目录有读写权限。