MySQL Local Lab Quickstart
MySQL Local Lab Quickstart
MySQL local lab quickstart 的核心責任是建立後續 ProxySQL、OSC、replication、backup 與 Vitess sandbox 共用的本地環境。這個 lab 提供可重建 MySQL instance、baseline schema、seed data 與 basic evidence。
本文的驗收標準是:你能啟動 MySQL、套用 schema、跑 sample workload、取得 processlist / InnoDB status / table count,並能 teardown 重建。
Docker Compose
Docker Compose 的核心責任是讓 lab 環境可重建。
1services:
2 mysql:
3 image: mysql:8.4
4 environment:
5 MYSQL_ROOT_PASSWORD: root_pw
6 MYSQL_DATABASE: appdb
7 MYSQL_USER: app_user
8 MYSQL_PASSWORD: app_pw
9 ports:
10 - "33069:3306"
11 command:
12 - "--performance-schema=ON"
13 - "--log-bin=mysql-bin"
14 - "--server-id=1"啟動:
1docker compose up -d
2export MYSQL_PWD=app_pw
3mysql -h 127.0.0.1 -P 33069 -u app_user appdb -e "SELECT VERSION();"Baseline Schema
Baseline schema 的核心責任是建立可測 transaction、index、binlog 與 OSC 的模型。
1mysql -h 127.0.0.1 -P 33069 -u app_user appdb <<'SQL'
2CREATE TABLE accounts (
3 id BIGINT PRIMARY KEY AUTO_INCREMENT,
4 tenant_id CHAR(36) NOT NULL,
5 owner_name VARCHAR(128) NOT NULL,
6 status ENUM('active', 'closed') NOT NULL,
7 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
8 KEY idx_accounts_tenant (tenant_id)
9) ENGINE=InnoDB;
10
11CREATE TABLE ledger_entries (
12 id BIGINT PRIMARY KEY AUTO_INCREMENT,
13 account_id BIGINT NOT NULL,
14 amount_cents BIGINT NOT NULL,
15 idempotency_key VARCHAR(128) NOT NULL,
16 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
17 UNIQUE KEY uk_ledger_idempotency (idempotency_key),
18 KEY idx_ledger_account_created (account_id, created_at),
19 CONSTRAINT fk_ledger_account FOREIGN KEY (account_id) REFERENCES accounts(id)
20) ENGINE=InnoDB;
21SQLSeed and Evidence
Seed and evidence 的核心責任是產生可重跑資料與 baseline。
1mysql -h 127.0.0.1 -P 33069 -u app_user appdb <<'SQL'
2INSERT INTO accounts(tenant_id, owner_name, status)
3VALUES ('tenant-a', 'Ada', 'active'), ('tenant-b', 'Lin', 'active');
4
5INSERT INTO ledger_entries(account_id, amount_cents, idempotency_key)
6VALUES (1, 1000, 'seed-ada-1'), (1, -200, 'seed-ada-2'), (2, 500, 'seed-lin-1');
7
8SELECT a.owner_name, SUM(l.amount_cents) AS balance_cents
9FROM accounts a JOIN ledger_entries l ON l.account_id = a.id
10GROUP BY a.owner_name;
11SQLBasic evidence:
1mysql -h 127.0.0.1 -P 33069 -u app_user appdb -e "SHOW FULL PROCESSLIST;"
2mysql -h 127.0.0.1 -P 33069 -u app_user appdb -e "SHOW TABLE STATUS;"
3mysql -h 127.0.0.1 -P 33069 -u app_user appdb -e "SHOW ENGINE INNODB STATUS\\G"Teardown
Teardown 的核心責任是讓 lab 可重跑。
1docker compose down -v完成本篇後,backup 進入 Backup Restore Drill;schema change 進入 Online Schema Change Lab;routing 進入 ProxySQL Routing Lab。