我應該關閉 GTID 來修復此錯誤嗎?
最近,一個查詢開始失敗。重新索引目錄搜尋是 Magento 軟體核心(不是模組)中的一個查詢。我收到以下錯誤。
目錄搜尋索引索引處理未知錯誤:異常 ‘PDOException’ 和消息 ‘SQLSTATE
$$ HY000 $$:一般錯誤:1785 當@@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1 時,對非事務表的更新只能在自動送出的語句或單語句事務中完成,並且永遠不能在與事務表更新相同的語句中完成。在 /var/www/magento-20171012/mage-webroot/lib/Zend/Db/Statement/Pdo.php:228
我正在執行 MySQL 5.6.35 根據
SELECT VERSION();
.該文件聲稱 _ 是在 MySQL 5.6.9 中引入的。
此 MySQL 文件聲稱“拓撲中的所有伺服器都必須使用 MySQL 5.7.6 或更高版本。除非拓撲中的所有伺服器都使用此版本,否則您不能在任何單個伺服器上線上禁用 GTID 事務。”
我在 my.cnf 中沒有看到 gtid_mode 並
SELECT @@GLOBAL.GTID_MODE;
給了我ON
.根據文件,我不確定GTID 到底是什麼。聽起來它用於復製或主/從設置。我沒有設置主/從設置,除了備份到 sql 文件之外,我不進行複制,我認為這不是複制的意思。
跑步
SELECT @@GLOBAL.GTID_MODE;
給了我ON
。是否正在執行SET @@GLOBAL.GTID_MODE = OFF;
我需要做的所有事情來禁用 GTID 並解決此問題?我已經在我的開發人員中完成了此操作(未顯示問題)並且沒有任何問題,但我想在將其應用於生產之前獲得建議而不了解後果。禁用 GTID 意味著什麼?它會解決我從數據庫收到的這個錯誤嗎?
**簡短回答:**是的,如果您不從該伺服器複製,則可以毫無風險地禁用 GTID。
長答案:
GTID 是“在源伺服器(主伺服器)上創建並與送出的每個事務相關聯的唯一標識符”。當您有一些奴隸時,這會有所幫助;因此您可以隨時跟踪您的從屬設備(哪些語句已複製,從哪個伺服器複製,以及一些進一步的資訊;但如果您將伺服器用作獨立伺服器,應該沒有問題,您將不會使用您的二進制日誌。
您應該查找所有 cnf 文件(可能在 /usr…),應該有一個配置 gtid,因為它預設禁用(https://dev.mysql.com/doc/refman/5.6/en/複製選項-gtids.html#sysvar_enforce_gtid_consistency);找到它很重要,這樣如果有一天您的數據庫重新啟動,您就不會遇到問題;否則它將再次打開。
要禁用它,您需要重新啟動;您找到的在不重新啟動的情況下禁用它的連結適用於 MySQL 5.7 及更高版本。
最後,禁用它對您意味著什麼,您將擁有沒有明確“標識符”的二進制日誌,但您仍將擁有您的二進制日誌以備不時之需。