A MySQL replikáció lehetővé teszi, hogy ugyanazon adatbázis több példánya egyszerre több szerveren legyen, az adatok elsődleges kiszolgálóról történő automatikus másolásával a "slave" szerverre.
Ennek a mechanizmusnak köszönhetően az összes, a masteren végrehajtott utasítás, amely valahogy megváltoztatja az adatokat, rögzíthető, továbbítható és végrehajtható a replikált adatbázisokban.
Ez az útmutató segít a MySQL telepítésében, a replika megfelelő konfigurálásában és annak működésének teszt adatokkal történő ellenőrzésében.
Először csatlakozzon a szerverhez SSH kapcsolaton keresztül. Ha még nem tette meg, akkor ajánlott átböngésznie a Hogyan javítható az SSH biztonság az Ubuntu 18.04-en? útmutatónkat a folyamat megkezdése előtt. Helyi szerver esetén folytassa a következő lépéssel, és nyissa meg a szerver terminált.
A MySQL telepítése
A Master / Slave replikáció mindkét szerveren történő beállításához telepítse a MySQL valamely verzióját, majd futtassa a következő telepítési eljárást mindkét gépen, mielőtt továbblépne útmutatónk következő szakaszára.
Frissítse a disztribúciós repókat, hogy a MySQL legfrissebb verzióját töltse le:
Ha már korábban elindította ezt a parancsot, folytassa a következő lépéssel.
Most folytassa a MySQL telepítést:
$ sudo apt install mysql-server
Annak érdekében, hogy a telepítés sikeres legyen, ellenőrizze a MySQL verziót:
Ha az eljárást sikeresen végrehajtotta, a telepített MySQL verzió kijelzésre kerül a kijelzőn.
Folytassa a MySQL biztonságossá tételével a MySQL-ben található parancsfájl futtatásával, amely növeli a biztonságot és korlátozza az adatbázisokhoz való hozzáférést:
$ sudo mysql_secure_installation
Ezen a ponton egy vezetett eljárás végigvezeti Önt a MySQL biztonsági szint konfigurálásán.
Először megkérdezi, hogy engedélyezni szeretné-e a jelszó-ellenőrzési rendszert. Ha engedélyezve van, a felhasználó jelszavának beállításakor a jelszót kiértékelésre kerül, és ha nem felel meg a biztonsági kritériumoknak, hibával elutasítja.
Később megkérdezi, hogy megváltoztatja-e a root jelszót az Ön által választottra (ha engedélyezi a jelszóellenőrző rendszert, akkor a biztonsági feltételeknek megfelelő jelszót kell megadni).
Biztonságos jelszó létrehozásához számos bevált módszer tartozik. Ebbe beletartozik:
-
nagy- és kisbetűk használata,
-
betűk és számok együttes használata,
- nem alfanumerikus karakterek használata, például @ # $% ˆ &!,
-
korábban soha nem használt jelszavak használata.
Végül válassza ki, hogy eltávolítja-e a névtelen felhasználókat, teszteli-e az adatbázisokat, és letiltja-e a távoli bejelentkezést a root felhasználóval. A megfelelő szintű biztonság érdekében ajánlatos megerősíteni ezeket a változásokat.
Ezen a ponton erősítse meg a megjelenített engedélytáblázat frissítéseit az összes új biztonsági feltétel alkalmazásához.
Végül indítsa újra a szolgáltatást a változtatások alkalmazásához:
$ sudo service mysql restart
A Master/Slave replikáció konfigurálása
Miután a telepítést elvégezte mindkét szerveren (Master és Slave), folytassa a Master szerver konfigurálásával.
Először szerkessze a /etc/mysql/mysql.conf.d/mysqld.cnf konfigurációs fájlt az alábbiak szerint:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
Mivel a Slave kiszolgálónak szükségszerűen távolról kell csatlakoznia a Master kiszolgálóhoz, meg kell győződnie arról, hogy a MySQL szolgáltatás képes-e fogadni a külső kapcsolatokat, a bind-address megváltoztatásával az alábbiak szerint:
Miután elkészült, indítsa újra a szolgáltatást a módosítások alkalmazásához:
$ sudo service mysql restart
Próbából és értékelési célokból hozzon létre egy tesztadatbázist a fő szerveren (itt nevezzük "oktatóanyagnak") egy "számok" táblázattal, fiktív adatokkal. A konfigurációs eljárás befejezése után ellenőrizze, hogy az itt megadott összes adat szinkronban van-e a Slave szerverrel:
$ sudo mysql -u root -p
mysql> CREATE DATABASE tutorial;
Query OK, 1 row affected (0.00 sec)
mysql> USE tutorial;
Database changed
mysql> CREATE TABLE numbers ( value REAL );
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO numbers VALUES ( 1 ), ( 2 ), ( 3 );
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
Győződjön meg arról, hogy az imént megadott értékek szerepelnek-e a teszttáblázatban:
mysql> SELECT * FROM numbers;
+-------+
| value |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)
A számtáblának 3 példa sort kell tartalmaznia, a fentiek szerint.
Ezután hozzon létre hozzáférési adatokat a felhasználó számára, amelyeket a Slave adatbázis használhat:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'usr_replica'@'%' IDENTIFIED BY 'SMDipmf#23$42';
mysql> FLUSH PRIVILEGES;
Mielőtt folytatná a Slave szerver konfigurálását, a Master aktuális állapota megjelenik a kijelzőn, és a következő információkat mentésre kerülnek:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1238 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
Szüksége lesz ezekre az adatokra a Slave szerver konfigurálásakor.
Folytassa a MySQL shellből való kilépéssel:
Ezután mentse a teljes adatbázis-dumpot, hogy később azt betölthesse a Slave szerverre:
$ sudo mysqldump -u root -p --opt tutorial > slave-init.sql
Enter password:
Vigye át az újonnan létrehozott fájlt a Slave gépre, és folytassa annak konfigurálásával, módosítva az /etc/mysql/mysql.conf.d/mysqld.cnf fájlt:
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
Felhívjuk figyelmét, hogy a kiszolgáló azonosítóját megváltoztatta a 2-es számra, és ne felejtse el megváltoztatni az összekapcsolási címet is az alábbiak szerint:
Most indítsa újra a Slave szervert a változtatások alkalmazásához:
$ sudo service mysql restart
Most folytassa az adatbázis létrehozásával azon a néven, ahogy a Master szerveren is létre lett hozva:
$ sudo mysql -u root -p
mysql> create database tutorial;
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
Most importálja az újonnan létrehozott biztonsági másolatot, és indítsa el a Slave szervert a Master adatbázis által korábban mentett információk felhasználásával (MASTER_LOG_FILE és MASTER_LOG_POS):
$ sudo mysql -u root tutorial < /root/slave.sql
$ sudo mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='195.231.4.201', MASTER_USER='usr_replica', MASTER_PASSWORD='SMDipmf#23$42', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 1238;
Query OK, 0 rows affected, 2 warnings (0.10 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
Ettől a pillanattól kezdve az adatbázisok valós időben szinkronizálódnak, és kiléphet a MySQL shellből.
A replikáció helyes működésének ellenőrzése
A replikáció működésének ellenőrzéséhez megpróbálhat adatokat beilleszteni a Master-be és ellenőrizni, hogy azok megfelelően érkeznek-e a Slave adatbázisba. Kezdje azzal, hogy új adatokat ad meg a Master-en a következőképpen:
$ sudo mysql -u root -p
mysql> use tutorial;
Reading table information for completion of table and column names
Turn off this feature to get a quicker startup with -A
Database changed
mysql> INSERT INTO numbers VALUES ( 4 ) , ( 5 );
Query OK, 2 rows affected (0.03 sec)
Records: 2
Duplicates: 0
Warnings: 0
Ezután folytassa a Slave adatbázis lekérdezésével:
$ sudo mysql -u root -p
mysql> use tutorial;
Reading table information for completion of table and column names
Turn off this feature to get a quicker startup with -A
changed
mysql> SELECT * FROM numbers;
+-------+
| value |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+-------+
5 rows in set (0.00 sec)
Amint láthatja, az új értékek (4 és 5) megérkeztek a Slave adatbázisba, így a szinkronizálás megfelelően működik.