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),并进行性能基准测试(如执行常用查询对比迁移前后耗时)。