bench_wiki の論理ダンプ退避と削除(TiFlash は blog 検索依存のため存続)
起票日: 2026-07-27
関連: 2026-07-05 本番 TiDB (blog_prd) の論理ダンプ手順, 2026-07-15 TiDB Vector 検索実装, 2026-07-03 DROP TABLE 後の領域解放,
cluster/manifests/tidb-cluster/tidb-cluster.yamlステータス: 実施完了(2026-07-27。blog 検索のローカル動作確認のみ任意で残)
起票理由
PLaMo Embedding による Wikipedia データ投入検証(2026-07-17 実施、DB 名 bench_wiki)がひと段落したため、bench_wiki を論理ダンプで node1:~/work/20260717/ に退避してから DROP し、クラスタのストレージを解放する。ダンプさえ残せば再現(リストア)はすぐできる、という判断。
当初は TiFlash コンポーネント自体の撤去も対象だったが見送った。 TiFlash は wiki 検証より前(2026-07-15)にブログ本体のベクトル検索用に追加したもので、blog_dev / blog_prd 両方の article_embedding_chunks が TiFlash replica + HNSW インデックスを持ち、blog-api の検索(検索のみモード = HNSW / タグ併用モード = TiFlash exact)が依存している。撤去すると blog の検索が止まるため、本タスクでは bench_wiki の削除のみ を行う。
2026-07-27 の information_schema.tiflash_replica 実測。上 2 行が今回の削除対象。
table_schema |
table_name |
replica_count |
available |
|---|---|---|---|
bench_wiki |
wiki_embedding_chunks |
1 |
1 |
bench_wiki |
vec_lesson |
1 |
1 |
blog_dev |
article_embedding_chunks |
1 |
1 |
blog_prd |
article_embedding_chunks |
1 |
1 |
スコープ
対象 |
扱い |
|---|---|
|
ダンプ退避後に DROP DATABASE |
TiFlash コンポーネント( |
残す(blog_dev / blog_prd の HNSW が依存) |
|
触らない |
plamo-embedding Deployment |
触らない(blog の embedding 生成でも使うため) |
手順(ユーザー実行)
コマンドはすべて Mac(Tailnet 接続済み)で実行する。root にパスワードを設定している場合は mysql / mysqldump に -p を付ける。
export TAILNET=$(tailscale status --json | jq -r '.MagicDNSSuffix')
1. 現状確認(サイズと TiFlash replica)
ダンプ前に規模と replica の状態を把握する。
# テーブル一覧とサイズ
mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "
SELECT table_name, table_rows,
ROUND(data_length/1024/1024) AS data_mb,
ROUND(index_length/1024/1024) AS index_mb
FROM information_schema.tables
WHERE table_schema = 'bench_wiki';"
# TiFlash replica の全量(bench_wiki 以外に blog_dev / blog_prd の article_embedding_chunks がいるはず)
mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "
SELECT table_schema, table_name, replica_count, available
FROM information_schema.tiflash_replica;"
2. ダンプ取得(node1 へ直接ストリーム保存)
mysqldump のフラグは 2026-07-05 の手順と同じ(TiDB では --single-transaction が使えないため --skip-lock-tables 構成)。DB 名は位置引数で渡すので、ダンプに CREATE DATABASE / USE は入らない(リストア先スキーマを -D で選べる)。
zstd がない場合は Mac は brew install zstd、node1 は sudo apt-get install -y zstd。
--init-command で読み取りエンジンを TiKV に固定している。これがないと TiFlash OOM で失敗する(後述のハマりどころ参照)。
TS=$(date +%Y%m%d-%H%M%S)
mysqldump -h "tidb.${TAILNET}" -P 4000 -u root \
--init-command="SET SESSION tidb_isolation_read_engines='tikv,tidb'" \
--skip-lock-tables --skip-add-locks --no-tablespaces --set-gtid-purged=OFF \
bench_wiki \
| zstd -T0 \
| ssh shuntaka@node1 "mkdir -p ~/work/20260717 && cat > ~/work/20260717/bench_wiki-${TS}.sql.zst"
ハマりどころ: TiFlash replica を持つテーブルの全件ダンプが TiFlash OOM で落ちる
--init-command なしで実行すると以下で失敗した(2026-07-27 実測)。
mysqldump: Error 1105: other error for mpp stream: Code: 0, e.displayText() = DB::TiFlashException:
Memory limit (total) exceeded caused by 'RSS(Resident Set Size) much larger than limit' :
process memory size would be 7.49 GiB
mysqldump の全件 SELECT * は「全行 × 全列」の読み出しだが、TiFlash replica を持つテーブルではオプティマイザがフルスキャンを TiFlash (MPP) に振ることがある。wiki_embedding_chunks は 100k 行 × VECTOR(2048) で、TiFlash Pod のメモリ limit 8Gi(tidb-cluster.yaml)を超えて OOM した。tidb_isolation_read_engines='tikv,tidb' をセッションに設定すると TiKV 読みに固定できる(tidb は information_schema 等のメモリテーブル用に残す)。--init-command は mysqldump 8.0.32+ / 8.4 で使える(手元は 8.4.10)。GLOBAL で切り替えると blog-api の検索(TiFlash 依存)に影響するため、必ずセッション単位で行う。
3. ダンプ検証
DROP 前に必ず実施する。Dump completed の行が末尾にあれば mysqldump が正常終了している。
ssh shuntaka@node1 "ls -lh ~/work/20260717/ && zstd -t ~/work/20260717/bench_wiki-${TS}.sql.zst"
ssh shuntaka@node1 "zstd -dc ~/work/20260717/bench_wiki-${TS}.sql.zst | tail -3"
# 期待値: -- Dump completed on ...
4. DROP DATABASE
mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "DROP DATABASE bench_wiki;"
5. 事後確認
# bench_wiki が消えていること
mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "SHOW DATABASES;"
# tiflash_replica から bench_wiki 系が消え、blog_dev / blog_prd の article_embedding_chunks が available=1 で残っていること
mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "
SELECT table_schema, table_name, replica_count, available
FROM information_schema.tiflash_replica;"
ディスクの実解放は GC(既定 10 分)+ compaction 待ちで非同期に進む(2026-07-03 の調査参照)。直後に減っていなくてよい。気になる場合は後日確認する。
export KUBECONFIG=~/.kube/config-mycluster
kubectl -n tidb-cluster exec basic-tiflash-0 -c tiflash -- df -h /data0
リストア(再現)手順
ダンプに CREATE DATABASE / USE が入っていないため、DB 作成 → -D 指定で流し込む。bench_wiki 側に VECTOR INDEX があった場合も、vector index の作成時に TiFlash replica が自動追加されるため(クラスタに TiFlash がある限り)そのまま流せる。リストア後は replica の同期と HNSW のビルド完了(tiflash_replica.available = 1)を待ってから検索クエリを打つ。
mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "CREATE DATABASE bench_wiki;"
ssh shuntaka@node1 "zstd -dc ~/work/20260717/bench_wiki-<timestamp>.sql.zst" \
| mysql -h "tidb.${TAILNET}" -P 4000 -u root -D bench_wiki
完了条件
[x]
node1:~/work/20260717/bench_wiki-<timestamp>.sql.zstが存在しzstd -tを通過する[x] ダンプ末尾に
Dump completed行がある[x]
DROP DATABASE bench_wiki実行後、SHOW DATABASESから消えている[x]
information_schema.tiflash_replicaにblog_dev/blog_prdのarticle_embedding_chunks(available=1)が残っている[ ] blog の検索(ローカル dev)が引き続き動作する
作業ログ
2026-07-27
wiki 検証の片付けとして手順書を作成。当初 TiFlash コンポーネントの撤去も対象だったが、
article_embedding_chunks(HNSW ベクトル検索)が TiFlash に依存しているため撤去は見送り、wiki DB の退避 + DROP のみに確定手順実行時に判明: 検証 DB の実名は
wiki_dbではなくbench_wiki(テーブルはwiki_embedding_chunks/vec_lesson/tag_lesson)。手順書を実名に修正あわせて
blog_prd.article_embedding_chunksにも TiFlash replica が付いている(本番適用済み)ことを実測で確認。TiFlash 存続の判断を補強
Step 1: 現状確認(実行結果)
サイズは合計約 270MB。vec_lesson / tag_lesson は vector 教材の残置分で、tag_lesson は TiFlash replica なし。3 テーブルとも DB ごとダンプ・削除対象とする。
+-----------------------+------------+---------+----------+
| table_name | table_rows | data_mb | index_mb |
+-----------------------+------------+---------+----------+
| wiki_embedding_chunks | 100000 | 264 | 6 |
| vec_lesson | 8 | 0 | 0 |
| tag_lesson | 7 | 0 | 0 |
+-----------------------+------------+---------+----------+
+--------------+--------------------------+---------------+-----------+
| table_schema | table_name | replica_count | available |
+--------------+--------------------------+---------------+-----------+
| blog_dev | article_embedding_chunks | 1 | 1 |
| blog_prd | article_embedding_chunks | 1 | 1 |
| bench_wiki | wiki_embedding_chunks | 1 | 1 |
| bench_wiki | vec_lesson | 1 | 1 |
+--------------+--------------------------+---------------+-----------+
Step 2: ダンプ取得(実行結果)
初回は TiFlash OOM(Error 1105)で失敗(ハマりどころ参照)。node1 の中途ファイルを rm してから --init-command 付きで再実行し、約 1 分で成功。
$ ssh shuntaka@node1 "ls -lh ~/work/20260717/"
-rw-rw-r-- 1 shuntaka shuntaka 1.1G Jul 27 00:44 bench_wiki-20260727-094334.sql.zst
-rw-rw-r-- 1 shuntaka shuntaka 556K Jul 21 21:08 ingest-100k.log
-rw-rw-r-- 1 shuntaka shuntaka 61K Jul 17 13:45 ingest-10k.log
-rw-r--r-- 1 shuntaka shuntaka 9.7K Jul 18 03:25 ingest_wiki.py
-rw-rw-r-- 1 shuntaka shuntaka 611M Jul 17 04:03 jawiki_content-20260712-00000.json.bz2
information_schema の data_mb 264MB は TiKV 圧縮後サイズで、VECTOR(2048) をテキスト展開する論理ダンプは zstd 圧縮後でも 1.1GiB になる。退避先ディレクトリには投入スクリプト ingest_wiki.py・投入ログ・元データ jawiki_content-20260712-00000.json.bz2 が既存で置かれており、ダンプと合わせて再現一式が揃う。
Step 3: ダンプ検証(実行結果)
展開後 2,433,172,649 bytes ≒ 2.3GiB。Dump completed 行を確認し、バックアップ健全と判断。
$ ssh shuntaka@node1 "zstd -t ~/work/20260717/bench_wiki-20260727-094334.sql.zst"
/home/shuntaka/work/20260717/bench_wiki-20260727-094334.sql.zst: 2433172649 bytes
$ ssh shuntaka@node1 "zstd -dc ~/work/20260717/bench_wiki-20260727-094334.sql.zst | tail -3"
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-27 9:44:45
Step 4 / 5: DROP DATABASE と事後確認(実行結果)
DROP DATABASE bench_wiki を実行。SHOW DATABASES から消え、tiflash_replica は blog_dev / blog_prd の article_embedding_chunks(available=1)のみが残った。blog 検索への影響なしを確認。
$ mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "SHOW DATABASES;"
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| blog_dev |
| blog_prd |
| mysql |
| sys |
| test |
+--------------------+
$ mysql -h "tidb.${TAILNET}" -P 4000 -u root -e "
SELECT table_schema, table_name, replica_count, available
FROM information_schema.tiflash_replica;"
+--------------+--------------------------+---------------+-----------+
| table_schema | table_name | replica_count | available |
+--------------+--------------------------+---------------+-----------+
| blog_dev | article_embedding_chunks | 1 | 1 |
| blog_prd | article_embedding_chunks | 1 | 1 |
+--------------+--------------------------+---------------+-----------+
ディスクの実解放は GC + compaction 待ちで非同期(手順 5 の注意どおり)。急ぎでなければ後日 df -h /data0 で確認する。