Česky na konci článku.

MySQL replication is one of the most widely used technologies for building scalable and highly available database environments.

But there is an important distinction:

Having a replica does not automatically mean having a reliable HA architecture.

A production MySQL environment must consider much more than simply copying data from one server to another.

You need to understand:

  • replication lag
  • binary logs
  • GTID
  • failover
  • read/write splitting
  • semi-synchronous replication
  • replication consistency
  • backups
  • point-in-time recovery
  • connection handling
  • monitoring
  • split-brain scenarios
  • automation

The difference between a replicated MySQL environment and a reliable MySQL platform is significant.


The Basic MySQL Replication Architecture

A traditional MySQL topology might look like this:

Application
|
Proxy / Pool
|
PRIMARY
|
Binary Log
|
+———–+———–+
| |
Replica 1 Replica 2

The primary processes writes and generates binary log events.

Replicas retrieve those events and apply them locally.

This architecture is simple and extremely useful.

But there is an important question:

How far behind are the replicas?


Replication Lag Is a Reliability Problem

Suppose the primary has processed transactions up to:

GTID: 100000

while a replica has processed:

GTID: 99800

The replica is behind.

If the primary suddenly fails, the replica may not contain the latest 200 transactions.

This creates a potential data-loss window.

Replication lag therefore affects both:

performance

and

RPO.

A production monitoring system should not simply report:

Replica: ONLINE

It should answer:

How current is this replica?


Seconds Behind Source Is Not the Whole Story

A common MySQL monitoring metric is:

SHOW REPLICA STATUS\G

and historically:

Seconds_Behind_Master

This metric is useful, but it should not be treated as the only indicator of replication health.

A replica can report a low value while other problems exist.

For example:

  • network interruptions
  • SQL thread bottlenecks
  • I/O thread problems
  • long-running transactions
  • replica storage problems
  • delayed execution
  • inconsistent workload behavior

A better monitoring model considers multiple signals:

Replication Health
|
+—————-+—————-+
| | |
IO Thread SQL Thread GTID State
| | |
Network Apply Position
| | |
Receive Replay Consistency

GTID Makes Failover Easier

Global Transaction Identifiers are one of the most important features for modern MySQL replication.

Instead of relying only on binary log file names and positions, transactions can be identified using GTIDs.

Conceptually:

Primary
|
| GTID 100
| GTID 101
| GTID 102
| GTID 103
↓
Replica
|
| 100
| 101
| 102

This makes replication topology management significantly easier.

When a replica is promoted, other replicas can determine which transactions they already have.

GTID is particularly valuable in environments where automated failover is required.


Failover Is More Than Promoting a Replica

A naive failover procedure looks like:

Primary fails
↓
Promote Replica
↓
Done

Real production failover is more complicated.

You also need to consider:

Primary failure
↓
Detect failure
↓
Confirm failure
↓
Select best replica
↓
Stop conflicting writes
↓
Promote replica
↓
Update topology
↓
Redirect applications
↓
Validate writes
↓
Reconfigure remaining replicas

Every step represents a potential failure.

This is why automated failover must be carefully designed and tested.


The Most Dangerous Problem: Split Brain

Imagine a network failure.

The application cannot reach the primary.

But the primary itself is still running.

At the same time, an administrator or automation promotes a replica.

Now you have:

NETWORK PARTITION
|
+———+———+
| |
PRIMARY NEW PRIMARY
| |
Writes Writes

Two servers believe they are primary.

This is split brain.

The result can be extremely difficult to reconcile.

For critical systems, failover therefore requires a reliable mechanism for determining which node is authoritative.


MySQL InnoDB Cluster

For modern MySQL environments, InnoDB Cluster provides an integrated approach to high availability.

A simplified architecture:

MySQL Router
|
+———+———+
| | |
MySQL MySQL MySQL
1 2 3
\ | /
\ | /
Group Replication
|
MySQL Shell

The architecture combines:

  • MySQL Group Replication
  • MySQL Router
  • MySQL Shell

This can provide automatic membership management and failover behavior.

The important point is that HA is treated as a system, rather than simply as replication between two servers.


Group Replication Changes the Model

Traditional asynchronous replication often looks like:

Primary → Replica

Group Replication creates a group of MySQL servers that communicate with each other.

Conceptually:

MySQL 1
/ \
/ \
MySQL 2 —- MySQL 3

The group can determine membership and coordinate transactions.

This is particularly useful when building automated HA architectures.

But Group Replication also introduces additional complexity.

It does not eliminate the need to understand:

  • transaction conflicts
  • network latency
  • quorum
  • group membership
  • consistency
  • recovery
  • flow control

Asynchronous vs Semi-Synchronous Replication

Traditional asynchronous replication provides excellent performance.

The primary does not have to wait for a replica to confirm receipt before continuing.

But this creates a potential data-loss window.

Semi-synchronous replication changes the durability trade-off.

Conceptually:

Asynchronous

Application
↓
Primary commits
↓
Application continues
Replica receives later

Semi-synchronous

Application
↓
Primary
↓
Replica acknowledgement
↓
Commit continues

This can reduce the amount of data that could be lost during a primary failure.

But it can also increase transaction latency.

There is no universal answer.

The correct configuration depends on the required RPO and performance characteristics.


Binary Logs Are Critical for Recovery

The binary log is not simply a replication mechanism.

It is also an important recovery component.

A production MySQL environment should normally combine:

Database
|
+—- Backup
|
+—- Binary Logs
|
↓
Point-in-Time Recovery

This makes it possible to restore a backup and then replay binary logs up to a specific point in time.

For example:

Restore the backup from 02:00 and replay transactions until 13:42:17.

This is fundamentally different from simply having a current replica.


Replicas Do Not Replace Backups

Consider this:

An administrator accidentally runs:

DROP DATABASE production;

Replication works perfectly.

The command is replicated.

The replica executes it.

Now both systems have lost the database.

Replication did exactly what it was designed to do.

It replicated the change.

This is why:

Replication protects availability. Backups protect recoverability.

A mature MySQL environment needs both.


Backup Validation Is Essential

A successful backup job does not prove that you can recover.

You need to test restoration.

A reliable process looks like:

Backup
↓
Verification
↓
Restore
↓
Integrity Check
↓
Application Validation
↓
Recovery Report

The important metric is not:

Number of successful backups

but:

Number of successfully tested recoveries.


Storage Can Break Replication

A MySQL replica can be perfectly healthy from the network perspective and still fall behind because storage cannot keep up.

For example:

Primary
↓
100,000 transactions/sec
↓
Replica
↓
Disk cannot keep up

The SQL thread begins accumulating work.

Replication lag grows.

Eventually:

Replication Lag
5 sec
30 sec
2 min
10 min
30 min

The replica may still appear:

ONLINE

but its value as an HA target is rapidly decreasing.

Monitoring therefore needs to consider storage latency and I/O capacity, not just replication status.


Long Transactions Can Create Problems

Long-running transactions can affect replication behavior significantly.

Imagine a transaction that runs for 45 minutes.

Other transactions may continue to accumulate behind it depending on the workload and replication configuration.

This can lead to:

  • replication lag
  • increased undo usage
  • longer recovery
  • lock contention
  • unexpected resource consumption

Database reliability therefore requires monitoring transaction behavior as well as server health.


Connection Failover Is Part of Database HA

Imagine that MySQL fails over successfully.

The new primary is ready.

But the application still has connections pointing to the old server.

From the database perspective:

Failover succeeded.

From the business perspective:

The application is still down.

The complete architecture should therefore look more like:

Application
|
Connection Pool
|
MySQL Router / Proxy
|
+—————-+
| |
Primary Replica
|
Replication

Database HA is only successful when applications can actually use the new primary.


Monitoring Should Focus on Failure Conditions

A basic monitoring dashboard might show:

CPU: 35%
RAM: 60%
Disk: 45%
MySQL: UP

That looks healthy.

But it does not answer the most important questions.

A reliability-focused dashboard should also show:

  • replication lag
  • GTID differences
  • binary log retention
  • replica SQL thread status
  • replica I/O status
  • transaction throughput
  • disk latency
  • connection saturation
  • long-running transactions
  • failed replication events
  • backup status
  • recovery test status

The question isn’t:

“Is MySQL running?”

It is:

“Can MySQL continue to provide the business service if something fails?”


Automation Should Be Based on Evidence

Automated failover should not simply react to:

Ping failed

A server may fail a ping while MySQL itself is still functioning.

Or the network may be temporarily unavailable.

A safer decision process can include:

Health Check
↓
MySQL State
↓
Replication State
↓
Cluster Membership
↓
Quorum / Consensus
↓
Failover Decision

The more critical the database, the more carefully these conditions should be designed.


MySQL HA Needs Regular Failure Testing

A production HA system should periodically test:

Primary failure

Can another server become primary?

Network failure

Can the cluster avoid split brain?

Replica failure

Can replication recover correctly?

Storage failure

What happens when disk performance collapses?

Backup failure

Can we detect an unusable backup?

Data corruption

Can we restore a known-good copy?

Application failure

Can connection pools reconnect?

Testing these scenarios turns theoretical HA into operational confidence.


A Practical MySQL Reliability Architecture

For a critical environment, a reasonable architecture might look like:

Applications
|
Connection Pool
|
MySQL Router
|
+—————+—————+
| | |
MySQL 1 MySQL 2 MySQL 3
\ | /
\ | /
+—— Group Replication —+
|
Binary Log / Backup
|
Object Storage
|
Point-in-Time Recovery

Around the entire architecture:

Monitoring
Alerting
Automation
Security
Capacity Management
Recovery Testing

The technology is only one part.

The operational processes are equally important.


The DBA’s Role Is Changing

Traditional MySQL administration focused heavily on:

  • server configuration
  • user management
  • backups
  • replication
  • troubleshooting

Modern MySQL reliability engineering adds:

  • automation
  • Infrastructure as Code
  • observability
  • automated failover
  • recovery testing
  • cloud infrastructure
  • capacity planning
  • failure testing
  • platform engineering

The DBA is increasingly becoming the engineer responsible for the reliability of the database platform, not simply the database server.


Final Takeaway

MySQL replication is powerful.

But a replica is not automatically a recovery strategy.

A reliable MySQL environment needs to combine:

  • replication
  • GTID
  • appropriate consistency guarantees
  • binary logs
  • backups
  • point-in-time recovery
  • monitoring
  • automated or well-defined failover
  • application connection management
  • capacity planning
  • recovery testing

The most important question is not:

“Do we have a MySQL replica?”

It is:

“If the primary disappears right now, can we prove that the business will continue operating and that our data will remain within the required RTO and RPO?”

That is the difference between MySQL replication and MySQL Database Reliability Engineering.


About the Author

Tomas Solar
Principal Database Reliability Engineer

20+ years of experience with Oracle, PostgreSQL, MySQL, SQL Server and MongoDB.

Specialized in database reliability, HA/DR, performance engineering, automation, migrations and database architecture.

Experience with MySQL replication, GTID, InnoDB, high availability and enterprise database environments.

Replication gives you another server. Reliability engineering gives you a database platform you can trust when the primary fails.

Vysoká dostupnost MySQL: Proč samotná replikace nestačí

MySQL replikace patří mezi nejčastěji používané technologie pro škálování a zajištění vysoké dostupnosti databázových prostředí.

Je ale důležité rozlišovat:

Mít repliku neznamená automaticky mít spolehlivou HA architekturu.

Produkční MySQL prostředí musí řešit mnohem více než pouze kopírování dat z jednoho serveru na druhý.

Je potřeba rozumět například:

  • replication lag
  • binary logům
  • GTID
  • failoveru
  • read/write splitu
  • semi-synchronní replikaci
  • konzistenci replikace
  • zálohování
  • point-in-time recovery
  • práci s připojením aplikace
  • monitoringu
  • split-brain scénářům
  • automatizaci

Rozdíl mezi replikovaným MySQL prostředím a skutečně spolehlivou MySQL platformou je značný.


Základní architektura MySQL replikace

Tradiční MySQL topologie může vypadat například takto:

Aplikace
|
Proxy / Pool
|
PRIMARY
|
Binary Log
|
+———-+———-+
| |
Replica 1 Replica 2

Primary zpracovává zápisy a generuje události do binary logu.

Repliky tyto události přebírají a aplikují lokálně.

Tato architektura je jednoduchá a velmi užitečná.

Důležitá otázka ale zní:

Jak moc jsou repliky pozadu?


Replication lag je problém spolehlivosti

Představme si, že primary zpracoval transakce až do:

GTID: 100000

zatímco replika zpracovala:

GTID: 99800

Replika je pozadu.

Pokud primary náhle selže, replika nemusí obsahovat posledních 200 transakcí.

Vzniká tak potenciální okno ztráty dat.

Replication lag proto ovlivňuje současně:

výkon

i

RPO.

Produkční monitoring by proto neměl pouze hlásit:

Replica: ONLINE

Měl by odpovědět na otázku:

Jak aktuální je tato replika?


Seconds_Behind_Source není celý příběh

Běžnou metrikou MySQL replikace je například:

SHOW REPLICA STATUS\G

a historicky známá hodnota:

Seconds_Behind_Master

Tato metrika je užitečná, ale neměla by být jediným indikátorem zdraví replikace.

Replika může vykazovat nízkou hodnotu a přesto mít jiný problém.

Například:

  • výpadek sítě
  • problém I/O threadu
  • problém SQL threadu
  • dlouhou transakci
  • problém se storage
  • zpožděné zpracování
  • nekonzistentní chování workloadu

Lepší monitoring sleduje více signálů:

Stav replikace
|
+————+————+
| | |
I/O thread SQL thread GTID stav
| | |
Síť Apply Pozice
| | |
Receive Replay Konzistence

GTID usnadňuje failover

Global Transaction Identifiers patří mezi nejdůležitější funkce moderní MySQL replikace.

Místo spoléhání pouze na názvy a pozice v binary logu lze transakce identifikovat pomocí GTID.

Zjednodušeně:

Primary
|
| GTID 100
| GTID 101
| GTID 102
| GTID 103
↓
Replica
|
| 100
| 101

To výrazně usnadňuje správu topologie.

Při povýšení repliky mohou ostatní servery určit, které transakce už mají.

GTID je proto velmi důležitý při návrhu automatického failoveru.


Failover není jen povýšení repliky

Naivní failover vypadá takto:

Primary selže
↓
Promote Replica
↓
Hotovo

V produkčním prostředí je to mnohem složitější.

Je potřeba například:

Výpadek primary
↓
Detekce problému
↓
Potvrzení výpadku
↓
Výběr nejlepší repliky
↓
Zastavení konfliktních zápisů
↓
Promote replica
↓
Aktualizace topologie
↓
Přesměrování aplikací
↓
Validace zápisů
↓
Překonfigurování ostatních replik

Každý z těchto kroků může selhat.

Proto musí být automatický failover pečlivě navržen a testován.


Nejnebezpečnější problém: Split-brain

Představme si výpadek sítě.

Aplikace se nedostane na primary.

Primary ale stále běží.

Současně administrátor nebo automatizace povýší repliku.

Vznikne:

VÝPADEK SÍTĚ
|
+———+———+
| |
PRIMARY NEW PRIMARY
| |
Writes Writes

Oba servery se považují za primary.

To je split-brain.

Výsledkem mohou být konfliktní zápisy a velmi obtížně řešitelný stav.

U kritických systémů proto musí failover obsahovat mechanismus, který spolehlivě určí, který uzel je skutečně autoritativní.


MySQL InnoDB Cluster

Pro moderní MySQL prostředí nabízí InnoDB Cluster integrovaný přístup k vysoké dostupnosti.

Zjednodušená architektura:

MySQL Router
|
+———+———+
| | |
MySQL MySQL MySQL
1 2 3
\ | /
\ | /
Group Replication
|
MySQL Shell

Architektura kombinuje:

  • MySQL Group Replication
  • MySQL Router
  • MySQL Shell

HA tak není pouze otázkou replikace mezi dvěma servery.

Je řešena jako celý systém.


Group Replication mění způsob uvažování

Tradiční asynchronní replikace často vypadá:

Primary → Replica

Group Replication vytváří skupinu MySQL serverů, které mezi sebou komunikují.

Zjednodušeně:

MySQL 1
/ \
/ \
MySQL 2 —- MySQL 3

Skupina dokáže koordinovat členství a transakce.

Je to velmi užitečné při návrhu automatického HA.

Současně ale přidává další komplexitu.

DBA musí rozumět například:

  • konfliktům transakcí
  • síťové latenci
  • quorum
  • členství v clusteru
  • konzistenci
  • recovery
  • flow control

Asynchronní vs. semi-synchronní replikace

Klasická asynchronní replikace poskytuje velmi dobrý výkon.

Primary nemusí čekat, až replika potvrdí přijetí transakce.

Nevýhodou je potenciální okno ztráty dat.

Semi-synchronní replikace mění kompromis mezi výkonem a odolností.

Asynchronní

Aplikace
↓
Primary commit
↓
Aplikace pokračuje
Replica přijme později

Semi-synchronní

Aplikace
↓
Primary
↓
Potvrzení repliky
↓
Commit pokračuje

Semi-synchronní replikace může snížit množství dat, která mohou být při výpadku primary ztracena.

Současně ale může zvýšit latenci transakcí.

Neexistuje univerzálně správná volba.

Rozhodnutí musí vycházet z požadovaného RPO a výkonových požadavků.


Binary log je důležitý také pro recovery

Binary log není pouze mechanismus replikace.

Je také důležitou součástí recovery.

Produkční MySQL prostředí by mělo kombinovat:

Database
|
+—- Backup
|
+—- Binary Logs
|
↓
Point-in-Time Recovery

Můžeme například obnovit zálohu z 02:00 a následně přehrát binary log až do:

13:42:17

To je zásadně jiné než mít pouze aktuální repliku.


Repliky nenahrazují zálohy

Představme si, že administrátor omylem spustí:

DROP DATABASE production;

Replikace funguje perfektně.

Příkaz se zreplikuje.

Replika ho provede.

Nyní je databáze pryč na obou systémech.

Replikace udělala přesně to, k čemu byla určena:

zreplikovala změnu.

Proto platí:

Replikace chrání dostupnost. Zálohy chrání obnovitelnost.

Vyspělé MySQL prostředí potřebuje obojí.


Validace záloh je zásadní

Úspěšně dokončená záloha ještě neznamená, že ji dokážeme použít.

Je potřeba testovat obnovu.

Správný proces může vypadat takto:

Backup
↓
Ověření
↓
Restore
↓
Kontrola integrity
↓
Validace aplikace
↓
Recovery report

Důležitá metrika proto není:

Počet úspěšných záloh

ale:

Počet úspěšně otestovaných obnov.


Storage může rozbít replikaci

MySQL replika může být z pohledu sítě zdravá, ale přesto může zaostávat kvůli pomalému storage.

Například:

Primary
↓
100 000 transakcí/s
↓
Replica
↓
Disk nestíhá

SQL thread začne hromadit práci.

Replication lag roste.

Například:

5 sekund
30 sekund
2 minuty
10 minut
30 minut

Replika může stále vypadat:

ONLINE

Její hodnota jako HA cíle ale rychle klesá.

Monitoring proto musí sledovat také storage latency a I/O kapacitu, nikoli pouze stav replikace.


Dlouhé transakce mohou způsobit problémy

Dlouhotrvající transakce mohou mít významný dopad na replikaci.

Představme si transakci běžící 45 minut.

V závislosti na workloadu a konfiguraci mohou za ní vznikat další změny.

To může způsobit:

  • replication lag
  • zvýšenou spotřebu undo
  • delší recovery
  • lock contention
  • nečekanou spotřebu zdrojů

Spolehlivost databáze proto vyžaduje monitoring transakcí stejně jako monitoring serveru.


Failover připojení je součástí HA

Představme si, že MySQL failover proběhne dokonale.

Nový primary je připraven.

Aplikace ale stále používá spojení na starý server.

Z pohledu databáze:

Failover uspěl.

Z pohledu businessu:

Aplikace stále nefunguje.

Celá architektura proto musí vypadat spíše takto:

Application
|
Connection Pool
|
MySQL Router / Proxy
|
+—————-+
| |
Primary Replica
|
Replication

Databázové HA je úspěšné teprve tehdy, když aplikace skutečně dokáže používat nový primary.


Monitoring musí sledovat podmínky selhání

Základní dashboard může ukazovat:

CPU: 35 %
RAM: 60 %
Disk: 45 %
MySQL: UP

Všechno vypadá zdravě.

