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.
