Linkedserver 连接到 MySQL 数据库的 ODBC 驱动程序连接问题

问题描述 投票:0回答:1

我已经设置了 SQL Server 2016 linkedserver 来连接到 MySQL 8 实例,并创建了存储过程,使用开放查询将数据从 SQL Server 数据库插入到 MySQL 数据库,当我调用该过程时它工作正常,它将记录插入到 MySQL。但是,当我创建多个将数据插入 MySQL 的过程并立即调用所有过程时,它会失败。

我正在使用 Windows Server 2016 VM 和 Google Cloud Managed MySQL 实例以及 ODBC unicode 驱动程序 8.4

示例: 当我像下面这样单独调用一个过程时,它会起作用。

EXEC insert_data_db1 @p = 1;

我有另一个具有多个子过程的程序,当我调用此具有多个子过程的过程时,它失败并显示以下错误消息。

EXEC insert_data_db1 @p = 1;
EXEC insert_data_db2 @p = 2;
EXEC insert_data_db3 @p = 3;

每个过程都有多个像这样的插入语句;

INSERT INTO OPENQUERY([server],'SELECT  id, name, state_date, created_at, updated_at, created_byFROM `Db1`.table1')
SELECT  id, name, state_date, created_at, updated_at, created_by FROM source a

错误;

链接服务器“LinkedServer”的 OLE DB 提供程序“MSDASQL”返回消息“[MySQL][ODBC 8(w) 驱动程序]无法连接到‘ip:port’(10060) 上的 MySQL 服务器”。

需要帮助,可能是什么问题?

mysql sql-server odbc google-cloud-sql linked-server
1个回答
0
投票

所以你是说当你只运行存储过程一次时它可以工作,但当你同时并行运行它的多个实例时它会失败。

您是在 Management Studio 中执行此操作吗?

可能不太可能,但是链接服务器连接只是单线程的,所以如果一个线程已经被占用,也许其余的会被拒绝?

您可以尝试将其分解为步骤,以便 SSMS 按顺序单独执行它们:

EXEC insert_data_db1 @p = 1;
GO
EXEC insert_data_db2 @p = 2;
GO
EXEC insert_data_db3 @p = 3;
© www.soinside.com 2019 - 2024. All rights reserved.