Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login

    Create temporary Table ENGINE ändern

    Scheduled Pinned Locked Moved Entwicklung
    mysqltemporary tablemyisam
    3 Posts 2 Posters 683 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • SMOS Offline
      SMO
      last edited by SMO

      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.

      1 Reply Last reply Reply Quote 0
      • bheisigB Offline
        bheisig i-doit Team
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • SMOS Offline
          SMO
          last edited by

          @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.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post