Create temporary Table ENGINE ändern
-
Hallo zusammen,
produktiv setzen wir i-doit Pro ein. Zum testen habe ich mir Docker-Images mit i-doit Open erstellt. Das nur nebenbei.
Aktuell bereite ich den Umzug der i-doit DB auf eine neue MySQL DB vor. Auf dieser neuen MySQL DB setzen wir die neue GTID (General Transaktion ID) Replikation ein (https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html). Aus diesem Grund ist die Storage Engine MyISAM deaktiviert.
Das hat zur Folge, das CREATE TEMPORARY TABLE Statements fehlschlagen, weil bei diesen explizit ENGINE=MyISAM angegeben ist. Z.B. wenn man sich einen Server in der CMDB anzeigen lässt.
Fehlermeldung:Database error : Query error: 'CREATE TEMPORARY TABLE tempObjList_05ad75a0e6960bb978e617801ecb5b68 (`isys_catg_access_list__title` TEXT,`isys_access_type__title` TEXT,`isys_catg_access_list__url` TEXT,`isys_catg_access_list__primary` TEXT,`isys_catg_access_list__id` INT(10),`isys_id` TEXT) ENGINE=MyISAM;': Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions.
Müssen diese Temporary Tables unbedingt auf der Platte gespeichert werden? Können diese nicht mit ENGINE=MEMORY angelegt werden? Falls Temp Tables unbedingt manifestiert werden müssen, kann man die MySQL Storage Engine dafür konfigurieren?
BTW: in MySQL ist internal_tmp_disk_storage_engine per Default auf InnoDB gesetzt. -
Hi,
danke für den Hinweis. Ich habe bei unseren Entwicklern nachgehakt und die Antwort bekommen, dass wir für i-doit die Datentypen Text und Blob benötigen und daher bei temporären Tabellen auf MyISAM setzen. Ein möglicher Workaround wäre, die Einstellung "enforce_gtid_consistency" auf "Off" oder "Warn" zu setzen. Das allerdings ohne Gewähr unsererseits. Klappt's?
Viele Grüße
Benjamin -
@bheisig said in Create temporary Table ENGINE ändern:
Ein möglicher Workaround wäre, die Einstellung "enforce_gtid_consistency" auf "Off" oder "Warn" zu setzen. Das allerdings ohne Gewähr unsererseits. Klappt's?
Hallo Benjamin,
danke das Du nachgefragt hast. Da wir aber die GTID basierte Replikation verwenden, ist das leider keine Option. Siehe offizielle MySQL Doku: https://dev.mysql.com/doc/refman/5.7/en/replication-options-gtids.html
dort steht:When enabled, the server enforces GTID consistency by allowing execution of only statements that can be safely logged using a GTID. You must set this option to ON before enabling GTID based replication.