>  기사  >  데이터 베이스  >  innodb_index_stats가 데이터를 가져올 때 테이블 기본 키 충돌 오류에 대한 자세한 설명

innodb_index_stats가 데이터를 가져올 때 테이블 기본 키 충돌 오류에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-24 13:40:432771검색

다음 편집기에서는 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

[관련 권장 사항]

1.Mysql 무료 동영상 튜토리얼

2.

MySQL에서 새로운 사용자 권한을 추가하는 자세한 예

3.

MySQL에서 비밀번호 및 액세스 제한을 변경하는 자세한 예

4.

정규식을 사용하여 데이터베이스의 내용을 바꾸는 자세한 예 해결방법

5.

mysql에 이미지를 저장하는 PHP의 예에 대한 자세한 설명

위 내용은 innodb_index_stats가 데이터를 가져올 때 테이블 기본 키 충돌 오류에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.