|
| 1 | +#!/bin/bash |
| 2 | +# Start a 2-shard MySQL demo environment |
| 3 | +set -e |
| 4 | + |
| 5 | +echo "=== Starting 2-shard MySQL demo ===" |
| 6 | + |
| 7 | +# Shard 1: users with id 1-5, orders for those users |
| 8 | +docker run -d --name parsersql-shard1 \ |
| 9 | + -p 13306:3306 \ |
| 10 | + -e MYSQL_ROOT_PASSWORD=test \ |
| 11 | + -e MYSQL_DATABASE=testdb \ |
| 12 | + mysql:8.0 2>/dev/null || true |
| 13 | + |
| 14 | +# Shard 2: users with id 6-10, orders for those users |
| 15 | +docker run -d --name parsersql-shard2 \ |
| 16 | + -p 13307:3306 \ |
| 17 | + -e MYSQL_ROOT_PASSWORD=test \ |
| 18 | + -e MYSQL_DATABASE=testdb \ |
| 19 | + mysql:8.0 2>/dev/null || true |
| 20 | + |
| 21 | +echo "Waiting for Shard 1..." |
| 22 | +until docker exec parsersql-shard1 mysql -uroot -ptest -e "SELECT 1" &>/dev/null 2>&1; do sleep 1; done |
| 23 | +echo "Shard 1 ready" |
| 24 | + |
| 25 | +echo "Waiting for Shard 2..." |
| 26 | +until docker exec parsersql-shard2 mysql -uroot -ptest -e "SELECT 1" &>/dev/null 2>&1; do sleep 1; done |
| 27 | +echo "Shard 2 ready" |
| 28 | + |
| 29 | +echo "Loading data into Shard 1 (users 1-5)..." |
| 30 | +docker exec -i parsersql-shard1 mysql -uroot -ptest testdb <<'SQL' |
| 31 | +DROP TABLE IF EXISTS orders; |
| 32 | +DROP TABLE IF EXISTS users; |
| 33 | +
|
| 34 | +CREATE TABLE users ( |
| 35 | + id INT PRIMARY KEY, |
| 36 | + name VARCHAR(255) NOT NULL, |
| 37 | + age INT, |
| 38 | + dept VARCHAR(100), |
| 39 | + salary DECIMAL(10,2) |
| 40 | +); |
| 41 | +
|
| 42 | +CREATE TABLE orders ( |
| 43 | + id INT PRIMARY KEY, |
| 44 | + user_id INT, |
| 45 | + total DECIMAL(10,2), |
| 46 | + status VARCHAR(50), |
| 47 | + created_at DATE |
| 48 | +); |
| 49 | +
|
| 50 | +INSERT INTO users VALUES |
| 51 | + (1, 'Alice', 30, 'Engineering', 95000.00), |
| 52 | + (2, 'Bob', 25, 'Sales', 65000.00), |
| 53 | + (3, 'Carol', 35, 'Engineering', 110000.00), |
| 54 | + (4, 'Dave', 28, 'Marketing', 70000.00), |
| 55 | + (5, 'Eve', 32, 'Engineering', 105000.00); |
| 56 | +
|
| 57 | +INSERT INTO orders VALUES |
| 58 | + (101, 1, 150.00, 'completed', '2024-01-15'), |
| 59 | + (102, 2, 75.50, 'pending', '2024-02-20'), |
| 60 | + (103, 1, 200.00, 'completed', '2024-03-10'), |
| 61 | + (104, 3, 50.00, 'cancelled', '2024-01-25'), |
| 62 | + (105, 5, 300.00, 'completed', '2024-04-05'); |
| 63 | +SQL |
| 64 | + |
| 65 | +echo "Loading data into Shard 2 (users 6-10)..." |
| 66 | +docker exec -i parsersql-shard2 mysql -uroot -ptest testdb <<'SQL' |
| 67 | +DROP TABLE IF EXISTS orders; |
| 68 | +DROP TABLE IF EXISTS users; |
| 69 | +
|
| 70 | +CREATE TABLE users ( |
| 71 | + id INT PRIMARY KEY, |
| 72 | + name VARCHAR(255) NOT NULL, |
| 73 | + age INT, |
| 74 | + dept VARCHAR(100), |
| 75 | + salary DECIMAL(10,2) |
| 76 | +); |
| 77 | +
|
| 78 | +CREATE TABLE orders ( |
| 79 | + id INT PRIMARY KEY, |
| 80 | + user_id INT, |
| 81 | + total DECIMAL(10,2), |
| 82 | + status VARCHAR(50), |
| 83 | + created_at DATE |
| 84 | +); |
| 85 | +
|
| 86 | +INSERT INTO users VALUES |
| 87 | + (6, 'Frank', 45, 'Engineering', 130000.00), |
| 88 | + (7, 'Grace', 29, 'Sales', 68000.00), |
| 89 | + (8, 'Heidi', 38, 'Marketing', 85000.00), |
| 90 | + (9, 'Ivan', 27, 'Engineering', 90000.00), |
| 91 | + (10, 'Judy', 33, 'Sales', 72000.00); |
| 92 | +
|
| 93 | +INSERT INTO orders VALUES |
| 94 | + (106, 6, 500.00, 'completed', '2024-02-01'), |
| 95 | + (107, 7, 125.00, 'pending', '2024-03-15'), |
| 96 | + (108, 8, 250.00, 'completed', '2024-01-30'), |
| 97 | + (109, 9, 80.00, 'completed', '2024-04-10'), |
| 98 | + (110, 10, 175.00, 'cancelled', '2024-02-28'); |
| 99 | +SQL |
| 100 | + |
| 101 | +echo "" |
| 102 | +echo "=== Sharding Demo Ready ===" |
| 103 | +echo "" |
| 104 | +echo "Shard 1 (port 13306): users 1-5 (Alice, Bob, Carol, Dave, Eve)" |
| 105 | +echo "Shard 2 (port 13307): users 6-10 (Frank, Grace, Heidi, Ivan, Judy)" |
| 106 | +echo "" |
| 107 | +echo "Each shard has 5 users and 5 orders." |
| 108 | +echo "Total: 10 users, 10 orders across 2 shards." |
| 109 | +echo "" |
| 110 | +echo "To run the demo:" |
| 111 | +echo ' ./scripts/run_sharding_demo.sh' |
| 112 | +echo "" |
| 113 | +echo "To stop:" |
| 114 | +echo ' docker rm -f parsersql-shard1 parsersql-shard2' |
0 commit comments