Crmgo Blog

MySQL replikacija

MySQL replikacija

Подешавања чаробњака. Обавезно наведите јединствени ID сервера, путању за бинарне логове и име базе података за репликацију у секцији [mysqld]: server-id = 1 log-bin = /var/lib/mysql/mysql-bin replicate-do-db = testdb Уверите се да имате довољно слободног места на диску за бинарне логове. Додајмо…

MySQL replikacija
Podešavanja majstora

Obavezno navedite jedinstveni ID servera, putanju za binarne logove i ime baze podataka za replikaciju u sekciji [mysqld]:
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb

Uverite se da imate dovoljno prostora na disku za binarne logove.

Dodajemo korisnika replication, pod čijim pravima će se vršiti replikacija. Dovoljna je privilegija "replication slave ":
mysql@master> GRANT replication slave ON "testdb".* TO "replication"@"192.168.1.102" IDENTIFIED BY "password";

Restartujemo MySQL kako bi promene u konfiguraciji stupile na snagu:
root@master# service mysqld restart

Ako je sve prošlo uspešno, komanda "show master status " treba da prikaže približno sledeće:
mysql@master> SHOW MASTER STATUS\G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:

Vrednost position treba da raste kako se unose promene u bazu podataka na majstoru.

Podešavanja replike

Navedite ID servera, ime baze podataka za replikaciju i putanju do relay binlogova u sekciji [mysqld] konfiguracije, a zatim 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

Prebacivanje podataka

Ovde ćemo morati da zaključamo bazu podataka za upis. To možemo uraditi tako što ćemo zaustaviti rad aplikacija ili tako što ćemo postaviti zastavicu read_only na majstoru (pažnja: ova zastavica ne deluje na korisnike sa privilegijom SUPER). Ako imamo MyISAM tabele, izvršite i "flush tables":
mysql@master> FLUSH TABLES WITH READ LOCK;
mysql@master> SET GLOBAL read_only = ON;

Pogledajte stanje majstora komandom „show master status“ i zapamtite vrednosti File i Position (nakon uspešnog zaključavanja majstora, one ne bi trebalo da se menjaju):
File: mysql-bin.000003
Position: 98

Napravite dump baze podataka, a nakon završetka operacije skinite zaključavanje majstora:
mysql@master> SET GLOBAL read_only = OFF;

Prebacite dump na repliku i obnovite podatke iz njega.
Na kraju, pokrenite replikaciju komandama "change master to" i "start slave" i proverite da li je sve prošlo dobro:
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;

Vrednosti MASTER_LOG_FILE i MASTER_LOG_POS preuzimamo sa majstora.

Pogledajte kako teče replikacija komandom "show slave status ":
mysql@replica> SHOW SLAVE STATUS\G

Članak je preuzet sa habra i proveren u praksi.

Suočio sam se sa greškom [ERROR] Failed to initialize the master info structure

Rešava se: RESET SLAVE;

Drugi problem - (InnoDB tabele nisu kreirane) rešen je brisanjem logova .. 0 ..01

Ako želite da isključite određene tabele iz replikacije, upišite ih u konfiguraciju:

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

Preskakanje grešaka:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; ovo mi nije pomoglo,

ali dodavanje u my.cnf

slave-skip-errors= <kod greške ili all>

rešio je problem.

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.