Hlavní navigace

MySQL: Master - Slave replikace

Zdeněk Hásek

Pokud jste si někdy přáli mít stejná data ze své MySQL databáze na více místech najednou, tak tento článek vás jistě potěší. Dnes si totiž ukážeme Master – Slave replikaci na MySQL, což je databázová funkce, která přesně toto dělá. Řekneme si také proč je dobré replikovat a také si ukážeme, jak na to.

Občas se muže hodit replikovat data z jednoho místa na druhé. Pokud máte data, která chcete replikovat, v databázi MySQL, můžete se radovat, replikace je v MySQL přímo zabudovaná stačí tedy jen nastavit.

Proč vlastně tedy replikovat?

Replikace MySQL se muže hodit hned z několika důvodů: Když například máte databázi s několika tisíci uživateli a postupem času zjistíte, že pouhé backupy MySQL nestačí a nebo potřebujete ukočírovat vysoký load. To jsou chvíle, kdy je záhodno uvažovat nad možností replikace.

Co nám tedy může MySQL replikace pomoci řešit?

  • load primární MySQL
  • potřebu provozovat databázi na více místech (pro čtení)
  • zálohu formou zálohovacího stroje který se začne používat v případně výpadku primárního

Nastavení replikace

Nastavení není nijak obtížné v zásadě jde jen o přidání pár řádků do konfiguračních souborů MySQL a SQL příkazů pro zajištění komunikace mezi master a slave serverem.

Nastavení Master serveru:

Na master serveru stačí jen pár úprav, tedy:

Nastavení v souboru /etc/mysql/my.cnf

V sekci [mysqld] zakomentovat:

#bind-address = 127.0.0.1

Tímto zakomentováním se otevře potenciální bezpečností díra, neboť tento parametr zajišťoval že se k MySQL připojí jen uživatelé z localhostu, je teď tedy důležité o to více pečlivěji držet bezpečnostní politiku uživatelů uvnitř MySQL.

a přidat následující řádky:

log-bin
server-id=1
binlog-ignore-db = mysql

Parametr server-id musí být unikátní v našem případě je 1 pro Master a 2 pro Slave.

Parametr binlog-ignore-db říká které databáze se nemají replikovat, my nebudeme replikovat pouze výchozí databázi  mysql.

Jako další krok zavoláme MySQL příkazy, které nastaví uživatele, který bude replikaci provádět.

mysql> mysql GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'%' IDENTIFIED BY 'password';
mysql> mysql FLUSH PRIVILEGES;

Výše zmíněné nastavení je velmi volné a spíše ilustrační, pro konkrétní nasazení by bylo vhodné nastavit přesné IP, z kterého se může připojovat a konkrétně definovat, jaké tabulky má právo číst.

Jako poslední věc na straně masteru je restart MySQL serveru.

# service mysql restart

Teď už jen zbývá podívat se, jestli je master server připraven k replikaci.

To provedeme následujícím příkazem:

mysql> mysql SHOW MASTER STATUS;

který nám zobrazí následující tabulku:

+--------------+----------+--------------+------------------+
| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------+----------+--------------+------------------+
| node1.000002 | 108      |              |                  |
+--------------+----------+--------------+------------------+

ve které nás budou obě hodnoty: File i Position zajímat, budeme je totiž potřebovat při konfiguraci slave serveru.

Hodnota Position se navíc zápisem do master databáze mění, při startování replikace je tedy vhodné zabránit vstupům do master databáze, než nastartuje slave, například shozením web serveru Apache.

Nastavení Slave serveru

Dále se podíváme na nastavení slave serveru, tedy tam kam se „bude replikovat“.

Do souboru /etc/mysql/my.cnf přidáme:

server-id=2
master-host=10.0.0.1
master-user=replication
master-password=password
replicate-do-db=databaze
log-warnings

Zde je nastavení podobné jako na master serveru, přibyly jen definice IP adresy, uživatele a hesla s jakým se bude slave k masteru připojovat

Nejzajímavější parametr je teď pro nás replicate-do-db který nám říká které databáze chceme na slave replikovat.

Pokud na master serveru MySQL databáze již obsahuje nějaká data, je zapotřebí udělat MySQL dump, který posléze nahrajete do databáze na slavu, replikace se totiž neprovádí zpětně.

Dále sestavíme SQL příkaz který nám upřesní komunikaci mezi master a slave serverem.

Zde se nám budou hodit hodnoty File Position z příkazu SHOW MASTER STATUS; provedeném na masteru.

Hodnotou File naplníme master_log_file a Position se použije do  master_log_pos.

A vyjde Nám příkaz:

mysql> mysql CHANGE MASTER TO master_host = '10.0.0.1',
                        master_user='replication',
                        master_password='password',
                        master_log_file='node1.000002',
                        master_log_pos=108;

Ted na Slave serveru můžeme nastartovat replikaci:

mysql> mysql START SLAVE;

Níže uvedeným příkazem zkontrolujeme, zda je vše v pořádku:

mysql> mysql SHOW SLAVE STATUS\G;

Od teto chvíle cokoliv se stane na Masteru, se s malým zpožděním provede se i na Slave serveru.

Našli jste v článku chybu?

7. 2. 2013 12:38

Zdravím, vím, že toto už je starší článek, ale zajímalo by mě jak udělám v případě výpadku Masteru z Slave nový master a jak se potom postupuje když dám nový server jako Master (chyba HW, pád SW).

Jinak článek velmi zajímavý a pro mě přínosný

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech