1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  MySQL replication master-slave

# MySQL replication master-slave - konfiguracja krok po kroku

Opublikowano: 9 kwietnia 2026 · Kategoria: Bazy danych

⚡ W skrócie · 8 min czytania

-   Jak skonfigurować replikację MySQL master-replica: binary log, unique server\_id, GRANT REPLICATION SLAVE, CHANGE MASTER TO, monitoring Seconds\_Behind\_Master i troubleshooting.
-   Jak działa replication.
-   Krok 1 - Konfiguracja mastera.
-   Krok 2 - Dump danych.
-   Krok 3 - Konfiguracja repliki.

Twoja baza MySQL jest pojedynczym punktem awarii? Jeden pad serwera i cała aplikacja offline? Replication to pierwszy krok do High Availability. Master obsługuje zapisy, repliki automatycznie otrzymują wszystkie zmiany i mogą obsługiwać zapytania SELECT - odciążając master i zapewniając backup "na żywo".

## Jak działa replication

MySQL replication opiera się na **binary log** - pliku zawierającym wszystkie zmiany danych (INSERT, UPDATE, DELETE, ALTER). Przepływ:

-   Master zapisuje każdą zmianę do `mysql-bin.000001` (binary log)
-   Replika uruchamia dwa wątki: **I/O thread** pobiera binary log z mastera i zapisuje do lokalnego `relay-bin`
-   **SQL thread** czyta relay log i wykonuje zapytania na lokalnej bazie repliki
-   Dane na replice są identyczne jak na master (z małym opóźnieniem 0-2s)

## Krok 1 - Konfiguracja mastera

Edytuj `/etc/mysql/mysql.conf.d/mysqld.cnf` na serwerze master:

```
[mysqld]
# Unikalny ID (musi być różny na master i każdej replice)
server-id = 1

# Włącz binary log
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW

# Retencja logów (7 dni)
binlog_expire_logs_seconds = 604800

# Opcjonalnie: tylko wybrane bazy do replikacji
# binlog_do_db = moja_baza

# Bind na LAN IP (nie localhost) - replika musi się połączyć
bind-address = 10.0.0.1
```

```
sudo systemctl restart mysql

# Utwórz użytkownika dla replikacji
mysql -u root -p
```

```
-- Na serwerze MASTER
CREATE USER 'replica_user'@'10.0.0.2' IDENTIFIED WITH mysql_native_password BY 'SilneHaslo2026!';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'10.0.0.2';
FLUSH PRIVILEGES;

-- Zablokuj tabele i zapisz pozycję binary log
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

-- Zanotuj File i Position, np.:
-- File: mysql-bin.000003 | Position: 157
```

## Krok 2 - Dump danych

W drugim terminalu (master nadal zablokowany) zrób dump całej bazy i przenieś na replikę:

```
# Na master
mysqldump -u root -p --all-databases --master-data=2 --single-transaction > dump.sql

# Prześlij na replikę
scp dump.sql root@10.0.0.2:/tmp/

# Wróć do MySQL na master i odblokuj
mysql -u root -p -e "UNLOCK TABLES;"
```

## Krok 3 - Konfiguracja repliki

Na serwerze repliki edytuj `/etc/mysql/mysql.conf.d/mysqld.cnf`:

```
[mysqld]
# Inny server-id niż master
server-id = 2

# Relay log
relay_log = /var/log/mysql/mysql-relay-bin.log

# Tylko do odczytu - nikt nie zapisuje na replice ręcznie
read_only = ON
super_read_only = ON

# Opcjonalnie: włącz binary log żeby robić kaskadową replikację
log_bin = /var/log/mysql/mysql-bin.log
```

```
# Restart i import dumpu
sudo systemctl restart mysql
mysql -u root -p < /tmp/dump.sql

# Ustaw źródło replikacji
mysql -u root -p
```

```
-- Na REPLICE (MySQL 8.0+)
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='10.0.0.1',
  SOURCE_USER='replica_user',
  SOURCE_PASSWORD='SilneHaslo2026!',
  SOURCE_LOG_FILE='mysql-bin.000003',
  SOURCE_LOG_POS=157;

START REPLICA;
SHOW REPLICA STATUS\G
```

## Monitoring replikacji

Kluczowe pola w `SHOW REPLICA STATUS`:

Pole

Oczekiwana wartość

Co sprawdzić

`Replica_IO_Running`

Yes

Jeśli No - sprawdź połączenie sieciowe, firewall, hasło

`Replica_SQL_Running`

Yes

Jeśli No - sprawdź Last\_SQL\_Error (zwykle konflikt danych)

`Seconds_Behind_Source`

0-2

Jeśli rośnie - replika nie nadąża (słaby CPU/dysk)

`Last_Error`

(puste)

Każdy błąd zatrzymuje SQL thread - wymaga interwencji

## Typowe problemy

-   **Duplicate entry błąd** - ktoś zapisał na replice (brak read\_only). Rozwiązanie: `STOP REPLICA; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START REPLICA;` lub reseed.
-   **Replika za daleko w tyle** - zbyt słaby sprzęt. Rozwiązanie: więcej RAM/CPU lub włącz parallel replication: `replica_parallel_workers = 4`.
-   **Binary log się przepełnił** - retencja za długa, dysk pełny. Skróć `binlog_expire_logs_seconds` lub ręcznie: `PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;`
-   **Replika po restarcie nie startuje automatycznie** - dodaj `skip_replica_start = OFF` w my.cnf.

**Uwaga:** Dla produkcji rozważ semi-synchronous replication (plugin `rpl_semi_sync_source`) lub MySQL Group Replication (MySQL 8.0+) dla prawdziwego HA z automatycznym failover.

Replikacja master-slave ma jeden węzeł do zapisu. Klaster multi-master z trzema węzłami MariaDB opisujemy w artykule [MySQL Galera Cluster](/baza-wiedzy/mysql-galera-cluster/).

## Najczęstsze pytania

Co to jest MySQL replication i kiedy jej używać? +

MySQL replication to mechanizm kopiowania danych z jednego serwera (master/primary) na jeden lub więcej serwerów (replica/slave) w czasie rzeczywistym. Używasz jej gdy: chcesz mieć zapasowy serwer w razie awarii (HA), rozdzielić zapytania SELECT na wiele maszyn (read scaling), tworzyć backup bez obciążania master, albo mieć geograficznie rozproszone repliki dla niższego latency.

Jaka jest różnica między asynchronous i semi-synchronous replication? +

Asynchronous (domyślny): master zapisuje transakcję i od razu zwraca OK klientowi, replika dostaje ją z opóźnieniem. Szybki, ale w razie awarii mastera możesz stracić ostatnie transakcje. Semi-synchronous: master czeka aż przynajmniej jedna replika potwierdzi otrzymanie zmian przed zwróceniem OK. Bezpieczniejszy, ale wolniejszy (+2-10ms na transakcję). W praktyce: dla produkcji z krytycznymi danymi - semi-sync.

Czy replication zastępuje backup? +

NIE. Replication kopiuje wszystkie zmiany natychmiast - w tym błędy. Jeśli ktoś wykona DROP TABLE users na master, komenda natychmiast trafi na wszystkie repliki i dane znikną wszędzie. Replication zapewnia HA (wysoką dostępność), ale nadal potrzebujesz klasycznych backupów (mysqldump/xtrabackup) do odzyskiwania po błędach ludzkich lub atakach ransomware.

Jak sprawdzić czy replication działa poprawnie? +

Na replice: SHOW REPLICA STATUS\\G (MySQL 8.0+) lub SHOW SLAVE STATUS\\G (starsze). Sprawdź: Slave\_IO\_Running: Yes, Slave\_SQL\_Running: Yes, Seconds\_Behind\_Master: 0 lub niska wartość, Last\_Error: pusty. Jeśli Seconds\_Behind\_Master rośnie - replika nie nadąża. Jeśli widzisz błąd - zatrzymaj replikację (STOP REPLICA) i zdiagnozuj przyczynę przed restartem.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z rootem - 2 instancje VPS to kompletny setup master + replica

Root MySQL

[Aktywuj rabat →](/out/contabo/#reklama "Contabo")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo/)

Mikrus

Budżetowy VPS idealny jako replica read-only dla mniejszych projektów

Tanio replica

[Aktywuj rabat →](/out/mikrus/#reklama "Mikrus")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus/)

LH.pl

Hosting zarządzany z backupami MySQL - bez setupu replikacji

Managed MySQL

[Aktywuj rabat →](/out/lh-pl/#reklama "LH.pl")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl/)

## Powiązane strony

-   [MySQL na hostingu - konfiguracja](/baza-wiedzy/mysql-baza-danych-hosting/)
-   [MySQL slow query log - optymalizacja](/baza-wiedzy/mysql-slow-query-log/)
-   [Strategia backupów - zasada 3-2-1](/baza-wiedzy/backup-strategia-hosting/)
-   [Wszystkie artykuły](/baza-wiedzy/)
-   [MySQL replikacja - konfiguracja master-replica
    
    MySQL replikacja asynchroniczna: konfiguracja mastera (server-id, binlog), CHANGE REPLICATION SOURCE TO, SHOW REPLICA…
    
    ](/baza-wiedzy/mysql-replikacja-master-replica/)
-   [PostgreSQL streaming replication - konfiguracja primary i standby
    
    PostgreSQL streaming replication: wal\_level, max\_wal\_senders, pg\_basebackup, standby.signal, primary\_conninfo,…
    
    ](/baza-wiedzy/postgresql-replikacja-streaming/)
-   [MySQL - optymalizacja i konfiguracja my.cnf
    
    my.cnf dyrektywy: innodb\_buffer\_pool\_size (60-70% RAM), max\_connections, slow query log. Gotowe konfiguracje dla VPS 2…
    
    ](/baza-wiedzy/mysql-optymalizacja-konfiguracja/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 20 maja 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)