エラーコードとトラブルシューティング
このドキュメントでは、TiDB の使用中に発生する問題について説明し、解決策を提供します。
エラーコード
TiDB は MySQL のエラー コードと互換性があり、ほとんどの場合、MySQL と同じエラー コードを返します。 MySQL のエラー コードのリストについては、 MySQL 5.7エラー メッセージ リファレンスを参照してください。さらに、TiDB には次の固有のエラー コードがあります。
ノート:
一部のエラー コードは、内部エラーを表します。通常、TiDB はエラーをユーザーに返すのではなく処理するため、一部のエラー コードはここにリストされていません。
ここに記載されていないエラー コードが表示された場合は、サポートのためにお問い合わせ .
エラー番号: 8001
リクエストで使用されるメモリが、TiDB メモリ使用量のしきい値制限を超えています。
システム変数
tidb_mem_quota_query
を構成して、単一の SQL ステートメントのメモリー制限を増やします。エラー番号: 8002
一貫性を保証するために、コミットの競合が発生した場合、ステートメントが
SELECT FOR UPDATE
のトランザクションは再試行できません。 TiDB はトランザクションをロールバックし、このエラーを返します。アプリケーションは、トランザクション全体を安全に再試行できます。
エラー番号: 8003
ADMIN CHECK TABLE
コマンドの実行時に行のデータがインデックスと一致しない場合、TiDB はこのエラーを返します。このエラーは、テーブル内のデータ破損をチェックするときによく見られます。あなたはサポートのためにお問い合わせできます。
エラー番号: 8004
1 つのトランザクションが大きすぎます。
原因と解決策については、 エラー メッセージ
transaction too large
ますを参照してください。エラー番号: 8005
完全なエラー メッセージ:
ERROR 8005 (HY000): Write Conflict, txnStartTS is stale
TiDB のトランザクションで書き込み競合が発生します。アプリケーション ロジックを確認し、書き込み操作を再試行してください。
エラー番号: 8018
プラグインを再ロードするときに、プラグインが以前にロードされていない場合、このエラーが返されます。
プラグインの初期ロードを実行できます。
エラー番号: 8019
リロードされているプラグインのバージョンは、以前のバージョンとは異なります。したがって、プラグインを再ロードできず、このエラーが返されます。
プラグインのバージョンが以前のものと同じであることを確認することで、プラグインをリロードできます。
エラー番号: 8020
テーブルがロックされているときに、テーブルに対して書き込み操作を実行すると、このエラーが返されます。
テーブルのロックを解除し、書き込み操作を再試行してください。
エラー番号: 8021
TiKV から読み込むキーが存在しない場合、このエラーが返されます。このエラーは内部で使用され、外部結果は空の読み取りです。
エラー番号: 8022
トランザクションのコミットは失敗し、ロールバックされました。
アプリケーションは、トランザクション全体を安全に再試行できます。
エラー番号: 8023
トランザクション キャッシュの書き込み時に空の値を設定すると、このエラーが返されます。このエラーは内部で使用および処理され、アプリケーションには返されません。
エラー番号: 8024
無効な取引です。 TiDB が、実行中のトランザクションのトランザクション ID (開始タイムスタンプ) が取得されていないことを検出した場合、つまりこのトランザクションが無効であることを意味する場合、このエラーが返されます。
通常、このエラーは発生しません。このエラーが発生した場合は、サポートのためにお問い合わせを入力してください。
エラー番号: 8025
書き込まれている 1 つのキーと値のペアが大きすぎます。 TiDB でサポートされている単一の Key-Value ペアの最大サイズは、デフォルトで 6 MB です。
ペアがこの制限を超える場合は、
txn-entry-size-limit
の構成値を適切に調整して制限を緩和する必要があります。エラー番号: 8026
使用中のインターフェース関数は実装されていません。このエラーは内部でのみ使用され、アプリケーションには返されません。
エラー番号: 8027
テーブル スキーマのバージョンが古くなっています。 TiDB はスキーマの変更をオンラインで適用します。 TiDBサーバーのテーブル スキーマ バージョンがシステム全体のテーブル スキーマ バージョンよりも古い場合、SQL ステートメントを実行すると、このエラーが返されます。
このエラーが発生した場合は、TiDBサーバーと PD リーダー間のネットワークを確認してください。
エラー番号: 8028
v6.3.0 以降、TiDB はメタデータ ロックの機能を導入します。メタデータ ロックを無効にしてトランザクションを実行すると、トランザクションはテーブル スキーマの変更を認識できません。したがって、トランザクションがコミットされると、TiDB はトランザクションに関連するテーブル スキーマをチェックします。実行中に関連するテーブル スキーマが変更された場合、トランザクションのコミットはこのエラーで失敗します。この時点で、アプリケーションはトランザクション全体を安全に再試行できます。
Read Committed 分離レベル以外でメタデータ ロックが有効になっている場合、テーブルで損失のある列タイプの変更が発生した場合 (たとえば、
INT
からCHAR
への変更は損失が多く、TINYINT
からINT
への変更はデータの上書きが行われないため、損失がありません)必要) トランザクション開始から初めてテーブルにアクセスすると、クエリは失敗しますが、トランザクションは自動的にロールバックされません。他のステートメントを引き続き実行し、トランザクションをロールバックするかコミットするかを決定できます。エラー番号: 8029
このエラーは、データベース内の数値変換でエラーが発生した場合に発生します。このエラーは内部でのみ使用され、外部アプリケーションの特定のタイプのエラーに変換されます。
エラー番号: 8030
符号なし正整数を符号付き整数に変換すると、最大値を超えて負の整数として表示されます。このエラーは、主にアラート メッセージで発生します。
エラー番号: 8031
符号なし整数に変換される場合、負の整数は正の整数に変換されます。このエラーは、主にアラート メッセージで発生します。
エラー番号: 8032
無効な
year
形式が使用されています。year
は、1、2、または 4 桁のみを受け入れます。エラー番号: 8033
無効な
year
の値が使用されています。year
の有効範囲は (1901, 2155) です。エラー番号: 8037
無効な
mode
形式がweek
関数で使用されています。mode
は [0, 7] 内の 1 桁でなければなりません。エラー番号: 8038
フィールドがデフォルト値を取得できません。このエラーは通常、内部で使用され、外部アプリケーション用の特定の種類のエラーに変換されます。
エラー番号: 8040
サポートされていない操作が実行されます。たとえば、ビューまたはシーケンスに対してテーブル ロック操作を実行します。
エラー番号: 8047
システム変数の値はサポートされていません。通常、このエラーは、データベースでサポートされていない変数値をユーザーが設定した場合に、アラーム情報で発生します。
エラー番号: 8048
サポートされていないデータベース分離レベルが設定されています。
サードパーティのツールまたはフレームワークを使用しているためにコードを変更できない場合は、
tidb_skip_isolation_level_check
を使用してこのチェックをバイパスすることを検討してください。set @@tidb_skip_isolation_level_check = 1;エラー番号: 8050
サポートされていない権限タイプが設定されています。
解決策については、 TiDB 操作に必要な権限を参照してください。
エラー番号: 8051
TiDB がクライアントから送信された Exec 引数リストを解析するときに、不明なデータ型が検出されます。
このエラーが発生した場合は、クライアントを確認してください。クライアントが正常な場合、 お問い合わせはサポート用です。
エラー番号: 8052
クライアントからのデータ パケットのシリアル番号が正しくありません。
このエラーが発生した場合は、クライアントを確認してください。クライアントが正常な場合、 お問い合わせはサポート用です。
エラー番号: 8055
現在のスナップショットは古すぎます。データがガベージ コレクションされている可能性があります。この問題を回避するには、値
tidb_gc_life_time
を増やします。 TiDB は、実行時間の長いトランザクション用にデータを自動的に予約します。通常、このエラーは発生しません。ガベージ コレクションの概要とガベージ コレクションの構成を参照してください。
エラー番号: 8059
自動ランダム ID が使い果たされ、割り当てられません。現在、このようなエラーから回復する方法はありません。自動ランダム機能を使用して割り当ての最大数を取得する場合は、bigint を使用することをお勧めします。また、自動ランダム列に値を手動で割り当てることは避けてください。
自動ランダムを参照してください。
エラー番号: 8060
自動増分オフセットが無効です。
auto_increment_increment
とauto_increment_offset
の値を確認します。エラー番号: 8061
サポートされていない SQL ヒントです。
SQL ヒントを確認して変更するには、 オプティマイザーのヒントを参照してください。
エラー番号: 8062
SQL ヒントで無効なトークンが使用されています。 SQL ヒントの予約語と競合します。
SQL ヒントを確認して変更するには、 オプティマイザーのヒントを参照してください。
エラー番号: 8063
SQLヒントで設定したメモリ使用制限がシステムの上限を超えています。 SQL ヒントの設定は無視されます。
SQL ヒントを確認して変更するには、 オプティマイザーのヒントを参照してください。
エラー番号: 8064
SQL ヒントの解析に失敗します。
SQL ヒントを確認して変更するには、 オプティマイザーのヒントを参照してください。
エラー番号: 8065
SQL ヒントで無効な整数が使用されています。
SQL ヒントを確認して変更するには、 オプティマイザーのヒントを参照してください。
エラー番号: 8066
JSON_OBJECTAGG
関数の 2 番目のパラメーターが無効です。エラー番号: 8101
プラグイン ID の形式が正しくありません。
正しい形式は
[name]-[version]
で、name
とversion
に-
は使用できません。エラー番号: 8102
プラグイン定義情報を読み込めません。
プラグインに関する設定を確認してください。
エラー番号: 8103
プラグイン名が間違っています。
プラグインの構成を確認してください。
エラー番号: 8104
プラグインのバージョンが一致しません。
プラグインの構成を確認してください。
エラー番号: 8105
プラグインは繰り返しロードされます。
エラー番号: 8106
プラグインは、名前がプラグイン名で始まらないシステム変数を定義します。
プラグインの開発者に連絡して変更してください。
エラー番号: 8107
読み込まれたプラグインでバージョンが指定されていないか、指定されたバージョンが低すぎます。
プラグインの構成を確認してください。
エラー番号: 8108
サポートされていない実行プラン タイプです。このエラーは内部エラーです。
このエラーが発生した場合は、サポートのためにお問い合わせを入力してください。
エラー番号: 8109
索引の分析時に、指定された索引が見つかりません。
エラー番号: 8110
デカルト積演算は実行できません。
構成で
cross-join
をtrue
に設定します。エラー番号: 8111
EXECUTE
ステートメントを実行すると、対応するPrepare
ステートメントが見つかりません。エラー番号: 8112
EXECUTE
ステートメントのパラメーターの数がPrepare
ステートメントと一致していません。エラー番号: 8113
EXECUTE
ステートメントで関連付けられたテーブル スキーマは、Prepare
ステートメントの実行後に変更されました。エラー番号: 8115
複数行のステートメントを準備することはサポートされていません。
エラー番号: 8116
DDL ステートメントの準備はサポートされていません。
エラー番号: 8120
トランザクションの
start tso
を取得できません。PDサーバーの状態/監視/ログ、および TiDBサーバーと PDサーバー間のネットワークを確認します。
エラー番号: 8121
権限チェックが失敗します。
データベースの権限構成を確認してください。
エラー番号: 8122
指定されたワイルドカードに対応するテーブル名が見つかりません。
エラー番号: 8123
集計関数を含む SQL クエリは、集計されていない列を返します。これは
only_full_group_by
モードに違反します。SQL ステートメントを変更するか、
only_full_group_by
モードを無効にしてください。エラー番号: 8129
TiDB は、キーの長さが 65536 以上の JSON オブジェクトをまだサポートしていません。
エラー番号: 8130
完全なエラー メッセージ:
ERROR 8130 (HY000): client has multi-statement capability disabled
このエラーは、以前のバージョンの TiDB からアップグレードした後に発生する可能性があります。 SQL インジェクション攻撃の影響を軽減するために、TiDB はデフォルトで複数のクエリが同じ
COM_QUERY
の呼び出しで実行されるのを防ぐようになりました。システム変数
tidb_multi_statement_mode
を使用して、この動作を制御できます。エラー番号: 8138
トランザクションが不正な行の値を書き込もうとしています。詳細については、 データとインデックス間の不一致のトラブルシューティングを参照してください。
エラー番号: 8139
トランザクションは、ハンドルがインデックス内のハンドルと一致しない行を書き込もうとします。詳細については、 データとインデックス間の不一致のトラブルシューティングを参照してください。
エラー番号: 8140
トランザクションは、データがインデックス データと一致しない行を書き込もうとします。詳細については、 データとインデックス間の不一致のトラブルシューティングを参照してください。
エラー番号: 8141
トランザクションがコミットされているとき、キーの存在アサーションは失敗します。詳細については、 データとインデックス間の不一致のトラブルシューティングを参照してください。
エラー番号: 8143
非トランザクション DML ステートメントの実行中にバッチが失敗すると、ステートメントは停止します。詳細については、 非トランザクション DML ステートメントを参照してください。
エラー番号: 8147
tidb_constraint_check_in_place_pessimistic
がOFF
に設定されている場合、トランザクションの正確性を確保するために、SQL ステートメントの実行でエラーが発生すると、TiDB がこの8147
エラーを返し、現在のトランザクションを中止する可能性があります。エラーの具体的な原因については、エラー メッセージを参照してください。詳細については、 制約を参照してください。エラー番号: 8200
DDL 構文はまだサポートされていません。
MySQL DDL の互換性を参照してください。
エラー番号: 8214
DDL 操作は
admin cancel
操作で終了します。エラー番号: 8215
ADMIN REPAIR TABLE
は失敗します。このエラーが発生した場合は、サポートのためにお問い合わせを入力してください。
エラー番号: 8216
自動ランダム列の使用法が正しくありません。
変更するには自動ランダムを参照してください。
エラー番号: 8223
このエラーは、データがインデックスと一致していないことを検出した場合に発生します。
このエラーが発生した場合は、サポートのためにお問い合わせを入力してください。
エラー番号: 8224
DDL ジョブが見つかりません。
restore
の操作で指定したジョブIDが存在するか確認してください。エラー番号: 8225
DDL 操作は完了しており、キャンセルできません。
エラー番号: 8226
DDL 操作はほぼ完了しており、キャンセルできません。
エラー番号: 8227
シーケンスの作成時に、サポートされていないオプションが使用されています。
サポートされているオプションのリストについては、 シーケンスのドキュメントを参照してください。
エラー番号: 8228
Sequence で
setval
を使用すると、サポートされていない型が指定されます。関数の例を見つけるには、 シーケンスのドキュメントを参照してください。
エラー番号: 8229
トランザクションが生存時間を超えています。
現在のトランザクションをコミットまたはロールバックして、新しいトランザクションを開始します。
エラー番号: 8230
TiDB は現在、新しく追加された列のデフォルト値として Sequence を使用することをサポートしておらず、使用するとこのエラーを報告します。
エラー番号: 9001
完全なエラー メッセージ:
ERROR 9001 (HY000): PD Server Timeout
PD 要求がタイムアウトしました。
PDサーバーの状態、監視データ、ログ、TiDBサーバーとPDサーバー間のネットワークを確認します。
エラー番号: 9002
完全なエラー メッセージ:
ERROR 9002 (HY000): TiKV Server Timeout
TiKV リクエストがタイムアウトしました。
TiKV サーバーのステータス、監視データ、ログ、および TiDBサーバーと TiKVサーバー間のネットワークを確認しサーバー。
エラー番号: 9003
完全なエラー メッセージ:
ERROR 9003 (HY000): TiKV Server is Busy
TiKVサーバーがビジーで、これは通常、ワークロードが高すぎる場合に発生します。
TiKVサーバーの状態、監視データ、ログを確認します。
エラー番号: 9004
完全なエラー メッセージ:
ERROR 9004 (HY000): Resolve Lock Timeout
ロック解決タイムアウト。このエラーは、データベースに多数のトランザクション競合が存在する場合に発生します。
アプリケーション コードを調べて、データベースにロック競合が存在するかどうかを確認してください。
エラー番号: 9005
完全なエラー メッセージ:
ERROR 9005 (HY000): Region is unavailable
アクセスされたリージョンまたは特定のRaftグループが使用できません。レプリカが不十分であるなどの理由が考えられます。このエラーは通常、TiKVサーバーがビジー状態であるか、TiKV ノードがダウンしている場合に発生します。
TiKVサーバーのステータス、監視データ、およびログを確認します。
エラー番号: 9006
完全なエラー メッセージ:
ERROR 9006 (HY000): GC life time is shorter than transaction duration
GC Life Time
の間隔が短すぎます。ロングトランザクションで読み取ったはずのデータが削除されている可能性があります。次のコマンドを使用してtidb_gc_life_time
を調整できます。SET GLOBAL tidb_gc_life_time = '30m';ノート:
「30m」は、30 分前に生成されたデータのみをクリーンアップすることを意味し、余分なストレージ スペースを消費する可能性があります。
エラー番号: 9500
1 つのトランザクションが大きすぎます。
解決策については、 エラー メッセージ
transaction too large
ますを参照してください。エラー番号: 9007
エラー メッセージは
ERROR 9007 (HY000): Write conflict
で始まります。エラー メッセージに
reason=LazyUniquenessCheck
が含まれている場合は、トランザクションが悲観的であり、@@tidb_constraint_check_in_place_pessimistic=OFF
が設定されており、アプリケーションの一意のインデックスで書き込み競合が発生していることを意味します。この場合、悲観的トランザクションの正常な実行は保証されません。アプリケーションからトランザクションを再試行するか、変数をON
に設定してエラーを回避できます。エラー番号: 9008
同時に TiKV に送信されるリクエストが多すぎます。数が制限を超えています。
tidb_store_limit
を増やすか0
に設定して、リクエストのトラフィックの制限を解除します。エラー番号: 9010
TiKV はこのラフト ログを処理できません。
TiKVサーバーの状態/モニター/ログを確認します。
エラー番号: 9012
TiFlash リクエストがタイムアウトしました。
TiFlash サーバーの状態/モニター/ログ、および TiDBサーバーと TiFlashサーバー間のネットワークを確認しサーバー。
エラー番号: 9013
TiFlashサーバーがビジーであり、これは通常、ワークロードが高すぎる場合に発生します。
TiFlashサーバーの状態/モニター/ログを確認します。
MySQL ネイティブ エラー メッセージ
エラー番号: 2013 (HY000)
完全なエラー メッセージ:
ERROR 2013 (HY000): Lost connection to MySQL server during query
このエラーは次のように処理できます。
- ログにpanicがあるかどうかを確認します。
dmesg -T | grep -i oom
を使用して dmesg に OOM が存在するかどうかを確認します。- 長時間アクセスがない場合も、このエラーが発生する可能性があります。通常、TCP タイムアウトが原因です。 TCP が長期間使用されていない場合、オペレーティング システムは TCP を強制終了します。
エラー番号: 1105 (HY000)
完全なエラー メッセージ:
ERROR 1105 (HY000): other error: unknown error Wire Error(InvalidEnumValue(4004))
このエラーは通常、TiDB のバージョンが TiKV のバージョンと一致しない場合に発生します。バージョンの不一致を回避するには、バージョンをアップグレードするときにすべてのコンポーネントをアップグレードします。
エラー番号: 1148 (42000)
完全なエラー メッセージ:
ERROR 1148 (42000): the used command is not allowed with this TiDB version
LOAD DATA LOCAL
ステートメントを実行しても、MySQL クライアントがこのステートメントの実行を許可しない場合 (local_infile
オプションの値が 0)、このエラーが発生します。解決策は、MySQL クライアントを起動するときに
--local-infile=1
オプションを使用することです。たとえば、コマンドmysql --local-infile=1 -u root -h 127.0.0.1 -P 4000
を実行します。デフォルト値のlocal-infile
は、MySQL クライアントのバージョンによって異なります。したがって、特定の MySQL クライアントで構成する必要があります。エラー番号: 9001 (HY000)
完全なエラー メッセージ:
ERROR 9001 (HY000): PD server timeout start timestamp may fall behind safe point
このエラーは、TiDB が PD へのアクセスに失敗した場合に発生します。 TiDB バックグラウンドのワーカーは PD からセーフポイントを継続的にクエリし、100 秒以内にクエリに失敗するとこのエラーを報告します。通常、PD のディスクが低速でビジー状態であるか、TiDB と PD 間のネットワークに障害が発生したことが原因です。一般的なエラーの詳細については、 エラー番号と故障診断を参照してください。
TiDB ログ エラー メッセージ: EOF エラー
クライアントまたはプロキシが TiDB から切断されても、TiDB は切断をすぐには認識しません。代わりに、TiDB は、接続にデータを返し始めたときにのみ、切断に気付きます。この時点で、ログには EOF エラーが出力れます。
トラブルシューティング
トラブルシューティングとFAQのドキュメントを参照してください。