Ankündigung

Einklappen
Keine Ankündigung bisher.

Einlesen eines mysqldump setzt data_type falsch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Einlesen eines mysqldump setzt data_type falsch

    Ich musste ein mysqldump *.sql database backup file in eine neue database einlesen. Dabei stellte ich fest, dass irgendwann vorher Daten verloren gingen. Bei was genau weiß ich nicht mehr, es war vor einer Woche. In letzter Zeit habe ich viel an der Datenbank optimiert, ein Altbestand. Neu strukturiert und weiß der Geier nicht alles. Einerseits per PHP Daten von einer in die andere, andererseits mit phpMyAdmin, je nachdem. Die Daten gingen wohl verloren, weil:
    Im Dump ist das in der betreffenden column eingetragen:
    Code:
    `column` mediumtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
    Nach dem Einlesen des Dumps:
    SHOW FIELDS FROM database;
    Code:
    +------------+------------------+------+-----+---------+----------------+
    | Field      | Type             | Null | Key | Default | Extra          |
    +------------+------------------+------+-----+---------+----------------+
    | column     | text             | YES  |     | NULL    |                |
    +------------+------------------+------+-----+---------+----------------+
    Die column ist schon einige Zeit länger "mediumtext".
    Nach dem Einlesen ist die column nur "text" und lange texte sind nicht abgeschnitten. Mit einer manuellen Umstellung per phpMyAdmin ist die Sache schnell gefixt, jetzt nachdem ich davon weiß. Die Daten gingen wohl verloren, als aus einer ebenso angelegten neuen database mit nur "text" in der betreffenden column ein weiterer Dump angelegt wurde, in dem dann lange Texte abgeschnitten wurden. Es besteht aktuell das Problem, dass beim Einlesen eines Dumps mit
    Code:
    `column` mediumtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
    diese column nur als "text" angelegt wird. Woran kann das liegen und was kann man dagegen tun?

    Folgende Befehle wurden/werden verwendet:
    Code:
    mysqldump database_name > 20200606-database-name.sql
    mysql database_name < 20200606-database-name.sql
    mysqldump database_name | mysql database_name_new
    mysql Ver 15.1 Distrib 10.3.22-MariaDB, for Linux (x86_64) using readline 5.1
    mysqldump Ver 10.17 Distrib 10.3.22-MariaDB, for Linux (x86_64)

  • #2
    Verwende halt nicht phpMyAdmin. Es soll ja noch andere Clients geben und dann wäre da noch die CLI.
    text ist übrigens grösser als mediumtext, du kannst das also so belassen ohne Nachteile zu haben.

    Kommentar


    • #3
      Zitat von protestix Beitrag anzeigen
      text ist übrigens grösser als mediumtext
      Woher hast du die Info? Ich kenne nur die folgende und das passte auch, weil mir damals TEXT zu klein war und mit MEDIUMTEXT passte es dann.
      Code:
            Type | Maximum length
      -----------+-------------------------------------
        TINYTEXT |           255 (2 8−1) bytes
            TEXT |        65,535 (216−1) bytes = 64 KiB
      MEDIUMTEXT |    16,777,215 (224−1) bytes = 16 MiB
        LONGTEXT | 4,294,967,295 (232−1) bytes =  4 GiB

      Kommentar


      • #4
        ja hast recht, da habe ich mich vertan.

        Kommentar


        • #5
          Zitat von psoido Beitrag anzeigen
          Woran kann das liegen und was kann man dagegen tun?
          Fehler eingrenzen. Jeden Step in dem Prozess einzeln Abklopfen.

          Z.B.
          -mit phpmyadmin ein Tabelle anlegen die das Problem nachstellt
          -Tabelle exportieren (show create table ...)
          -Tabelle löschen
          -Tabelle mit dem create statment neu anlegen
          -Tabelle löschen
          -Tabelle mit dem create statment über den mysql client neu anlegen (create statemnt in eine textdatei und dann mit mysql zieldatenbank < create_statment.sql importieren)
          -Tabelle mit mysqldump exportieren
          -usw...

          Entweder kannst danach mit den Finger auf das Problem zeigen, oder du weißt, dass das Problem wo anders liegt.


          Kommentar


          • #6
            Nachdem der SQL-Code unbekannt ist, kann man höchstens raten. In der Regel ist das nicht sonderlich zielführend.

            Ich versteh auch die Frage nicht ganz. Wer hat denn die Spalte mit dem Typ TEXT angelegt? Frag denjenigen, warum er das so gemacht hat. Von alleine passiert das ja nicht.

            Durch ein Exportieren und Importieren ändert sich der Spaltentyp jedenfalls nicht:
            Code:
            c:\xampp\mysql\bin>mysql -u root
            Welcome to the MariaDB monitor.  Commands end with ; or \g.
            Your MariaDB connection id is 32
            Server version: 10.4.11-MariaDB mariadb.org binary distribution
            
            Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
            
            Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
            
            MariaDB [(none)]> CREATE DATABASE foobar;
            Query OK, 1 row affected (0.006 sec)
            
            MariaDB [(none)]> USE foobar;
            Database changed
            MariaDB [foobar]> CREATE TABLE test (
                ->     `column` MEDIUMTEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL
                -> );
            Query OK, 0 rows affected (0.040 sec)
            
            MariaDB [foobar]> SHOW FIELDS FROM test;
            +--------+------------+------+-----+---------+-------+
            | Field  | Type       | Null | Key | Default | Extra |
            +--------+------------+------+-----+---------+-------+
            | column | mediumtext | YES  |     | NULL    |       |
            +--------+------------+------+-----+---------+-------+
            1 row in set (0.027 sec)
            
            MariaDB [foobar]> EXIT;
            Bye
            
            c:\xampp\mysql\bin>mysqldump foobar > foobar.sql -u root
            
            c:\xampp\mysql\bin>mysql -u root
            Welcome to the MariaDB monitor.  Commands end with ; or \g.
            Your MariaDB connection id is 39
            Server version: 10.4.11-MariaDB mariadb.org binary distribution
            
            Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
            
            Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
            
            MariaDB [(none)]> USE foobar;
            Database changed
            MariaDB [foobar]> DROP TABLE test;
            Query OK, 0 rows affected (0.010 sec)
            
            MariaDB [foobar]> EXIT;
            Bye
            
            c:\xampp\mysql\bin>mysql -u root foobar < foobar.sql
            
            c:\xampp\mysql\bin>mysql -u root
            Welcome to the MariaDB monitor.  Commands end with ; or \g.
            Your MariaDB connection id is 41
            Server version: 10.4.11-MariaDB mariadb.org binary distribution
            
            Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
            
            Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
            
            MariaDB [(none)]> USE foobar;
            Database changed
            MariaDB [foobar]> SHOW FIELDS FROM test;
            +--------+------------+------+-----+---------+-------+
            | Field  | Type       | Null | Key | Default | Extra |
            +--------+------------+------+-----+---------+-------+
            | column | mediumtext | YES  |     | NULL    |       |
            +--------+------------+------+-----+---------+-------+
            1 row in set (0.017 sec)
            Und hier die erzeugte SQL-Datei:
            Code:
            -- MariaDB dump 10.17  Distrib 10.4.11-MariaDB, for Win64 (AMD64)
            --
            -- Host: localhost    Database: foobar
            -- ------------------------------------------------------
            -- Server version    10.4.11-MariaDB
            
            /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
            /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
            /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
            /*!40101 SET NAMES utf8mb4 */;
            /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
            /*!40103 SET TIME_ZONE='+00:00' */;
            /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
            /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
            /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
            /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
            
            --
            -- Table structure for table `test`
            --
            
            DROP TABLE IF EXISTS `test`;
            /*!40101 SET @saved_cs_client     = @@character_set_client */;
            /*!40101 SET character_set_client = utf8 */;
            CREATE TABLE `test` (
              `column` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
            /*!40101 SET character_set_client = @saved_cs_client */;
            
            --
            -- Dumping data for table `test`
            --
            
            LOCK TABLES `test` WRITE;
            /*!40000 ALTER TABLE `test` DISABLE KEYS */;
            /*!40000 ALTER TABLE `test` ENABLE KEYS */;
            UNLOCK TABLES;
            /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
            
            /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
            /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
            /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
            /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
            /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
            /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
            /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
            
            -- Dump completed on 2020-06-09 13:02:07

            Kommentar

            Lädt...
            X