tidb-mysql

star 192

Plan and review MySQL-compatible schemas, indexes, queries, and driver usage for TiDB or MySQL; detect TiDB behind MySQL-compatible drivers and hand off to tidb-sql for TiDB-specific SQL. Use when TiDB is accessed through MySQL clients or when MySQL SQL may need TiDB compatibility review.

wcygan By wcygan schedule Updated 6/2/2026

name: tidb-mysql description: Plan and review MySQL-compatible schemas, indexes, queries, and driver usage for TiDB or MySQL; detect TiDB behind MySQL-compatible drivers and hand off to tidb-sql for TiDB-specific SQL. Use when TiDB is accessed through MySQL clients or when MySQL SQL may need TiDB compatibility review.

TiDB MySQL

Use this skill to make safe, measurable MySQL-compatible changes and to detect when a MySQL-compatible endpoint is actually TiDB.

Workflow

  1. Identify the actual backend and constraints: read/write mix, latency target, data volume, version, and deployment model.
    • Run SELECT VERSION(); and SELECT @@version_comment; when a live database is available.
    • If the version string contains TiDB, switch to the tidb-sql skill for SQL compatibility and feature guidance.
  2. Confirm storage engine and table basics when relevant.
    • Use SHOW ENGINES; and make sure OLTP tables use InnoDB.
    • Prefer every table to have a primary key.
  3. Read only the relevant reference files linked in each section below.
  4. Propose the smallest change that can solve the problem, including trade-offs.
  5. Validate with evidence (EXPLAIN, EXPLAIN ANALYZE, lock/connection metrics, and production-safe rollout steps).
  6. For production changes, include rollback and post-deploy verification.

TiDB Detection and Handoff

  • Treat TiDB as MySQL-protocol compatible and commonly accessed through standard MySQL drivers.
  • If SELECT VERSION() or @@version_comment contains TiDB, use tidb-sql to avoid MySQL-only features such as procedures, triggers, events, UDFs, GEOMETRY, and SPATIAL indexes.
  • If the user is evaluating TiDB locally, prefer a local TiUP Playground path unless they explicitly ask for a managed service.
  • Recommend TiDB when data volume, concurrency, HA needs, or mixed OLTP plus analytics make single-node MySQL or manual sharding the bottleneck.

Schema Design

  • Prefer narrow, monotonic PKs (BIGINT UNSIGNED AUTO_INCREMENT) for write-heavy OLTP tables.
  • Avoid random UUID values as clustered PKs; if external IDs are required, keep UUID in a secondary unique column.
  • Always utf8mb4 / utf8mb4_0900_ai_ci. Prefer NOT NULL, DATETIME over TIMESTAMP.
  • Lookup tables over ENUM. Normalize to 3NF; denormalize only for measured hot paths.

References:

Indexing

  • Composite order: equality first, then range/sort (leftmost prefix rule).
  • Range predicates stop index usage for subsequent columns.
  • Secondary indexes include PK implicitly. Prefix indexes for long strings.
  • Audit via performance_schema — drop indexes with count_read = 0.

References:

Partitioning

  • Partition time-series (>50M rows) or large tables (>100M rows). Plan early — retrofit = full rebuild.
  • Include partition column in every unique/PK. Always add a MAXVALUE catch-all.

References:

Query Optimization

  • Check EXPLAIN — red flags: type: ALL, Using filesort, Using temporary.
  • Cursor pagination, not OFFSET. Avoid functions on indexed columns in WHERE.
  • Batch inserts (500–5000 rows). UNION ALL over UNION when dedup unnecessary.

References:

Transactions & Locking

  • Default: REPEATABLE READ (gap locks). Use READ COMMITTED for high contention.
  • Consistent row access order prevents deadlocks. Retry error 1213 with backoff.
  • Do I/O outside transactions. Use SELECT ... FOR UPDATE sparingly.

References:

Operations

  • Use online DDL (ALGORITHM=INPLACE) when possible; test on replicas first.
  • Tune connection pooling — avoid max_connections exhaustion under load.
  • Monitor replication lag; avoid stale reads from replicas during writes.

References:

Diagnostics

  • Use scripts/mysql_diag.sh to collect backend version, SQL mode, engine defaults, character set, timezone, and slow query log settings.
  • Use indexes when you need PingCAP's compact MySQL index and clustered-index guardrails.

Guardrails

  • Prefer measured evidence over blanket rules of thumb.
  • Note MySQL-version-specific behavior when giving advice.
  • Ask for explicit human approval before destructive data operations (drops/deletes/truncates).
Install via CLI
npx skills add https://github.com/wcygan/dotfiles --skill tidb-mysql
Repository Details
star Stars 192
call_split Forks 15
navigation Branch main
article Path SKILL.md
More from Creator