database

Problèmes WordPress liés aux index, clés et champs auto_increment en base de données

Lors d’une migration de base de données WordPress, d’une restauration de sauvegarde ou tout autre changement de base de données avec phpMyAdmin, il est possible que des problèmes surviennent. Cela peut inclure la corruption des données, la perte de données, l’incompatibilité des versions et bien d’autres. Cet article traite spécifiquement des problèmes rencontrés lors de la migration de bases de données WordPress et explique comment les résoudre.

Problèmes potentiels

Lors de la migration de votre base de données, vous pourriez rencontrer des problèmes tels que :

  • Les données restaurées ne sont pas complètes
  • Les index, clés et champs auto_increment en base de données ne fonctionnent plus

Quels conséquences?

Cela va avoir pour conséquences des problèmes étranges sur votre back-office WordPress :

  • Des articles ou pages qui ne se mettent pas à jour lorsqu’on les modifie
  • Des articles ou pages que l’on arrive pas à créer et/ou des pages blanches en back-office lorsqu’on veut créer un nouvel article
  • La création de nouveaux utilisateurs qui ne fonctionne pas
  • Et bien d’autres problèmes liés à la création et modification du site en back-office

Pour quelles raisons?

Les requêtes SQL INSERT des différents plugins insèrent des lignées dans diverses tables avec une clé primaire non définie (et donc définie par défaut à 0). Étant donné que les clés primaires doivent être uniques, une seconde insertion dans la même table échoue, causant divers problèmes.

Pour une raison inconnue, l’auto_increment n’a pas été conservé lors de la réimportation du dump SQL. Tout le reste de la base de données cependant en ordre.

Les raisons de l’apparition du problème restent donc plutot inconnues. Heureusement, nous savons comment le résoudre.

Prévention des problèmes

Pour prévenir ces problèmes lors de la migration de la base de données, vous pouvez :

  • Vérifier et optimiser la base de données avant la migration
  • Sauvegarder régulièrement les données

Sauvegarde et récupération

Avant de procéder à toute modification, assurez-vous de créer une sauvegarde complète de la base de données. En cas de problèmes, vous pourrez restaurer la base de données à partir de cette sauvegarde.

La résolution du problème

L’auteur du site managedwphosting.nl a publié un billet dans lequel il détail toutes les requêtes SQL necessaires pour réparer la base de données, merci à lui!

Voici les requêtes SQL nécessaires pour résoudre les problèmes. Chaque requête répare ou recrée les index, clés et champs auto_increment manquants pour chaque table concernée.

