Crmgo Blog

Replikace MySQL

Replikace MySQL

Nastavení průvodce. Určitě musíme zadat unikátní ID serveru, cestu k binárním logům a název databáze pro replikaci v sekci [mysqld]: server-id = 1 log-bin = /var/lib/mysql/mysql-bin replicate-do-db = testdb. Ujistěte se, že máte na disku dostatek místa pro binární logy. Přidáme…

Replikace MySQL
Nastavení masteru

Určitě uveďte unikátní ID serveru, cestu k binárním logům a název databáze pro replikaci v sekci [mysqld]:
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb

Ujistěte se, že máte na disku dostatek místa pro binární logy.

Přidejte uživatele replication, pod jehož právy bude probíhat replikace. Stačí oprávnění "replication slave ":
mysql@master> GRANT replication slave ON "testdb".* TO "replication"@"192.168.1.102" IDENTIFIED BY "password";

Restartujte MySQL, aby se změny v konfiguraci projevily:
root@master# service mysqld restart

Pokud vše proběhlo úspěšně, příkaz "show master status " by měl zobrazit přibližně toto:
mysql@master> SHOW MASTER STATUS\G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:

Hodnota position by se měla zvyšovat s tím, jak jsou do databáze na masteru zapisovány změny.

Nastavení repliky

Uveďte ID serveru, název databáze pro replikaci a cestu k relay binlogům v sekci [mysqld] konfigurace, poté restartujte MySQL:
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = testdb

root@replica# service mysqld restart

Přenos dat

Zde budeme muset databázi uzamknout pro zápis. K tomu můžete buď zastavit běh aplikací, nebo využít nastavení příznaku read_only na masteru (pozor: tento příznak neplatí pro uživatele s oprávněním SUPER). Pokud máte tabulky MyISAM, proveďte také "flush tables":
mysql@master> FLUSH TABLES WITH READ LOCK;
mysql@master> SET GLOBAL read_only = ON;

Zkontrolujte stav masteru příkazem „show master status“ a zapamatujte si hodnoty File a Position (po úspěšném uzamčení masteru by se neměly měnit):
File: mysql-bin.000003
Position: 98

Vytvořte zálohu databáze a po dokončení operace zrušte uzamčení masteru:
mysql@master> SET GLOBAL read_only = OFF;

Přeneste zálohu na repliku a obnovte z ní data.
Nakonec spusťte replikaci příkazy "change master to" a "start slave" a zkontrolujte, zda vše proběhlo dobře:
mysql@replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000003 ", MASTER_LOG_POS = 98;
mysql@replica> start slave;

Hodnoty MASTER_LOG_FILE a MASTER_LOG_POS získáte z masteru.

Zkontrolujte průběh replikace příkazem "show slave status ":
mysql@replica> SHOW SLAVE STATUS\G

Článek byl převzat z habru a ověřen v praxi.

setkal jsem se s chybou [ERROR] Failed to initialize the master info structure

řešení: RESET SLAVE;

Druhý problém – (nevytvářely se tabulky InnoDB) – byl vyřešen odstraněním logů .. 0 ..01

Pokud je třeba vyloučit některé tabulky z replikace, zapište je do konfigurace:

replicate-wild-ignore-table=base.mw_words_positions
replicate-wild-ignore-table=base.mw_sotrudniki_log

Přeskakování chyb:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mi to nepomohlo,

ale přidání do my.cnf

slave-skip-errors= <kód chyby nebo all>

řešilo problém.

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.