MySQL: Master - Slave replikace

Zdeněk Hásek 26. 4. 2012

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:

widgety

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?
Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Root.cz: Podívejte se na shořelé Samsung Note 7

Podívejte se na shořelé Samsung Note 7

Měšec.cz: „Ukradli“ jsme peníze z bezkontaktních karet

„Ukradli“ jsme peníze z bezkontaktních karet

Vitalia.cz: Antibakteriální mýdla nepomáhají, spíš škodí

Antibakteriální mýdla nepomáhají, spíš škodí

120na80.cz: Hrbatá prsa aneb mýty o implantátech

Hrbatá prsa aneb mýty o implantátech

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

DigiZone.cz: Regionální tele­vize CZ vysílá "Mapu úspěchu"

Regionální tele­vize CZ vysílá "Mapu úspěchu"

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Vitalia.cz: Vodárny varují: Ve vodě z kohoutku jsou bakterie

Vodárny varují: Ve vodě z kohoutku jsou bakterie

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

DigiZone.cz: Budoucnost TV vysílání ve Visegrádu

Budoucnost TV vysílání ve Visegrádu

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr