다음 편집기에서는 innodb_index_stats가 백업 데이터를 가져올 때 테이블 기본 키 충돌 문제를 해결하는 방법에 대한 기사를 제공합니다. 에디터가 꽤 좋다고 생각해서 지금 공유해서 참고용으로 올려보겠습니다. 에디터를 따라가서 살펴보겠습니다.
오류 설명
percona5.6, mysqldump 전체 백업, 백업 데이터를 가져올 때 오류 'PRIMARY'
실패 원인
확인 결과, 이 기본 키 MySQL 시스템 라이브러리 아래에 있어야 합니다. 시스템 테이블 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)
그런 다음 당시 백업 파일 sql의 기록을 확인한 결과 이 테이블을 다시 가져오기 전에 테이블이 다시 빌드된다는 것을 발견했습니다. 이는 작업 기록을 제외합니다. 이 테이블을 가져오기 전에 item_log_27 테이블의 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 */;
그래서 최근 binlog 기록을 확인해 보니 실제로 이 테이블을 재구축하는 작업이 있었네요
DROP TABLE IF EXISTS `innodb_index_stats` /* generated by server */ CREATE TABLE `innodb_index_stats` ( /*!40000 ALTER TABLE `innodb_index_stats` DISABLE KEYS */
결론
MySQL 5.6 버그, 다른 동료들도 같은 오류 발생
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
솔루션
1 mysqldump가 이 테이블의 백업을 무시하도록 매개변수를 추가합니다
2 변경 대체할 백업 파일에 이 테이블 삽입
3 mysql -f force import
[관련 권장 사항]
2.MySQL에서 새로운 사용자 권한을 추가하는 자세한 예
3.MySQL에서 비밀번호 및 액세스 제한을 변경하는 자세한 예
4.정규식을 사용하여 데이터베이스의 내용을 바꾸는 자세한 예 해결방법
5.mysql에 이미지를 저장하는 PHP의 예에 대한 자세한 설명
위 내용은 innodb_index_stats가 데이터를 가져올 때 테이블 기본 키 충돌 오류에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!