poniedziałek, 18 sierpnia 2008

Replikacja mysql

Replikacja pozwala na stworzenie "lustrzanego odbicia" bazy (baz) danych, w czsie rzeczywistym (albo prawie rzeczywistym). Zreplikowaną bazę danych (slave) możemy wykorzystać jako backup (który w każdym momencie możemy wykorzystać jako podstawową bazę danych). Konfiguracja serwera slave polega na wpisaniu do pliku konfiguracyjnego hostu na którym znajduje się baza mysql działająca jako master, loginu i hasła użytkownika który ma prawo do replikacji oraz (opcjonalnie) bazwę bazy danych którą chcemy replikować.

Po stronie serwera mysql działającego jako master, należy założyć konto dla użytkownika który będzie wykorzystywany jako slave.

CREATE USER slave_user;
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_host' IDENTIFIED BY 'slave_pass';
FLUSH PRIVILEGES;

W obu serwerach trzeba róznież ustawić server-id, który jest unikalnym identyfikatorem serwera w naszej sieci (najlepiej ustawić 1 dla master i kolejn0 (2,3...n) dla serwerów slave).

Pozostała konfiguracja polega na ustawieniu punktu od którego slave ma czytać zmiany w bazie danych master.

/* pobranie informacji o nazwie pliku logów oraz ostatniej pozycji w tym pliku - uruchamiamy na bazie master */

SHOW MASTER STATUS;

/* ustawiamy z którego pliku logów, oraz której pozycji ma czytać slave */
/* jeśli binlog jest pusty to trzeba podać slave-owi pusty string '' jako plik i pozycje */
CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='slave_user', MASTER_PASSWORD='slave_pass', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

Ostatnią czynnością jest uruchomienie slave-a:

START SLAVE;

Można również startować selektywnie wątki replikacji:

START SLAVE SQL_THREAD;
START SLAVE IO_THREAD;

Jeśli nie jesteśmy pewni czy replikacja działa możemy sprawdzić jej stan na slave-ie za pomocą polecenia:

SHOW SLAVE STATUS\G

\G na końcu poda nam wynik w czytelniejszy sposób niż bez niego.

Aby zatrzymać działającego slave-a wystarczy wydać polecenie:

STOP SLAVE;

Czasami zachodzi potrzeba uruchomienia serwera mysq, skonfigurowanego jako slave z wyłączeniem opcji replikacji. Możemy to zrobić uruchamiając serwer mysql z opcją "--skip-slave"

mysqld --skip-slave

Brak komentarzy: