バックアップ データをインポートするときに innodb_index_stats がエラーを報告する場合の主キー競合の解決方法

バックアップ データをインポートするときに innodb_index_stats がエラーを報告する場合の主キー競合の解決方法

障害の説明

percona5.6、mysqldump フルバックアップ、バックアップデータのインポート時にキー 'PRIMARY' のエントリ 'hoc_log99-item_log_27-PRIMARY-n_diff_pfx01' が重複するエラー

原因

確認したところ、この主キーはMySQLシステムライブラリのシステムテーブルinnodb_index_statsであることがわかりました。

mysql> テーブル innodb_index_stats\G の作成を表示します
************************** 1. 行 ****************************
    テーブル: innodb_index_stats
テーブルの作成: 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` タイムスタンプ NOT NULL デフォルト CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、
 `stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
 `stat_value` bigint(20) 符号なし NOT NULL,
 `sample_size` bigint(20) unsigned DEFAULT NULL,
 `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
 主キー (`データベース名`,`テーブル名`,`インデックス名`,`統計名`)
) エンジン=InnoDB デフォルト文字セット=utf8 照合=utf8_bin STATS_PERSISTENT=0

セット内の 1 行 (0.00 秒)

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';
+---------------+-------------+------------+---------------------+--------------+--------------+------------------+
| データベース名 | テーブル名 | インデックス名 | 最終更新日 | 統計名 | 統計値 | サンプル サイズ | 統計の説明 |
+---------------+-------------+------------+---------------------+--------------+--------------+------------------+
| hoc_log99 | item_log_27 | プライマリ | 2016-10-07 18:44:06 | n_diff_pfx01 | 823672 | 20 | 再作成 |
+---------------+-------------+------------+---------------------+--------------+--------------+------------------+
セット内の 1 行 (0.00 秒)

当時のバックアップ ファイル内の SQL レコードを確認したところ、テーブルはインポート前に再構築されることがわかりました。これにより、テーブルをインポートする前に item_log_27 テーブルの操作レコードが innodb_index_stats に入力される可能性は排除されました。

-- テーブル `innodb_index_stats` のテーブル構造
`innodb_index_stats` が存在する場合はテーブルを削除します。
テーブル `innodb_index_stats` を作成します (
-- テーブル `innodb_index_stats` のデータをダンプしています
LOCK TABLES `innodb_index_stats` WRITE;
/*!40000 ALTER TABLE `innodb_index_stats` でキーを無効にする */;

そこで、最近のbinlogレコードを再度確認したところ、このテーブルを再構築する操作が実際に行われていたことがわかりました。

DROP TABLE IF EXISTS `innodb_index_stats` /* サーバーによって生成されます */
テーブル `innodb_index_stats` を作成します (
/*!40000 ALTER TABLE `innodb_index_stats` キーを無効にする */

結論は

MySQL 5.6のバグ、他の同僚も同じエラーに遭遇した

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

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

解決

1 mysqldump はこのテーブルのバックアップを無視するパラメータを追加します

2 バックアップファイル内のこのテーブルの挿入を次のように変更します。

3 mysql -f 強制インポート

innodb_index_stats がバックアップ データをインポートするときにエラー テーブルの主キー競合を解決する方法に関する上記の記事は、エディターが皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  FileZilla_Server:425 データ接続を開けない問題を解決する方法

>>:  Ubuntu ターミナル マルチウィンドウ 分割画面 ターミネーター

推薦する

CentOS6.5にpython3.7をインストールする詳細な手順

1. Python 3をダウンロードする https://www.python.org/ftp/py...

Zabbixを介してデータベース接続情報といくつかの拡張機能をすばやく取得します

背景アプリケーション システムの数が増え続けると、当初はアラームを発していなかったアクティブ スレッ...

Ubuntu 14 に Nginx-RTMP ストリーミング サーバーをインストールするチュートリアル

1. RTMP RTMP ストリーミング プロトコルは、Adobe が開発したリアルタイムのオーディ...

node-media-serverを使用してシンプルなストリーミングメディアサーバーを構築する

node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindo...

nginxでイメージサーバーを構築する手順の詳しい説明(ルートとエイリアスの違い)

インストール手順は省略します( yum -y install nginx;を使用して直接インストール...

Windows Server 2008 R2 に MySQL 5.7.10 をインストールする手順

MSIインストールパッケージを使用してインストールするご使用のオペレーティング システムに応じて、対...

JSはモバイル端末の画面を1つずつ上下にスライドさせる機能を実装します

この記事では、モバイル端末を一度に1画面ずつ上下にスライドさせるためのJSの具体的なコードを参考まで...

CentOS 7.4 にソースコードから MySQL 8.0 をインストールするための詳細なチュートリアル

目次1. 環境2. 準備3. MySQL 8.0.11をインストールするMySQL 8 の公式バージ...

MySQL の同時実行性の問題と解決策の分析

目次1. 背景2. テーブルロックによるクエリの遅延3. オンラインでテーブル構造を変更するとどのよ...

Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

目次問題の説明:解決策1解決策2問題の説明:ページ A と B の 2 つがあり、各ページにはget...

Vueはチャットインターフェースを実装する

この記事の例では、チャットインターフェースの表示を実現するためのVueの具体的なコードを参考までに共...

フロートをクリアするための CSS メソッドの概要

フロートはWebページのレイアウトでよく使用されますが、フローティングブロックレベル要素は標準のドキ...

Vueで背景色と透明度を設定する方法

背景色と透明度の設定上記のように、最初の画像の場合は、灰色の背景と左上隅に白い「カバー」という文字を...

MySQLのGROUP BYステートメントを最適化する方法

MySQL で、id、a、b の 3 つのフィールドを持つ新しいテーブルを作成します。次のように、同...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...