-- Starting with wp_users
DELETE FROM wp_users WHERE ID = 0;
ALTER TABLE wp_users ADD PRIMARY KEY  (ID);
ALTER TABLE wp_users ADD KEY user_login_key (user_login);
ALTER TABLE wp_users ADD KEY user_nicename (user_nicename);
ALTER TABLE wp_users ADD KEY user_email (user_email);
ALTER TABLE wp_users MODIFY ID bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_usermeta
DELETE FROM wp_usermeta WHERE umeta_id = 0;
ALTER TABLE wp_usermeta ADD PRIMARY KEY  (umeta_id);
ALTER TABLE wp_usermeta ADD KEY user_id (user_id);
ALTER TABLE wp_usermeta ADD KEY meta_key (meta_key(191));
ALTER TABLE wp_usermeta MODIFY umeta_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_posts
DELETE FROM wp_posts WHERE ID = 0;
ALTER TABLE wp_posts ADD PRIMARY KEY  (ID);
ALTER TABLE wp_posts ADD KEY post_name (post_name(191));
ALTER TABLE wp_posts ADD KEY type_status_date (post_type,post_status,post_date,ID);
ALTER TABLE wp_posts ADD KEY post_parent (post_parent);
ALTER TABLE wp_posts ADD KEY post_author (post_author);
ALTER TABLE wp_posts MODIFY ID bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_comments
DELETE FROM wp_comments WHERE comment_ID = 0;
ALTER TABLE wp_comments ADD PRIMARY KEY  (comment_ID);
ALTER TABLE wp_comments ADD KEY comment_post_ID (comment_post_ID);
ALTER TABLE wp_comments ADD KEY comment_approved_date_gmt (comment_approved,comment_date_gmt);
ALTER TABLE wp_comments ADD KEY comment_date_gmt (comment_date_gmt);
ALTER TABLE wp_comments ADD KEY comment_parent (comment_parent);
ALTER TABLE wp_comments ADD KEY comment_author_email (comment_author_email(10));
ALTER TABLE wp_comments MODIFY comment_ID bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_links
DELETE FROM wp_links WHERE link_id = 0;
ALTER TABLE wp_links ADD PRIMARY KEY  (link_id);
ALTER TABLE wp_links ADD KEY link_visible (link_visible);
ALTER TABLE wp_links MODIFY link_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_options
DELETE FROM wp_options WHERE option_id = 0;
ALTER TABLE wp_options ADD PRIMARY KEY  (option_id);
ALTER TABLE wp_options ADD UNIQUE KEY option_name (option_name);
ALTER TABLE wp_options ADD KEY autoload (autoload);
ALTER TABLE wp_options MODIFY option_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_postmeta
DELETE FROM wp_postmeta WHERE meta_id = 0;
ALTER TABLE wp_postmeta ADD PRIMARY KEY  (meta_id);
ALTER TABLE wp_postmeta ADD KEY post_id (post_id);
ALTER TABLE wp_postmeta ADD KEY meta_key (meta_key(191));
ALTER TABLE wp_postmeta MODIFY meta_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_terms
DELETE FROM wp_terms WHERE term_id = 0;
ALTER TABLE wp_terms ADD PRIMARY KEY  (term_id);
ALTER TABLE wp_terms ADD KEY slug (slug(191));
ALTER TABLE wp_terms ADD KEY name (name(191));
ALTER TABLE wp_terms MODIFY term_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_term_taxonomy
DELETE FROM wp_term_taxonomy WHERE term_taxonomy_id = 0;
ALTER TABLE wp_term_taxonomy ADD PRIMARY KEY  (term_taxonomy_id);
ALTER TABLE wp_term_taxonomy ADD UNIQUE KEY term_id_taxonomy (term_id,taxonomy);
ALTER TABLE wp_term_taxonomy ADD KEY taxonomy (taxonomy);
ALTER TABLE wp_term_taxonomy MODIFY term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_term_relationships
DELETE FROM wp_term_relationships WHERE object_id = 0;
DELETE FROM wp_term_relationships WHERE term_taxonomy_id = 0;
ALTER TABLE wp_term_relationships ADD PRIMARY KEY  (object_id,term_taxonomy_id);
ALTER TABLE wp_term_relationships ADD KEY term_taxonomy_id (term_taxonomy_id);
-- Starting with wp_termmeta
DELETE FROM wp_termmeta WHERE meta_id = 0;
ALTER TABLE wp_termmeta ADD PRIMARY KEY  (meta_id);
ALTER TABLE wp_termmeta ADD KEY term_id (term_id);
ALTER TABLE wp_termmeta ADD KEY meta_key (meta_key(191));
ALTER TABLE wp_termmeta MODIFY meta_id bigint(20) unsigned NOT NULL auto_increment;
-- Starting with wp_commentmeta
DELETE FROM wp_commentmeta WHERE meta_id = 0;
ALTER TABLE wp_commentmeta ADD PRIMARY KEY  (meta_id);
ALTER TABLE wp_commentmeta ADD KEY comment_id (comment_id);
ALTER TABLE wp_commentmeta ADD KEY meta_key (meta_key(191));
ALTER TABLE wp_commentmeta MODIFY meta_id bigint(20) unsigned NOT NULL auto_increment;

Les choses à faire avec ces requêtes SQL:

  • Si vos tables ne commencent pas par “wp_”, remplacez le préfixe partout par le votre, sinon ca ne fonctionnera pas.
  • Copiez/collez toutes les requêtes, et executez les dans votre base de données. Par exemple avec l’onglet “SQL” de phpmyadmin.

Rééssayez ensuite de créer/mettre à jour des articles et des utilisateurs, les problèmes devraient avoir disparus.

En suivant attentivement les instructions fournies, vous devriez être en mesure de résoudre les problèmes liés à la migration de votre base de données WordPress. N’oubliez pas de toujours sauvegarder vos données avant d’effectuer des modifications importantes et de vérifier la compatibilité des versions de WordPress et des plugins.

1 Commentaire
  1. Avatar
    JC Martin 6 months ago
    Reply

    Merci Alexandre, c’était pile la solution qu’il me fallait après mes « comment_id » bloqués à 0 suite à une migration chez un autre hébergeur…

Laisser un Commentaire

Votre adresse électronique ne sera pas publiée.

Vous pourriez aussi aimer