IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

Mysql 5.7.14 : corruption du métamodèle


Sujet :

Administration MySQL

  1. #1
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut Mysql 5.7.14 : corruption du métamodèle
    Je viens tout juste d'installer MySQL 5.7.14 sur RedHat

    Tout semblait fonctionner à merveille, mais une erreur dans le log a attiré mon attention :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2017-01-03T14:37:27.171500Z 2 [Warning] InnoDB: Cannot open table mysql/slave_master_info from the internal data dictionary of InnoDB though the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
    rien de bien probant dans l'URL donnée...

    J'ai alors tenté de tester toutes les tables de la base MySQL et je me retrouve avec un nombre conséquent de tables ayant le même problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    +---------------------------+
    | Tables_in_mysql           |
    +---------------------------+
    | engine_cost               |
    | gtid_executed             |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | innodb_index_stats        |
    | innodb_table_stats        |
    | plugin                    |
    | procs_priv                |
    | server_cost               |
    | servers                   |
    | slave_master_info         |
    | slave_relay_log_info      |  
    | slave_worker_info         |
    | slow_log                  |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    Les tables sont stockées en Innodb
    Sur le disque, les fichiers .ibd et .frm sont présents, avec les bons droits et au bon endroit
    Si l'on essaie de supprimer ces tables, erreur 1146 (42S02): Table 'mysql.nomdemaTable' doesn't exist, mas le .frm est supprimé malgré tout
    Si un supprime (ou renomme) ensuite le fichier .ibd sur le disque, la recréation de la table est possible via script... mais on se retrouve alors avec des tables vides, ce qui n'est pas idéal pour un métamodèle

    Comment retrouver un environnement sain ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Au pire, il vaudrait mieux recréer la base mysql... mais comment faire depuis une version 5.7.14 où mysql_install_db est déprécié ?
    et ou un mysqld --initialize nécessite de nettoyer l'existant ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Bon ! Partant d'une 5.7.17 de Windows, j'ai récupéré la quasi-totalité des tables corrompues.

    Me reste juste à trouver les scripts permettant de recréer et remplir

    - mysql.server_cost
    - mysql.gtid_executed
    - mysql.engine_cost

    Quelqu'un aurait-il un dump de ces tables ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Ok. Sans solution probante, je me suis résolu à exporter la base de prod et recréer l'instance
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous

    Citation Envoyé par fadace
    Comment retrouver un environnement sain ?
    Comme vous venez d'installer une nouvelle version MySQl 5.7.14, cela ne pose aucun problème car vous n'avez aucun existant.
    --> Soit vous réinstallez la version, en dézippant le fichier compressé, et réinstaller le fichier my.ini au bon endroit, doit ce faire en 15 secondes chrono.
    --> Soit vous supprimer le répertoire "/data" et vous déclenchez une récréation de celui-ci en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
     
    set PATH=.;F:\Wamp\bin\mysql\mysql5.7.14\bin;
     
    mysqld  --initialize-insecure  --log-error-verbosity=3  --log-error=f:/Wamp/logs/mysql_error.log
     
    pause
    exit
    Le problème avec cette façon de faire est que la méthode est un peu trop radicale et pose un gros problème si vous avez déjà un existant.

    Autre façon de faire est de dézipper la même version, mais sous un autre nom, de faire un export de vos tables posant problèmes.
    Puis dans votre version, supprimer les tables, et faire ensuite un import.
    J'ai déjà fait ce genre de manipulation sur les tables "slave" qui, sans bien savoir pourquoi dans mon environnement avait comme moteur "MyIsam".
    J'ai créé pour cela un didacticiel que voici : https://www.jcz.fr/ibdata1/

    Voici votre demande, les quatre tables de la version mysql 5.7.17.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    CREATE TABLE `engine_cost` (
      `engine_name` varchar(64) NOT NULL,
      `device_type` int(11)     NOT NULL,
      `cost_name`   varchar(64) NOT NULL,
      `cost_value`  float       DEFAULT NULL,
      `last_update` timestamp   NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `comment`     varchar(1024) DEFAULT NULL,
      PRIMARY KEY (`cost_name`,`engine_name`,`device_type`)
    );
    /*!40101 SET character_set_client = @saved_cs_client */;
     
    set autocommit=0;
    INSERT INTO `engine_cost` VALUES ('default',0,'io_block_read_cost',NULL,'2016-12-12 20:33:59',NULL);
    INSERT INTO `engine_cost` VALUES ('default',0,'memory_block_read_cost',NULL,'2016-12-12 20:33:59',NULL);
    commit;
     
    CREATE TABLE `gtid_executed` (
      `source_uuid`    char(36) NOT NULL COMMENT 'uuid of the source where the transaction was originally executed.',
      `interval_start` bigint(20) NOT NULL COMMENT 'First number of interval.',
      `interval_end`   bigint(20) NOT NULL COMMENT 'Last number of interval.',
      PRIMARY KEY (`source_uuid`,`interval_start`)
    );
    /*!40101 SET character_set_client = @saved_cs_client */;
     
    set autocommit=0;
    commit;
     
    CREATE TABLE `server_cost` (
      `cost_name` varchar(64) NOT NULL,
      `cost_value` float DEFAULT NULL,
      `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `comment` varchar(1024) DEFAULT NULL,
      PRIMARY KEY (`cost_name`)
    );
    /*!40101 SET character_set_client = @saved_cs_client */;
     
    set autocommit=0;
    INSERT INTO `server_cost` VALUES ('disk_temptable_create_cost',NULL,'2016-12-12 20:33:58',NULL);
    INSERT INTO `server_cost` VALUES ('disk_temptable_row_cost',NULL,'2016-12-12 20:33:58',NULL);
    INSERT INTO `server_cost` VALUES ('key_compare_cost',NULL,'2016-12-12 20:33:58',NULL);
    INSERT INTO `server_cost` VALUES ('memory_temptable_create_cost',NULL,'2016-12-12 20:33:58',NULL);
    INSERT INTO `server_cost` VALUES ('memory_temptable_row_cost',NULL,'2016-12-12 20:33:58',NULL);
    INSERT INTO `server_cost` VALUES ('row_evaluate_cost',NULL,'2016-12-12 20:33:58',NULL);
    commit;
     
    CREATE TABLE `slave_master_info` (
      `Number_of_lines`        int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.',
      `Master_log_name`        text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
      `Master_log_pos`         bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.',
      `Host`                   char(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'The host name of the master.',
      `User_name`              text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.',
      `User_password`          text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.',
      `Port` int(10)           unsigned NOT NULL COMMENT 'The network port used to connect to the master.',
      `Connect_retry`          int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
      `Enabled_ssl`            tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
      `Ssl_ca`                 text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
      `Ssl_capath`             text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
      `Ssl_cert`               text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.',
      `Ssl_cipher`             text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.',
      `Ssl_key`                text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.',
      `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.',
      `Heartbeat`              float NOT NULL,
      `Bind`                   text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
      `Ignored_server_ids`     text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
      `Uuid`                   text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.',
      `Retry_count`            bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
      `Ssl_crl`                text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
      `Ssl_crlpath`            text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
      `Enabled_auto_position`  tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
      `Channel_name`           char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication',
      `Tls_version`            text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Tls version',
      PRIMARY KEY (`Channel_name`)
    );
    /*!40101 SET character_set_client = @saved_cs_client */;
     
    set autocommit=0;
    commit;
    C'est le résultat d'un export où j'ai supprimé tout ce qui me semblait inutile, afin de conserver le strcite nécessaire.
    Au passage, on remarque que le moteur n'est pas spécifié ("InnoDB").

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Merci
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Kylix] Kylix attaque Mysql ?
    Par nahmsath dans le forum EDI
    Réponses: 9
    Dernier message: 12/08/2002, 19h37
  2. [Kylix] [cgi] pb déploiement appli avec connexion MySQL [rés
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 06/08/2002, 20h09
  3. Probleme C++Builder et Mysql
    Par noname dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 13h40
  4. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 18h18
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo