MySQL replikáció egy érdekes funkció, amely lehetővé teszi a felhasználók számára egy vagy több MySQL adatbázis több másolatának kezelését. Az adatok automatikusan másolódnak a forrás a replika adatbázisokba. Számos helyzetben hasznos lehet, például az adatokkal való munkavégzés során a fő adatbázis veszélyeztetése nélkül, adatmentéshez, vagy az adatbázis-hozzáférés skálázásához stb.
Ebben az útmutatóban végigmegyünk egy MySQL példány forrás adatbázisként történő beállításának lépésein az egyik szerveren, majd egy másik szerveren lévő MySQL példány konfigurálásán, hogy annak replikájaként működjön.
Előfeltételek
Ez az útmutató a MySQL replikáció egy nagyon egyszerű példáját mutatja be. Egy forrás és egy replika adatbázist tartalmaz. A forrás adatbázis az adatbázis elsődleges másolata, míg a replika adatbázis a forrás adatbázis replikája lesz. A bemutatónkhoz két szerver van konfigurálva a következő IP-címekkel:
- Forrás szerver: 31.171.240.179
- Replika szerver: 31.171.250.139
Mindegyik szerver a legújabb Ubuntu 20.04 szerver konfigurációval van beállítva. Először kövesse az útmutató lépéseit, amelyek bemutatják, hogyan állítsa be az Ubuntu szerverét. Vegye figyelembe, hogy a replika adatbázisok száma több is lehet. Ez az útmutató feltételezi, hogy a MySQL már telepítve és konfigurálva van. Segítségre van szüksége a MySQL telepítéséhez? Ez az útmutató részletesen bemutatja a MySQL telepítésének és alapvető használatának.
Röviden, a következő csomagokra lesz szüksége:
|
1 |
$ sudo apt install mysql-server mysql-client |
Mindkét rendszeren be kell állítani a tűzfalakat, hogy engedélyezzék a forgalmat mindkét rendszerről a 3306 porton. Ez a MySQL alapértelmezett portja. További információkat tudhat meg az UFW alapjairól egy bemutatóval a blogbejegyzésünkből.
Forrás adatbázis konfigurációja
-
A MySQL konfiguráció finomhangolása
A MySQL a my.cnf fájlt használja elsődleges konfigurációs fájlként. Frissíteni fogjuk a my.cnf fájlt, hogy a szervert forrásként jelöljük meg. Először nyissa meg a konfigurációs fájlt egy szövegszerkesztővel:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Ezután adja hozzá a következő sorokat a mysqld szakasz alá:
|
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 |
Mit jelentenek ezek a sorok?
bind-address: Ez a bejegyzés határozza meg a kapcsolatot egy szolgáltatás és egy IP-cím között. Alapértelmezés szerint az érték127.0.0.1(localhost) lehet. Az új érték a szerver IP-címe lesz.server-id: A MySQL replikációban minden szervernek egyedi szerverazonosítóval (server ID) kell rendelkeznie. Ez bármilyen szám lehet. Az egyszerűség kedvéért ez a következőre van beállítva:1.log_bin: Ez tárolja a replikáció valós részleteit. A replika adatbázis mindent le fog másolni, ami a naplóban rögzítésre kerül.binlog_do_db: Ez a bejegyzés jelöli ki azt az adatbázist, amely a replikáció tárgya lesz a replika szerveren. Egynél több adatbázis is lehet. Itt a mintaadatbázis anewdatabase.
A módosítások elvégzése után mentse el a konfigurációs fájlt. A MySQL újraindítást igényel, hogy betöltse a változtatásokat a my.cnf:
|
1 |
$ sudo service mysql restart |
-
Engedély megadása a replika felhasználónak
A következő lépés egy replika felhasználó létrehozása és a megfelelő jogosultságok megadása. Ezt a MySQL shellből kell elvégezni. Először indítsa el a MySQL shellt:
|
1 |
$ sudo mysql -u root -p |
Ezután hozzon létre egy dedikált felhasználót a replika adatbázishoz. Módosítsa a felhasználónevet és a jelszót megfelelően:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Most adja meg a megfelelő jogosultságokat a felhasználónak:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
További információkat tudhat meg a MySQL felhasználókról és jogosultságokról a blogbejegyzésünkből. Ezután töltse be újra a jogosultsági táblát a változtatások érvénybe léptetéséhez:
|
1 |
$ FLUSH PRIVILEGES; |
-
Az adatbázis finomhangolása
Szükségünk van a forrásadatbázis másolatára a replikán. Lehetséges a struktúra manuális felépítése is. A legtöbb esetben azonban ez meglehetősen kényelmetlen. Ezért az adatbázis közvetlen exportálása a legoptimálisabb megoldás. Ebben a példában a forrásadatbázis a következő: newdatabase. Változtassa meg az aktuális adatbázist:
|
1 |
$ USE newdatabase; |
A következő parancs zárolja az adatbázist, megakadályozva az újabb módosításokat:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Ezután ellenőrizze az adatbázis állapotát:
|
1 |
$ SHOW MASTER STATUS; |
Ettől a pozíciótól kezdve a replika adatbázis elkezdi a replikációt a forrásból. Ezek a számok később hasznosak lesznek, ezért jegyezze fel őket. Ha ugyanabból az ablakból bármilyen módosítás történik, a MySQL automatikusan feloldja az adatbázis zárolását. Ezért javasoljuk, hogy a következő lépéseket egy másik terminál fülön vagy ablakban hajtsa végre. Az adatbázis továbbra is zárolva van. Exportálja egy hordozható SQL fájlba:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
A feladat ezzel kész. Ezután oldja fel az adatbázis zárolását:
|
1 |
$ UNLOCK TABLES; |
Végül lépjen ki a shellből:
|
1 |
$ QUIT; |
Replika konfiguráció
Most itt az ideje a replika adatbázis konfigurálásának.
-
A forrásadatbázis importálása
Szükségünk van a forrásadatbázis másolatára a replika szerveren. Ehhez a korábban exportált SQL fájlt fogjuk használni. Indítsa el a MySQL shellt:
|
1 |
$ sudo mysql -u root -p |
Ezután hozzon létre egy üres adatbázist ugyanazzal az adatbázisnévvel:
|
1 |
$ CREATE DATABASE newdatabase; |
Ezután lépjen ki a shellből:
|
1 |
$ EXIT; |
Most importálja az SQL fájlt az adatbázisba:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
A MySQL konfiguráció finomhangolása
Néhány dolgot meg kell adni a MySQL konfigurációs fájljában. Nyissa meg a konfigurációs fájlt egy szövegszerkesztőben:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
A következő bejegyzések a mysqld szekció alá kerülnek. Különben nem fog működni. Az első a szerverazonosító. Mint korábban említettük, ennek egyedinek kell lennie a forrás-replika replikációs konfiguráció összes szerverén. A bemutató kedvéért ez a következőre van beállítva: 2:
|
1 |
$ server-id = 2 |
Ezután adja hozzá a következő sorokat:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Itt csak a relay-log egy új bejegyzés. Ez az a napló, amelyet a replika szerver hoz létre a replikáció során. A napló formátuma megegyezik a bináris naplóéval. Mentse el a konfigurációs fájlt, majd indítsa újra a MySQL-t:
|
1 |
$ sudo service mysql restart |
-
A replikáció engedélyezése
Végül készen állunk a replikáció engedélyezésére a MySQL-en belülről. Indítsa el a MySQL shellt:
|
1 |
$ sudo mysql -u root -p |
Futtassa a következő parancsot. Először módosítsa az IP-címet, a felhasználónevet és a jelszavakat értelemszerűen:
|
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; |
A parancs a következőket hajtja végre:
- Az aktuális szerver a forrásszerver replikájaként lesz megjelölve.
- A replika szerver rendelkezik a megfelelő bejelentkezési adatokkal.
- A replika szerver tudja, honnan kell elkezdenie a replikációt. Emlékszik a forrásszerveren ellenőrzött adatbázis-állapotra? A forrás naplófájlja és a naplópozíció onnan származik.
Végül aktiválja a replika szervert:
|
1 |
$ START REPLICA; |
-
Egyebek
Szeretné ellenőrizni a replika aktuális állapotának részleteit? Futtassa a következő parancsot a MySQL shellben. A végén lévő \G arra szolgál, hogy átrendezze a szövegeket a jobb olvashatóság érdekében:
|
1 |
$ SHOW REPLICA STATUS\G |
Ha kapcsolódási probléma adódik, próbálja meg elindítani a replika szervert annak átugrásához:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Összegzés
A MySQL replikációnak számos következménye van. Ez csak egy rövid bemutatója az alapvető formájának. Azonban könnyen kiterjeszthető több forrás-replika konfigurációra is. Ugyanezek a lépések vonatkoznak a magasabb szintű, összetett konfigurációkra is. Mindig jó ötlet utólag tesztelni a konfigurációt. Próbáljon meg végrehajtani néhány insert, delete vagy update parancsot a forrásadatbázison. Ha a beállítás működik, akkor a replika adatbázisnak mindent megfelelően át kell vennie.
Ezenkívül további forrásokat is megtekinthet a blogunkon arról, hogy mit tehet a MySQL-lel:
- SQLite vs MySQL vs. PostgreSQL: Relációs adatbázis-kezelő rendszerek összehasonlítása
- Hogyan állítsuk vissza a MariaDB vagy MySQL root jelszavát
- Hogyan telepítsük a LEMP szoftvercsomagot (Linux, Nginx, MySQL PHP) Ubuntu 20.04-re
Kellemes számítógépezést!







Hozzászólások
Még nincsenek hozzászólások. Legyen Ön az első.