Linux与SQL Server数据迁移步骤
一 迁移方式概览
二 标准步骤流程
sudo /opt/mssql/bin/mssql-conf setup 设置 SA 密码、启动服务并设为开机自启。/opt/mssql-tools/bin 加入 PATH。sqlcmd -S localhost -U SA -P '<YourPassword>' -Q "SELECT @@VERSION"。sudo ufw allow 1433(或 firewalld 对应规则)。sp_spaceused)、对象依赖(存储过程、触发器、用户等),记录 schema 与关键约束,便于迁移后校验。RESTORE DATABASE … WITH MOVE … 指定新数据/日志文件路径并上线。bcp … in 批量导入,必要时用 -F 2 跳过表头、用 -e 记录错误。Server=ubuntu_ip;Database=YourDB;User Id=sa;Password=…),回归 CRUD 与性能测试,必要时优化索引/统计信息。三 常用命令示例
sqlcmd -S localhost -U SA -P '<YourPassword>' \
-Q "BACKUP DATABASE [MyDB] TO DISK = N'/var/opt/mssql/backup/MyDB.bak' WITH INIT, STATS = 10"
scp username@source_server:/path/MyDB.bak /home/ubuntu/backup/
sqlcmd -S localhost -U SA -P '<YourPassword>' -Q "
RESTORE DATABASE [MyDB_New]
FROM DISK = N'/home/ubuntu/backup/MyDB.bak'
WITH
MOVE 'MyDB_Data' TO N'/var/opt/mssql/data/MyDB_New.mdf',
MOVE 'MyDB_Log' TO N'/var/opt/mssql/data/MyDB_New_log.ldf',
STATS = 10, REPLACE, RECOVERY"
# 导出
bcp MyDB.dbo.MyTable out /home/ubuntu/export/MyTable.csv -c -t, -S localhost -U SA -P '<YourPassword>'
# 导入(有表头时跳过首行)
bcp MyDB_New.dbo.MyTable in /home/ubuntu/export/MyTable.csv -c -t, -S localhost -U SA -P '<YourPassword>' -e /home/ubuntu/export/error.log -F 2
sqlcmd -S localhost -U SA -P '<YourPassword>' -Q "SELECT @@VERSION"
以上命令覆盖了 备份/还原、bcp 与 连通性验证 的高频用法,可按实际路径、逻辑文件名与分隔符调整。
四 常见问题与排查
.bak、.csv 与目标 /var/opt/mssql/data 需存在且 mssql 用户可写;RESTORE … WITH MOVE 中的逻辑文件名必须与原库一致。sudo /opt/mssql/bin/mssql-conf set network.tcpport 1433 固定端口并重启服务。五 方法选择建议