MySQL master-slave replikáció

Első lépésként ha ez még nem történt volna meg, akkor mindkét gépre fel kell telepíteni a MySQL szerver alkalmazást. Ezt a következő két parancs konzolon történő kiadásával tehetjük meg:

$sudo apt-get update
$sudo apt-get install mysql-server

Előfordulhat, hogy a telepítő nem kérdezi meg a root felhasználó jelszavát. Ilyenkor kezdetben nem rendelkezik jeszóval (Fontos! Az üres jelszó és a jelszó hiánya nem ugyanazt jelenti!).

Ezt követően valamely szimpatikus szövegszerkesztővel (például vim) meg kell nyitni szerkesztésre a /etc/mysql/my.cnf fájlt, amiben a következő módosításokat kell mind a két gépen elvégezni:

$sudo vim /etc/mysql/my.cnf

[mysqld]
log-bin = mysql-bin
server-id = 19216801 # az egyediséget biztosítandó ide a szerver IP címét érdemes írni (pontok nélkül!)
auto_increment_increment  = 10
auto_increment_offset = 1
#bind-address  = 127.0.0.1    # kikommentezve kell legyen!

A log-bin és a server-id sorork telepítés után kikommentezve szerepeltek a konfigurációs fájlomba, így a log-bin sor elejéről csak a # jelet kell eltávolítani (ha szerepel utána fájlnév),  míg a server-id esetében az értéket is módosítani kell. A bind-address sor kivételével érhető el, hogy a MySQL daemon minden elérhető IP címen figyeljen, ne csak a localhost-on. Enélkül a szerver nem lenne elérhető a hálózaton keresztül!

Előfordulhat, hogy a frissen telepített MySQL szerver nem lesz azonnal elindítva. Ilyenkor annak elindításáról a következő paranccsal kell gondoskodni:

$sudo service mysql start

A sikeres indításról pedig a következőképp lehet például meggyűződni:

$sudo service mysql status

Abban az esetben, ha már előzőleg el volt indítva (pl mert a telepítő elindította), akkor az előbbi utasítás start paraméterét restart-ra cserélve újra kell indítani a MySQL-t az új konfiguráció érvényre juttatásához.

Ezt követően a master kiszolgálón létre kell hozni egy replikációs felhasználót, amivel a slave képes lesz bejelentkezni arra. Figyelem! Esetünkben mindkét szerver egyszerre lesz master és slave is! A felhasználók létrehozásához a mysql konzolos segédprogram segítségével a következő SQL utasításokat kell kiadni a szervernek (természetsen lehetne akár phpMyAdmin-t is használni, azonban azt itt macerásabbnak érzem):

$mysql -u root -p

CREATE USERreplicant@'%' IDENTIFIED BY 'password';
GRANT SELECT, PROCESS, FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD ON *.* TO replicant@'%';
FLUSH PRIVILEGES;

Mostanra mind a két szerver kész betölteni egy master kiszolgáló szerepét, így már csak azt kellene elérni, hogy párhuzamosan a slave működést is megvalósítsák. Ha csak az egyik irányba szeretnénk replikálni az adatokat, akkor elegendő csak az egyik kiszolgálón elvégezni a következőkben leírtakat, egyébként pedig mindkettőn szükséges.

$mysql -u root -p

CHANGE MASTER TO
MASTER_HOST='ip_of_server2',
MASTER_USER='replicant',
MASTER_PASSWORD='password';
START SLAVE;
SHOW SLAVE STATUS\G;

Abban az esetben, ha egy már korábbról meglévő (tehát adatokat is tartalmazó) MySQL kiszolgáló mellé került beállításra egy slave, akkor szükséges a master adatait átmásolni a slave kiszolgálóra. Ezt régebbi MySQL verzió esetén a következő SQL utasítás mysql konzolon történő kiadásával lehet megtenni:

LOAD DATA FROM MASTER;

Ez azonban egy hivatalosan ellenjavallt és jelenleg már kivezetett megoldás, ezért célszerűbb a mysqldump vagy a mysqlhotcopy alkalmazása. Ezek használatát itt nem részletezem (lásd előbbi linkek).

Elméletileg már működnie is kellene a dupla master-slave architektúrának. Erről a legegyszerűbben úgy győződhetünk meg, ha nyitunk egy-egy ssh konzolt a két gép felé, amiken indítunk egy-egy mysql konzolt. Ezt követően az egyik gépen elvégzett módosíts (pl. adatbázis- létrehozás, törlés, stb) azonnal meg kell történjen a másik oldalon is.

Címkék