Maison  >  Article  >  base de données  >  Explication détaillée de l'erreur de conflit de clé primaire de table lorsque innodb_index_stats importe des données

Explication détaillée de l'erreur de conflit de clé primaire de table lorsque innodb_index_stats importe des données

Y2J
Y2Joriginal
2017-05-24 13:40:432771parcourir

L'éditeur suivant vous proposera un article sur la façon de résoudre le problème du conflit de clé primaire de table lorsque innodb_index_stats importe des données de sauvegarde. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.

Description du défaut

percona5.6, sauvegarde complète mysqldump, lors de l'importation des données de sauvegarde, une erreur se produit Entrée en double ' hoc_log99-item_log_27-PRIMARY-n_diff_pfx01' pour la clé 'PRIMARY'

Cause de l'échec

Après vérification, cette clé primaire devrait être sous la bibliothèque système MySQL La table système innodb_index_stats

mysql> show create table innodb_index_stats\G
*************************** 1. row ***************************
    Table: innodb_index_stats
Create Table: CREATE TABLE `innodb_index_stats` (
 `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
 `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
 `index_name` varchar(64) COLLATE utf8_bin NOT NULL,
 `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
 `stat_value` bigint(20) unsigned NOT NULL,
 `sample_size` bigint(20) unsigned DEFAULT NULL,
 `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
 PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0

1 row in set (0.00 sec)

mysql> select * from innodb_index_stats where database_name='hoc_log99' and table_name='item_log_27' and stat_name='n_diff_pfx01' and index_name='PRIMARY';
+---------------+-------------+------------+---------------------+--------------+------------+-------------+------------------+
| database_name | table_name | index_name | last_update     | stat_name  | stat_value | sample_size | stat_description |
+---------------+-------------+------------+---------------------+--------------+------------+-------------+------------------+
| hoc_log99   | item_log_27 | PRIMARY  | 2016-10-07 18:44:06 | n_diff_pfx01 |   823672 |     20 | redid      |
+---------------+-------------+------------+---------------------+--------------+------------+-------------+------------------+
1 row in set (0.00 sec)

a ensuite vérifié les enregistrements de mon fichier de sauvegarde sql à ce moment-là et a constaté que la table sera reconstruite avant d'importer à nouveau cette table, ce qui exclut l'opération de la table item_log_27 avant d'importer cette table. Possibilité de se connecter à innodb_index_stats.


-- Table structure for table `innodb_index_stats`
DROP TABLE IF EXISTS `innodb_index_stats`;
CREATE TABLE `innodb_index_stats` (
-- Dumping data for table `innodb_index_stats`
LOCK TABLES `innodb_index_stats` WRITE;
/*!40000 ALTER TABLE `innodb_index_stats` DISABLE KEYS */;

J'ai donc vérifié à nouveau les récents enregistrements du binlog et j'ai découvert qu'il y avait effectivement eu une opération pour reconstruire cette table


DROP TABLE IF EXISTS `innodb_index_stats` /* generated by server */
CREATE TABLE `innodb_index_stats` (
/*!40000 ALTER TABLE `innodb_index_stats` DISABLE KEYS */

Conclusion

Bogue MySQL 5.6, d'autres collègues ont rencontré la même erreur

www.percona.com/forums/questions-discussions/mysql-and-percona-server/31971-mysql-innodb_index_stats-duplication-entry-error-on-restore

bugs . mysql.com/bug.PHP?id=71814

Solution

1 Mysqldump ajoute des paramètres pour ignorer la sauvegarde de cette table

2 Modifiez l'insertion de cette table dans le fichier de sauvegarde pour remplacer

3 mysql -f force import

[Recommandations associées]

1 Mysql. Tutoriel vidéo gratuit

2. Exemples détaillés d'ajout de nouvelles autorisations utilisateur dans MySQL

3 Exemples détaillés de modification des mots de passe et des restrictions d'accès dans MySQL.

4. Détails des exemples d'utilisation d'expressions régulières pour remplacer le contenu de la base de données Solution

5. Explication détaillée d'exemples de stockage d'images php dans MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn