Ubuntu环境下SQL Server数据库迁移实用技巧
在启动迁移前,需完成以下关键准备:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
注册密钥,sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/mssql-server-2022 main"
添加仓库,sudo apt-get install -y mssql-server
安装);sqlcmd
和mssql-tools
(sudo apt-get install -y mssql-tools unixodbc-dev
,并将/opt/mssql-tools/bin
添加至PATH
环境变量);sqlcmd
在源SQL Server(Windows或其他Ubuntu实例)上创建完整备份(命令示例:BACKUP DATABASE [YourDB] TO DISK = 'C:\backup\YourDB.bak' WITH INIT
)。步骤详解:
YourDB.bak
)从源服务器复制到Ubuntu目标服务器的目标目录(如/tmp
);sqlcmd
执行还原命令,需指定数据文件(.mdf
)和日志文件(.ldf
)的新路径(Ubuntu下默认路径为/var/opt/mssql/data/
)。示例命令:RESTORE DATABASE [YourDB] FROM DISK = '/tmp/YourDB.bak' WITH MOVE 'YourDB_Data' TO '/var/opt/mssql/data/YourDB.mdf', MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf', REPLACE, RECOVERY;
REPLACE
:覆盖目标服务器中同名数据库;RECOVERY
:将数据库恢复至可用状态(若需进一步恢复事务日志,可替换为NORECOVERY
)。对于包含大量数据(如百万级行)的表,bcp
(Bulk Copy Program)是高效的选择:
bcp
导出表数据至CSV文件(命令示例:bcp YourDB.dbo.YourTable out /tmp/YourTable.csv -c -t, -T -S source_server
);bcp
导入数据(命令示例:bcp YourDB.dbo.YourTable in /tmp/YourTable.csv -c -t, -T -S localhost
)。 -c
:使用字符数据类型;-t,
:字段分隔符为逗号;-T
:使用可信连接(Windows认证);若为SQL Server认证,替换为-U sa -P YourPassword
。sqlines -s=MYSQL -t=SQLSERVER -i=input.sql -o=output.sql
),或使用GUI工具可视化操作。sudo ufw allow 1433
);使用强密码保护sa
账户,避免未授权访问;/var/opt/mssql/data/
)需对SQL Server服务账户(mssql
)有读写权限(sudo chown -R mssql:mssql /var/opt/mssql/data/
);sqlcmd
检查数据库状态(SELECT name, state_desc FROM sys.databases WHERE name = 'YourDB'
)、数据完整性(如SELECT COUNT(*) FROM YourTable
),并进行性能基准测试(如执行常用查询对比迁移前后耗时)。