Neodpovídá to ale na nejdůležitější otázky.

Reliability-oriented monitoring by měl sledovat také:

  • replication lag
  • rozdíl GTID
  • stav binary logu
  • stav I/O threadu
  • stav SQL threadu
  • transaction throughput
  • disk latency
  • počet připojení
  • dlouhé transakce
  • chyby replikace
  • stav záloh
  • výsledky recovery testů

Otázka tedy není:

„Běží MySQL?“

Ale:

„Dokáže MySQL poskytovat business službu, pokud něco selže?“


Automatizace musí vycházet z více signálů

Automatický failover by neměl reagovat pouze na:

Ping failed

Server může například přestat odpovídat na ping, ale MySQL může stále fungovat.

Nebo může být síť pouze dočasně nedostupná.

Bezpečnější rozhodovací proces může být:

Health Check
↓
MySQL State
↓
Replication State
↓
Cluster Membership
↓
Quorum / Consensus
↓
Failover Decision

Čím kritičtější databáze, tím důležitější je přesně definovat tyto podmínky.


MySQL HA musí být pravidelně testována

Produkční HA prostředí by mělo pravidelně testovat:

Výpadek primary

Dokáže se jiný server stát primary?

Výpadek sítě

Dokáže cluster zabránit split-brain?

Výpadek repliky

Dokáže se replikace správně obnovit?

Výpadek storage

Co se stane, když výrazně klesne výkon disku?

Selhání zálohy

Dokážeme odhalit nepoužitelnou zálohu?

Poškození dat

Dokážeme obnovit známou správnou kopii?

Výpadek aplikace

Dokážou connection pooly znovu navázat spojení?

Testování těchto scénářů mění teoretickou HA architekturu na skutečnou provozní jistotu.


Praktická architektura spolehlivého MySQL prostředí

Pro kritické prostředí může například vypadat:

Applications
|
Connection Pool
|
MySQL Router
|
+—————+—————+
| | |
MySQL 1 MySQL 2 MySQL 3
\ | /
\ | /
+—— Group Replication —+
|
Binary Log / Backup
|
Object Storage
|
Point-in-Time Recovery

Nad celou architekturou:

Monitoring
Alerting
Automation
Security
Capacity Management
Recovery Testing

Technologie je pouze jedna část.

Stejně důležité jsou provozní procesy.


Role DBA se mění

Tradiční MySQL administrace byla zaměřena především na:

  • konfiguraci serveru
  • správu uživatelů
  • zálohy
  • replikaci
  • troubleshooting

Moderní MySQL reliability engineering přidává:

  • automatizaci
  • Infrastructure as Code
  • observability
  • automatický failover
  • testování recovery
  • cloud infrastrukturu
  • capacity planning
  • failure testing
  • platform engineering

DBA se tak stále více stává člověkem odpovědným za spolehlivost celé databázové platformy, nikoli pouze jednotlivého databázového serveru.


Závěr

MySQL replikace je velmi silný nástroj.

Ale replika není automaticky recovery strategie.

Spolehlivé MySQL prostředí musí kombinovat:

  • replikaci
  • GTID
  • vhodnou úroveň konzistence
  • binary log
  • zálohy
  • point-in-time recovery
  • monitoring
  • automatický nebo dobře definovaný failover
  • správu aplikačních spojení
  • capacity planning
  • testování recovery

Nejdůležitější otázka tedy není:

„Máme MySQL repliku?“

Ale:

„Pokud primary právě teď zmizí, dokážeme prokázat, že business bude pokračovat a data zůstanou v požadovaném RTO a RPO?“

To je rozdíl mezi MySQL replikací a MySQL Database Reliability Engineering.


O autorovi

Tomas Solar
Principal Database Reliability Engineer

Více než 20 let zkušeností s Oracle, PostgreSQL, MySQL, SQL Server a MongoDB.

Specializace na databázovou spolehlivost, HA/DR, performance engineering, automatizaci, migrace a databázovou architekturu.

Zkušenosti s MySQL replikací, GTID, InnoDB, vysokou dostupností a enterprise databázovými prostředími.

Replikace vám dá další server. Reliability engineering vám dá databázovou platformu, které můžete věřit, když primary selže.



Komentáře