Sql-Server

可以選擇但不能從 SQL Server 插入到 MySQL

  • October 26, 2017

我在將數據從 SQL Server 插入 MySQL 時遇到問題。我看到了幫助其他人的這種語法:

EXEC master.dbo.sp_addlinkedserver @server='MYSQL', @srvproduct='MySQL',
@provider='MSDASQL', @provstr='DRIVER={MySQL ODBC 5.1
Driver};SERVER=HOST;Port=3306;USER=uid;PASSWORD=pw;OPTION=3;DATABASE=mydb;

但錯誤仍然是:

連結伺服器“MYSQL1”的 OLE DB 提供程序“MSDASQL”返回消息“

$$ MySQL $$$$ ODBC 5.1 Driver $$$$ mysqld-5.5.44-MariaDB-log $$無法執行語句:由於 BINLOG_FORMAT = STATEMENT 並且至少一個表使用僅限於基於行的日誌記錄的儲存引擎,因此無法寫入二進制日誌。當事務隔離級別為 READ COMMITTED 或 READ UNCOMMITTED 時,InnoDB 僅限於行日誌記錄。”。 消息 7343,第 16 層,狀態 2,第 1 行

連結伺服器“MYSQL1”的 OLE DB 提供程序“MSDASQL”無法 INSERT INTO 表“

$$ MSDASQL $$”。

它在這裡說BINLOG_FORMAT等於,STATEMENT但是當我檢查它時,它設置為MIXED

找到了解決方案,他們說BINLOG_FORMAT必須是ROW,但是我對編輯有疑問或困難,my.cnf因為我不知道如果我將 binlog 格式從混合更改為行會發生什麼。

我該如何解決這個問題?

找到了解決方案,他們說BINLOG_FORMAT必須是“ROW”,但我對在 my.cnf 中編輯有疑問或困難,因為我不知道如果我將 binlog 格式從混合更改為會發生什麼排。

試試吧。如果 MySQL 會吃掉你的數據,它不會關心那個選項——不管你的配置如何,它都會向前推進。BINLOG_FORMAT明確地說

如果您使用 InnoDB 表並且事務隔離級別為READ COMMITTEDor READ UNCOMMITTED,則只能使用基於行的日誌記錄。可以將日誌記錄格式更改為STATEMENT,但在執行時這樣做會很快導致錯誤,因為 InnoDB 不能再執行插入。

這意味著您有兩個選擇,要麼使用預設隔離級別REPEATABLE READ要麼設置選項。

附帶說明一下,MySQL 隔離級別非常無聊,並且可能無論如何都不會做你想做的事

引用自:https://dba.stackexchange.com/questions/189250