Ubuntu与SQL Server数据同步方法
适用场景:一次性数据迁移(如从Windows SQL Server迁移到Ubuntu SQL Server)、简单数据同步。
核心步骤:
sqlcmd创建完整备份(.bak文件)。例如,通过SSMS右键数据库→“任务”→“备份”,选择“完全”备份类型并指定路径。.bak文件从Windows传输到Ubuntu服务器(如scp backup.bak user@ubuntu_ip:/path/to/ubuntu)。sudo apt-get install mssql-tools unixodbc-dev。sqlcmd执行还原命令,注意调整逻辑文件名和路径(需匹配Ubuntu文件系统):sqlcmd -S localhost -U sa -Q "RESTORE DATABASE [YourDB] FROM DISK='/path/to/backup.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"
注意事项:备份前需停止源数据库写入(避免数据不一致);还原后需验证数据完整性(如检查表记录数)。
适用场景:需要实时或定时同步的结构化数据(如订单、库存表),支持单向/双向同步。
核心步骤:
sqlcmd创建发布者数据库和发布项(如表),选择“日志读取器”代理(logbased)捕获变更:EXEC sp_addpublication @publication = 'MyPub', @description = 'Real-time sync', @repl_freq = 'continuous';
EXEC sp_addarticle @publication = 'MyPub', @article = 'Orders', @source_object = 'dbo.Orders', @type = 'logbased';
EXEC sp_addsubscriber @publication = 'MyPub', @subscriber = 'ubuntu_server', @destination_db = 'YourDB',
@subscription_type = 'Push', @sync_type = 'automatic';
EXEC sp_startpublication_snapshot @publication = 'MyPub'。sudo systemctl start mssql-agent);发布者与订阅者需保持网络连通;复杂表结构(如触发器、外键)需提前测试。适用场景:无需编写代码、需要图形化界面或高级功能(如断点续传、定时同步、多数据库支持)。
常用工具及配置:
/var/opt/mssql/data)→设置同步方向(双向/单向)→运行unison命令。适用场景:需要复杂数据转换(如ETL流程)、自动化调度的大规模数据同步。
核心步骤:
适用场景:超大型表(如百万级记录)的快速迁移,适合批量插入/导出。
核心步骤:
bcp命令将表数据导出为文本文件(如CSV):bcp "SELECT * FROM YourDB.dbo.Orders" queryout "orders.csv" -c -t, -S windows_server -U sa -P YourPassword
orders.csv传输到Ubuntu服务器。bcp命令将数据导入目标表:bcp YourDB.dbo.Orders in "orders.csv" -c -t, -S localhost -U sa -P YourPassword -e error.log
注意事项:bcp适合无格式文本数据,需提前创建目标表;大数据量时可通过-F(起始行)和-L(结束行)参数分批导入;需处理字符编码问题(如UTF-8)。