- TiDBについて
- クイックスタート
- 発展させる
- 概要
- クイックスタート
- TiDB CloudでTiDBクラスターを構築する(DevTier)
- TiDBのCRUDSQL
- TiDBを使用してシンプルなCRUDアプリを構築する
- アプリケーション例
- TiDBに接続する
- データベーススキーマの設計
- データの書き込み
- データの読み取り
- 取引
- 最適化
- トラブルシューティング
- 参照
- デプロイ
- 移行する
- 管理
- 監視と警告
- トラブルシューティング
- TiDBトラブルシューティングマップ
- 遅いクエリを特定する
- 遅いクエリを分析する
- SQL診断
- Top SQLを使用して高価なクエリを特定する
- ログを使用して高価なクエリを特定する
- ステートメント要約表
- ホットスポットの問題のトラブルシューティング
- 読み取りと書き込みの待ち時間の増加のトラブルシューティング
- クラスタのオンサイト情報を保存および復元する
- クラスタセットアップのトラブルシューティング
- 高いディスクI/O使用量のトラブルシューティング
- ロックの競合のトラブルシューティング
- TiFlashのトラブルシューティング
- 楽観的なトランザクションでの書き込みの競合のトラブルシューティング
- データとインデックス間の不整合のトラブルシューティング
- 性能チューニング
- チューニングガイド
- Configuration / コンフィグレーションの調整
- システムチューニング
- ソフトウェアのチューニング
- SQLチューニング
- チュートリアル
- TiDBツール
- 概要
- ユースケース
- ダウンロード
- TiUP
- ドキュメントマップ
- 概要
- 用語と概念
- TiUPコンポーネントを管理する
- FAQ
- トラブルシューティングガイド
- コマンドリファレンス
- 概要
- TiUPコマンド
- TiUPクラスターコマンド
- 概要
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUPDMコマンド
- 概要
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDBクラスタートポロジリファレンス
- DMクラスタートポロジリファレンス
- ミラーリファレンスガイド
- TiUPコンポーネント
- PingCAPクリニック診断サービス(テクニカルプレビュー)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDBデータ移行
- TiDBデータ移行について
- クイックスタート
- DMクラスタをデプロイする
- チュートリアル
- 高度なチュートリアル
- シャーディングされたテーブルからのデータのマージと移行
- GH-ost/PT-oscを使用するMySQLデータベースからの移行
- より多くの列を持つダウンストリームTiDBテーブルにデータを移行する
- 管理
- 参照
- 例
- トラブルシューティング
- リリースノート
- バックアップと復元(BR)
- TiDB Binlog
- TiCDC
- Dumpling
- sync-diff-inspector
- TiSpark
- 参照
- クラスターアーキテクチャ
- 主要な監視指標
- セキュリティ
- 権限
- SQL
- SQL言語の構造と構文
- SQLステートメント
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER USER
ANALYZE TABLE
BACKUP
BATCH
BEGIN
CHANGE COLUMN
COMMIT
CHANGE DRAINER
CHANGE PUMP
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW [BACKUPS|RESTORES]
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- データ型
- 関数と演算子
- クラスター化インデックス
- 制約
- 生成された列
- SQLモード
- テーブル属性
- トランザクション
- ガベージコレクション(GC)
- ビュー
- パーティショニング
- 一時テーブル
- キャッシュされたテーブル
- 文字セットと照合
- SQLの配置ルール
- システムテーブル
mysql
- INFORMATION_SCHEMA
- 概要
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- TiDBダッシュボード
- 概要
- 管理
- アクセス
- 概要ページ
- クラスター情報ページ
- Top SQLページ
- キービジュアライザーページ
- メトリクス関係グラフ
- SQLステートメント分析
- 遅いクエリページ
- クラスター診断
- 検索ログページ
- インスタンスプロファイリング
- セッションの管理とConfiguration / コンフィグレーション
- FAQ
- CLI
- コマンドラインフラグ
- Configuration / コンフィグレーションファイルのパラメーター
- システム変数
- ストレージエンジン
- テレメトリー
- エラーコード
- テーブルフィルター
- トポロジラベルによるレプリカのスケジュール
- よくある質問
- リリースノート
- すべてのリリース
- リリースタイムライン
- TiDBバージョニング
- v6.1
- v6.0
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v4.0
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 用語集
オンラインの安全でない回復
オンラインの安全でないリカバリは、損失のあるリカバリの一種です。この機能を使用する場合、データとデータインデックスの整合性は保証されません。
恒久的に損傷したレプリカが原因でTiKV上のデータの一部が読み取りおよび書き込み不能になった場合、オンラインの安全でない回復機能を使用して、不可逆回復操作を実行できます。
機能の説明
TiDBでは、ユーザーが定義したレプリカルールに従って、同じデータが同時に複数のストアに保存される場合があります。これにより、1つまたはいくつかのストアが一時的にオフラインになったり破損したりした場合でも、データの読み取りと書き込みが可能になります。ただし、リージョンのほとんどまたはすべてのレプリカが短期間にオフラインになると、リージョンは一時的に使用できなくなり、読み取りまたは書き込みができなくなります。
データ範囲の複数のレプリカで永続的な損傷(ディスクの損傷など)などの問題が発生し、これらの問題によってストアがオフラインのままになるとします。この場合、このデータ範囲は一時的に利用できません。クラスタを再び使用し、データの巻き戻しまたはデータの損失も受け入れる場合は、理論的には、障害が発生したレプリカをグループから手動で削除することで、レプリカの大部分を再形成できます。これにより、アプリケーション層サービスは、このデータ範囲(古くなっているか空である可能性があります)を再度読み書きできます。
この場合、損失耐性のあるデータを持つ一部のストアが恒久的に損傷している場合は、OnlineUnsafeRecoveryを使用して損失のある回復操作を実行できます。この機能を使用すると、PDはリージョンのスケジューリング(分割とマージを含む)を自動的に一時停止し、すべてのストアからデータシャードのメタデータを収集し、グローバルな観点から、リアルタイムで完全なリカバリプランを生成します。次に、PDは、存続しているすべてのストアに計画を配布して、データ回復タスクを実行させます。さらに、データ回復計画が配布されると、PDは定期的に回復の進行状況を監視し、必要に応じて計画を再送信します。
ユーザーシナリオ
オンラインの安全でないリカバリ機能は、次のシナリオに適しています。
- 永続的に破損したストアが原因でストアの再起動に失敗するため、アプリケーションサービスのデータは読み取りおよび書き込みできません。
- データの損失を受け入れ、影響を受けるデータを読み取りおよび書き込み可能にすることができます。
- ワンストップのオンラインデータ回復操作を実行したい。
使用法
前提条件
Online Unsafe Recoveryを使用する前に、次の要件が満たされていることを確認してください。
- オフラインストアでは、実際に一部のデータが使用できなくなります。
- オフラインストアを自動的に回復または再開することはできません。
手順1.復旧できない店舗を指定する
PD制御を使用して、回復できないTiKVノードを指定し、 unsafe remove-failed-stores <store_id>[,<store_id>,...]
を実行して自動回復をトリガーします。
pd-ctl -u <pd_addr> unsafe remove-failed-stores <store_id1,store_id2,...>
コマンドがSuccess
を返す場合、PD制御はタスクをPDに正常に登録しています。これは、要求が受け入れられたことを意味するだけであり、リカバリが正常に実行されたことを意味するものではありません。リカバリタスクはバックグラウンドで実行されます。回復の進行状況を確認するには、 show
を使用します。
コマンドがFailed
を返す場合、PD制御はタスクをPDに登録できませんでした。考えられるエラーは次のとおりです。
unsafe recovery is running
:すでに進行中のリカバリタスクがあります。invalid input store x doesn't exist
:指定されたストアIDは存在しません。invalid input store x is up and connected
:IDを持つ指定されたストアはまだ正常であり、回復されるべきではありません。
リカバリタスクの最長許容期間を指定するには、 --timeout <seconds>
オプションを使用します。このオプションが指定されていない場合、最長の期間はデフォルトで5分です。タイムアウトが発生すると、リカバリが中断され、エラーが返されます。
ノート:
- このコマンドはすべてのピアから情報を収集する必要があるため、メモリ使用量が増加する可能性があります(100,000ピアは500 MiBのメモリを使用すると推定されます)。
- コマンドの実行中にPDが再始動した場合、リカバリーは中断され、タスクを再度トリガーする必要があります。
- コマンドが実行されると、指定されたストアはトゥームストーンステータスに設定され、これらのストアを再開することはできません。
- コマンドの実行中は、すべてのスケジューリングタスクと分割/マージが一時停止され、リカバリが成功または失敗した後に自動的に再開されます。
手順2.リカバリの進行状況を確認し、完了を待ちます
上記のストア削除コマンドが正常に実行されたら、PD Controlを使用して、 unsafe remove-failed-stores show
を実行することで削除の進行状況を確認できます。
pd-ctl -u <pd_addr> unsafe remove-failed-stores show
回復プロセスには、複数の可能な段階があります。
collect report
:PDがTiKVからレポートを収集し、グローバル情報を取得する初期段階。tombstone tiflash learner
:不健康な地域の中で、他の健康な仲間よりも新しいTiFlash学習者を削除して、このような極端な状況と起こりうるパニックを防ぎます。force leader for commit merge
:特別なステージ。未完了のコミットマージがある場合、極端な状況の場合、最初にコミットマージのあるリージョンでforce leader
が実行されます。force leader
:不健康な地域に、残りの健康な仲間の中にラフトリーダーを割り当てるように強制します。demote failed voter
:リージョンの失敗した有権者を学習者に降格します。その後、リージョンは通常どおりラフトリーダーを選択できます。create empty region
:キー範囲のスペースを埋めるために空の領域を作成します。これは、一部のリージョンのすべてのレプリカを含むストアが破損している場合を解決するためです。
上記の各段階は、情報、時間、詳細な復旧計画を含むJSON形式で出力されます。例えば:
[
{
"info": "Unsafe recovery enters collect report stage: failed stores 4, 5, 6",
"time": "......"
},
{
"info": "Unsafe recovery enters force leader stage",
"time": "......",
"actions": {
"store 1": [
"force leader on regions: 1001, 1002"
],
"store 2": [
"force leader on regions: 1003"
]
}
},
{
"info": "Unsafe recovery enters demote failed voter stage",
"time": "......",
"actions": {
"store 1": [
"region 1001 demotes peers { id:101 store_id:4 }, { id:102 store_id:5 }",
"region 1002 demotes peers { id:103 store_id:5 }, { id:104 store_id:6 }",
],
"store 2": [
"region 1003 demotes peers { id:105 store_id:4 }, { id:106 store_id:6 }",
]
}
},
{
"info": "Collecting reports from alive stores(1/3)",
"time": "......",
"details": [
"Stores that have not dispatched plan: ",
"Stores that have reported to PD: 4",
"Stores that have not reported to PD: 5, 6",
]
}
]
PDはリカバリプランを正常にディスパッチした後、TiKVが実行結果を報告するのを待ちます。上記の出力の最終段階であるCollecting reports from alive stores
でわかるように、出力のこの部分は、PDディスパッチングリカバリプランとTiKVからのレポートの受信の詳細なステータスを示しています。
リカバリプロセス全体には複数の段階があり、1つの段階が複数回再試行される場合があります。通常、推定継続時間はストアハートビートの3〜10期間です(ストアハートビートの1期間はデフォルトで10秒です)。リカバリが完了した後、コマンド出力の最後のステージには"Unsafe recovery finished"
、影響を受けるリージョンが属するテーブルID(存在しないか、RawKVが使用されている場合、出力にはテーブルIDは表示されません)、および影響を受けるSQLメタが表示されます。地域。例えば:
{
"info": "Unsafe recovery finished",
"time": "......",
"details": [
"Affected table ids: 64, 27",
"Affected meta regions: 1001",
]
}
ノート:
- 回復作戦は、失敗した有権者の一部を失敗した学習者に変えました。次に、PDスケジューリングは、これらの失敗した学習者を削除するためにしばらく時間が必要です。
- 時間内に新しい店舗を追加することをお勧めします。
タスク中にエラーが発生した場合、出力の最後のステージに"Unsafe recovery failed"
とエラーメッセージが表示されます。例えば:
{
"info": "Unsafe recovery failed: <error>",
"time": "......"
}
ステップ3.データとインデックスの整合性を確認します(RawKVには必要ありません)
リカバリが完了した後、データとインデックスに一貫性がない可能性があります。 SQLコマンドADMIN CHECK
、およびADMIN RECOVER
を使用して、影響を受けるテーブルの整合性( "Unsafe recovery finished"
の出力からIDを取得できADMIN CLEANUP
)をチェックして、データの整合性とインデックスの整合性を確認し、テーブルを回復します。
ノート:
データの読み取りと書き込みは可能ですが、データの損失がないことを意味するものではありません。
ステップ4:回復不能なストアを削除する(オプション)
tiup cluster prune <cluster-name>
PersistentVolumeClaim
を削除します。kubectl delete -n ${namespace} pvc ${pvc_name} --wait=false
TiKVポッドを削除し、新しく作成されたTiKVポッドがクラスタに参加するのを待ちます。
kubectl delete -n ${namespace} pod ${pod_name}