====== MySQL Replication ====== Replication is a mechanism where: data from a primary (master) database is copied to one or more replica (slave) databases Goal: improve read performance increase availability enable backup / disaster recovery scale database horizontally (read scaling) ===== Basic Architecture ===== Write (INSERT/UPDATE/DELETE) ↓ PRIMARY DB ↓ (replication) ┌───────────┴───────────┐ ↓ ↓ REPLICA 1 REPLICA 2 (read-only) (read-only) ===== How Replication Works ===== ===== Step-by-step ===== Application writes to Primary INSERT INTO users VALUES (...); Primary records change in: binary log (binlog) binlog = history of all changes Replica reads binlog via IO thread Replica applies changes via SQL thread ===== Result ===== Primary = source of truth Replicas = copies (slightly delayed) ===== Real Example ===== User registers: Write → Primary DB Then: Replica DB receives update after ~10–200ms delay This delay is called: Replication Lag ====== Types of Replication ====== ===== 1. Asynchronous Replication ===== Most common. Primary → Replica (no wait) Meaning: Primary does NOT wait for replica fastest write performance possible small data delay ===== 2. Semi-Synchronous Replication ===== Primary waits for at least 1 replica ACK Pros: safer than async Cons: slower writes ===== 3. Synchronous Replication ===== Primary waits for ALL replicas Pros: strongest consistency Cons: slowest performance (MySQL rarely uses full sync in practice) ====== Why Use Replication? ====== ===== 1. Read Scaling ===== Most apps: 80% reads 20% writes So: Primary → writes only Replicas → handle reads Example: GET /users → Replica DB POST /users → Primary DB ===== 2. High Availability ===== If Primary fails: promote a replica to new primary => system still works ===== 3. Backup Safety ===== Run backups on replica instead of primary: reduces load on production DB ====== Common Architecture ====== App / \ WRITE READ ↓ ↓ PRIMARY REPLICA(s) ====== Replication Lag ====== ===== What is it? ===== Delay between: data written in primary data appearing in replica ===== Example ===== User updates profile → Primary updated immediately → Replica updated after 100ms ===== Problem ===== If user reads from replica immediately: may see old data ===== Solution ===== Strategies: read-your-write → always read from primary after write or accept eventual consistency ====== Common Problems ====== ===== 1. Data Inconsistency ===== Replica is not always up-to-date. ===== 2. Lag Under Heavy Load ===== If traffic is high: replica cannot keep up lag increases ===== 3. Failover Complexity ===== Need tools like: ProxySQL Orchestrator Kubernetes operators ====== Production Example ====== Primary: 1 DB (writes) Replicas: 2–5 DBs (reads) Traffic split: 90% reads → replicas 10% writes → primary ====== Summary ====== ^ Concept ^ Meaning ^ | Primary DB | Handles writes | | Replica DB | Copies data from primary | | Binlog | Change log of primary | | Replication Lag | Delay between primary and replica | | Async Replication | Fast but eventual consistency | | Sync Replication | Strong consistency but slow | | Use Case | Read scaling + high availability |