Replikácia MySQL je zaujímavá funkcia, ktorá používateľom umožňuje spravovať viacero kópií jednej alebo viacerých databáz MySQL. Dáta sa automaticky kopírujú zo zdrojových do replikačných databáz. Môže to byť užitočné v mnohých situáciách, ako je napríklad práca s dátami bez ohrozenia hlavnej databázy, zálohovanie dát alebo škálovanie prístupu k databáze atď.
V tejto príručke prejdeme kroky nastavenia inštancie MySQL na jednom serveri ako zdrojovej databázy a následnej konfigurácie inštancie MySQL na inom serveri, aby fungovala ako jej replika.
Požiadavky
Táto príručka demonštruje veľmi jednoduchý príklad replikácie MySQL. Zahŕňa jednu zdrojovú a jednu replikačnú databázu. Zdrojová databáza je primárnou kópiou databázy, zatiaľ čo replikačná databáza bude replikou zdrojovej databázy. Pre našu ukážku sú nakonfigurované dva servery s nasledujúcimi IP adresami:
- Zdrojový server: 31.171.240.179
- Replikačný server: 31.171.250.139
Každý server je nakonfigurovaný s najnovšou konfiguráciou Ubuntu 20.04 server. Najprv postupujte podľa krokov v návode, ktoré ukazujú, ako nastaviť váš server Ubuntu. Upozorňujeme, že počet replikačných databáz môže byť vyšší. Táto príručka predpokladá, že už máte MySQL nainštalované a nakonfigurované. Potrebujete pomoc s inštaláciou MySQL? Táto príručka podrobne demonštruje kroky inštalácie a základného používania MySQL.
V skratke, tu sú balíky, ktoré potrebujete:
|
1 |
$ sudo apt install mysql-server mysql-client |
Brány firewall na oboch systémoch by mali byť nakonfigurované tak, aby povoľovali prevádzku z oboch systémov na porte 3306. Je to predvolený port pre MySQL. Viac o základoch UFW s ukážkou sa dozviete v našom príspevku na blogu.
Konfigurácia zdrojovej databázy
-
Úprava konfigurácie MySQL
MySQL používa my.cnf ako primárny konfiguračný súbor. Aktualizujeme my.cnf na označenie servera ako zdroj. Najprv otvorte konfiguračný súbor pomocou textového editora:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Potom pridajte nasledujúce riadky pod sekciu 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 |
Čo tieto riadky znamenajú?
bind-address: Toto je položka, ktorá definuje priradenie medzi službou a IP adresou. Predvolene môže byť hodnota127.0.0.1(localhost). Novou hodnotou bude IP adresa servera.server-id: Pri replikácii MySQL musí mať každý server jedinečné ID servera. Môže to byť ľubovoľné číslo. Pre zjednodušenie je nastavené na1.log_bin: Ukladá skutočné podrobnosti o replikácii. Replikačná databáza skopíruje všetko, čo je zaznamenané v logu.binlog_do_db: Táto položka určuje databázu, ktorá bude predmetom replikácie na replikačnom serveri. Databáz môže byť viac ako jedna. V tomto prípade je vzorová databázanewdatabase.
Po vykonaní zmien uložte konfiguračný súbor. MySQL vyžaduje reštart, aby sa načítali zmeny v my.cnf:
|
1 |
$ sudo service mysql restart |
-
Udelenie oprávnenia pre replikačného používateľa
Ďalším krokom je vytvorenie replikačného používateľa a udelenie príslušných oprávnení. Musí sa to vykonať z prostredia MySQL shell. Najprv spustite MySQL shell:
|
1 |
$ sudo mysql -u root -p |
Ďalej vytvorte vyhradeného používateľa pre replikačnú databázu. Podľa potreby zmeňte používateľské meno a heslo:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Teraz udeľte používateľovi príslušné oprávnenia:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
Viac o používateľoch a oprávneniach v MySQL sa dozviete v našom príspevku na blogu. Potom znova načítajte tabuľku oprávnení, aby sa zmeny prejavili:
|
1 |
$ FLUSH PRIVILEGES; |
-
Úprava databázy
Na replike potrebujeme kópiu zdrojovej databázy. Je možné štruktúru vytvoriť manuálne. Vo väčšine prípadov je to však dosť nepohodlné. Preto je najoptimálnejším riešením priamy export databázy. V tomto príklade je zdrojová databáza newdatabase. Zmeňte aktuálnu databázu:
|
1 |
$ USE newdatabase; |
Nasledujúci príkaz uzamkne databázu, čím zabráni akýmkoľvek novým zmenám:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Potom skontrolujte stav databázy:
|
1 |
$ SHOW MASTER STATUS; |
Od tejto pozície začne replika databázy replikovať zo zdroja. Tieto čísla budú užitočné neskôr, preto si ich zaznamenajte. Ak sa vykonajú akékoľvek zmeny z rovnakého okna, MySQL automaticky odomkne databázu. Preto sa odporúča vykonať nasledujúce kroky na inej karte alebo v inom okne terminálu. Databáza je stále uzamknutá. Exportujte ju do prenosného súboru SQL:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
Úloha je teraz dokončená. Ďalej odomknite databázu:
|
1 |
$ UNLOCK TABLES; |
Nakoniec ukončite shell:
|
1 |
$ QUIT; |
Konfigurácia repliky
Teraz je čas nakonfigurovať repliku databázy.
-
Importovanie zdrojovej databázy
Na replikačnom serveri potrebujeme kópiu zdrojovej databázy. Na tento účel použijeme predtým exportovaný súbor SQL. Spustite MySQL shell:
|
1 |
$ sudo mysql -u root -p |
Potom vytvorte prázdnu databázu s rovnakým názvom databázy:
|
1 |
$ CREATE DATABASE newdatabase; |
Ďalej ukončite shell:
|
1 |
$ EXIT; |
Teraz importujte súbor SQL do databázy:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
Úprava konfigurácie MySQL
V konfiguračnom súbore MySQL je potrebné deklarovať niekoľko vecí. Otvorte konfiguračný súbor v textovom editore:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Nasledujúce záznamy budú patriť pod sekciu mysqld . V opačnom prípade to nebude fungovať. Prvým je ID servera. Ako už bolo spomenuté, musí byť jedinečné pre všetky servery v replikačnej konfigurácii zdroj-replika. Pre demonštráciu je nastavené na 2:
|
1 |
$ server-id = 2 |
Ďalej pridajte nasledujúce riadky:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Tu je novým záznamom iba relay-log . Je to log, ktorý replikačný server vytvára počas replikácie. Formát logu je rovnaký ako pri binárnom logu. Uložte konfiguračný súbor a reštartujte MySQL:
|
1 |
$ sudo service mysql restart |
-
Povolenie replikácie
Nakoniec sme pripravení povoliť replikáciu priamo z MySQL. Spustite MySQL shell:
|
1 |
$ sudo mysql -u root -p |
Spustite nasledujúci príkaz. Najprv príslušne zmeňte IP adresu, používateľské meno a heslá:
|
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; |
Príkaz vykoná nasledujúce:
- Aktuálny server je označený ako replika zdrojového servera.
- Replikačný server má správne prihlasovacie údaje.
- Replikačný server vie, odkiaľ má začať replikovať. Pamätáte si stav databázy, ktorý sme kontrolovali na zdrojovom serveri? Zdrojový log súbor a pozícia logu pochádzajú odtiaľ.
Nakoniec aktivujte replikačný server:
|
1 |
$ START REPLICA; |
-
Rôzne
Potrebujete skontrolovať podrobnosti o aktuálnom stave repliky? Spustite nasledujúci príkaz v MySQL shelli. Znak \G na konci slúži na usporiadanie textov tak, aby boli čitateľnejšie:
|
1 |
$ SHOW REPLICA STATUS\G |
Ak sa vyskytne problém s pripojením, skúste spustiť replikačný server, aby ste ho preskočili:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Záver
Replikácia MySQL má mnoho dôsledkov. Je to len stručná ukážka jej základnej formy. Dá sa však ľahko rozšíriť na konfigurácie s viacerými zdrojmi a replikami. Rovnaké kroky budú platiť aj pre akékoľvek zložitejšie konfigurácie na vyššej úrovni. Vždy je dobré každú konfiguráciu následne otestovať. Skúste vykonať niekoľko príkazov insert, delete alebo update na zdrojovej databáze. Ak nastavenie funguje, replika databázy by mala všetko správne prevziať.
Okrem toho si môžete pozrieť ďalšie zdroje na našom blogu, ktoré sa venujú tomu, čo všetko môžete s MySQL robiť:
- SQLite vs. MySQL vs. PostgreSQL: Porovnanie systémov na správu relačných databáz
- Ako resetovať root heslo pre MariaDB alebo MySQL
- Ako nainštalovať LEMP stack (Linux, Nginx, MySQL PHP) na Ubuntu 20.04
Príjemnú prácu s počítačom!







Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.