MySQL replikace je zajímavá funkce, která uživatelům umožňuje spravovat více kopií jedné nebo více databází MySQL. Data se automaticky kopírují ze zdrojových do replikačních databází. Může to být užitečné v mnoha situacích, jako je práce s daty bez ohrožení hlavní databáze, zálohování dat nebo škálování přístupu k databázi atd.
V této příručce projdeme kroky nastavení instance MySQL na jednom serveru jako zdrojové databáze a poté konfiguraci instance MySQL na jiném serveru, aby fungovala jako její replika.
Požadavky
Tato příručka ukáže velmi jednoduchý příklad replikace MySQL. Zahrnuje jednu zdrojovou a jednu replikační databázi. Zdrojová databáze je primární kopií databáze, zatímco replikační databáze bude replikou zdrojové databáze. Pro naši ukázku jsou nakonfigurovány dva servery s následujícími IP adresami:
- Zdrojový server: 31.171.240.179
- Replikační server: 31.171.250.139
Každý server je nakonfigurován s nejnovější konfigurací Ubuntu 20.04 server. Nejprve postupujte podle kroků v návodu, které ukazují, jak nastavit server Ubuntu. Všimněte si, že počet replikačních databází může být vyšší. Tato příručka předpokládá, že již máte MySQL nainstalované a nakonfigurované. Potřebujete pomoci s instalací MySQL? Tento návod podrobně ukazuje kroky instalace a základního použití MySQL.
Stručně řečeno, zde jsou balíčky, které potřebujete:
|
1 |
$ sudo apt install mysql-server mysql-client |
Brány firewall na obou systémech by měly být nakonfigurovány tak, aby povolovaly provoz z obou systémů na portu 3306. Je to výchozí port pro MySQL. Více se o základech UFW s ukázkou dozvíte v našem příspěvku na blogu.
Konfigurace zdrojové databáze
-
Úprava konfigurace MySQL
MySQL používá my.cnf jako primární konfigurační soubor. Aktualizujeme my.cnf pro označení serveru jako zdroj. Nejprve otevřete konfigurační soubor v textovém editoru:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Poté přidejte následující řádky pod sekci mysqld:
|
1 2 3 4 |
bind-address = 31.171.240.179 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Co tyto řádky znamenají?
bind-address: Toto je položka, která definuje asociaci mezi službou a IP adresou. Ve výchozím nastavení může být hodnota127.0.0.1(localhost). Novou hodnotou bude IP adresa serveru.server-id: V replikaci MySQL musí mít každý server jedinečné ID serveru. Může to být jakékoli číslo. Pro zjednodušení je nastaveno na1.log_bin: Ukládá skutečné podrobnosti o replikaci. Replikační databáze bude kopírovat vše registrované v protokolu.binlog_do_db: Tato položka určuje databázi, která bude předmětem replikace na replikačním serveru. Databází může být více než jedna. Zde je ukázková databázenewdatabase.
Po provedení změn uložte konfigurační soubor. MySQL vyžaduje restart, aby se načetly změny v my.cnf:
|
1 |
$ sudo service mysql restart |
-
Udělení oprávnění uživateli repliky
Dalším krokem je vytvoření uživatele repliky a udělení příslušných oprávnění. To je třeba provést z prostředí MySQL. Nejprve spusťte prostředí MySQL:
|
1 |
$ sudo mysql -u root -p |
Dále vytvořte vyhrazeného uživatele pro replikační databázi. Podle potřeby změňte uživatelské jméno a heslo:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Nyní udělte uživateli příslušná oprávnění:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
Více se o uživatelích a oprávněních v MySQL dozvíte v našem příspěvku na blogu. Poté znovu načtěte tabulku oprávnění, aby se změny projevily:
|
1 |
$ FLUSH PRIVILEGES; |
-
Úprava databáze
Na replice potřebujeme kopii zdrojové databáze. Je sice možné strukturu vytvořit ručně, ale ve většině případů je to dosti nepohodlné. Proto je nejoptimálnějším řešením přímý export databáze. V tomto příkladu je zdrojová databáze newdatabase. Změňte aktuální databázi:
|
1 |
$ USE newdatabase; |
Následující příkaz uzamkne databázi a zabrání jakýmkoli novým změnám:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Poté zkontrolujte stav databáze:
|
1 |
$ SHOW MASTER STATUS; |
Z této pozice začne replika databáze replikovat ze zdroje. Tato čísla se budou hodit později, proto si je zaznamenejte. Pokud provedete jakékoli změny ze stejného okna, MySQL databázi automaticky odemkne. Doporučuje se proto provést následující kroky v jiné záložce nebo okně terminálu. Databáze je stále uzamčena. Exportujte ji do přenosného souboru SQL:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
Úkol je nyní hotov. Dále databázi odemkněte:
|
1 |
$ UNLOCK TABLES; |
Nakonec ukončete shell:
|
1 |
$ QUIT; |
Replica Configuration
Nyní je čas nakonfigurovat repliku databáze.
-
Import zdrojové databáze
Na replikačním serveru potřebujeme kopii zdrojové databáze. K tomu použijeme dříve exportovaný SQL soubor. Spusťte MySQL shell:
|
1 |
$ sudo mysql -u root -p |
Poté vytvořte prázdnou databázi se stejným názvem:
|
1 |
$ CREATE DATABASE newdatabase; |
Dále ukončete shell:
|
1 |
$ EXIT; |
Nyní importujte SQL soubor do databáze:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
Úprava konfigurace MySQL
V konfiguračním souboru MySQL je třeba deklarovat několik věcí. Otevřete konfigurační soubor v textovém editoru:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Následující položky budou patřit pod sekci mysqld. Jinak to nebude fungovat. První je ID serveru. Jak již bylo zmíněno, musí být jedinečné pro všechny servery v konfiguraci replikace zdroj-replika. Pro účely ukázky je nastaveno na 2:
|
1 |
$ server-id = 2 |
Dále přidejte následující řádky:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Zde je novou položkou pouze relay-log. Je to protokol, který replikační server vytváří během replikace. Formát protokolu je stejný jako u binárního protokolu. Uložte konfigurační soubor a restartujte MySQL:
|
1 |
$ sudo service mysql restart |
-
Povolení replikace
Konečně jsme připraveni povolit replikaci přímo v MySQL. Spusťte MySQL shell:
|
1 |
$ sudo mysql -u root -p |
Spusťte následující příkaz. Nejprve odpovídajícím způsobem změňte IP adresu, uživatelské jméno a hesla:
|
1 |
$ CHANGE MASTER TO MASTER_HOST='31.171.240.179',MASTER_USER='cloudsigma_master', MASTER_PASSWORD='password_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
Příkaz provede následující:
- Aktuální server je označen jako replika zdrojového serveru.
- Replikační server má správné přihlašovací údaje.
- Replikační server ví, odkud má začít replikovat. Pamatujete si stav databáze, který jsme kontrolovali na zdrojovém serveru? Zdrojový soubor protokolu a pozice protokolu pocházejí odtud.
Nakonec aktivujte replikační server:
|
1 |
$ START REPLICA; |
-
Různé
Potřebujete zkontrolovat podrobnosti o aktuálním stavu repliky? Spusťte v MySQL shellu následující příkaz. Znak \G na konci slouží k uspořádání textů tak, aby byly čitelnější:
|
1 |
$ SHOW REPLICA STATUS\G |
Pokud dojde k problému s připojením, zkuste spustit replikační server, abyste jej přeskočili:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Závěr
Replikace MySQL má mnoho důsledků. Jedná se pouze o stručnou ukázku její základní podoby. Lze ji však snadno rozšířit na konfigurace s více zdroji a replikami. Stejné kroky budou platit i pro jakékoli složitější konfigurace na vyšší úrovni. Vždy je dobré jakoukoli konfiguraci následně otestovat. Zkuste provést nějaké insert, delete nebo update příkazy na zdrojové databázi. Pokud nastavení funguje, měla by replika databáze vše správně převzít.
Kromě toho se můžete podívat na další zdroje na našem blogu, které se zabývají tím, co všechno můžete s MySQL dělat:
- SQLite vs. MySQL vs. PostgreSQL: Srovnání relačních databázových systémů
- Jak resetovat heslo uživatele root v MariaDB nebo MySQL
- Jak nainstalovat LEMP stack (Linux, Nginx, MySQL PHP) na Ubuntu 20.04
Příjemnou práci!







Komentáře
Zatím žádné komentáře. Buďte první.