MySQL stawianie repliki
December 31st, 2007 by prond1) Sprawdzenie statusu serwera MASTER
Łączymy się z serwerem MASTER i wpisujemy polecenie show master status;.
Powinniśmy otrzymać mniej więcej taki rezultat jak poniżej. Jeżeli tak to można od razu przejść do punktu #3.
mysql> show master status; +------------------+----------+-----------------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+-----------------------------+------------------+ | mysql-bin.000069 | 98 | cms_company_1,cms_company_2 | | +------------------+----------+-----------------------------+------------------+ 1 row in set (0.00 sec)
Jeżeli otrzymamy pusty wynik należy skonfigurować bin loga (punkt #2)
mysql> show master status; Empty set (0.00 sec)
2) Konfiguracja serwera MASTER
W pliku konfiguracyjnym MySQL (na Debianie /etc/mysql/my.ini) należy zdefiniować ścieżkę bin loga:
log_bin = /var/log/mysql/mysql-bin.log
W tym samym pliku należy ustawić server-id. Uwaga : replikacja nie działa jeżeli serwer MASTER i SLAVE mają takie same server-id
server-id = 360
Mamy jeszcze dodatkowo takie parametry jak, ktorych nazwy sa chyba na tyle intuicyjne, że nie potrzeba tłumaczyć ich znaczenia.
expire_logs_days = 10 max_binlog_size = 100M binlog_do_db = cms_company_1 binlog_do_db = cms_company_2 #binlog_ignore_db = test
3) Backup replikowanych baz danych z serwera MASTER
Wygodnie jest zrobić backup replikowanych baz danych razem z informacją o punkcie startu replikacji (opcja master-data)
mysqldump -h{nazwa_hosta} -P{port} -u{nazwa_uzytkownika} -p{haslo} --master-data=2 {nazwa_bazy_danych} > {nazwa_pliku_sql}
Ja ustawiam zwykle opcję master-data=2, tak aby polecenie definujące punkt startu replikacji było wykomentowane:
–
– Position to start replication or point-in-time recovery from
–
– CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000068′, MASTER_LOG_POS=240;
4) Sprawdzenie statusu serwera SLAVE
Łączymy się z serwerem MASTER i wpisujemy polecenie show slave status;.
W przypadku, gdy nie mamy postawionej repliki wynik powinien być pusty:
mysql> show slave status; Empty set (0.00 sec)
Dla serwera z działającą repliką dostaniemy rezultat jak poniżej. Powinniśmy wtedy zatrzymać replikę przy pomocy poleceń slave stop; reset slave;
mysql> show slave status; +----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+----------------------------+---------------+-----------------------+------------------+-------------------+------------------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | +----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+----------------------------+---------------+-----------------------+------------------+-------------------+------------------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ | Waiting for master to send event | master360 | master_user | 3306 | 60 | mysql-bin.001007 | 37474461 | master360-relay-bin.001460 | 37472499 | mysql-bin.001007 | Yes | Yes | cms_company_1, cms_company_2 | | | | | | 0 | | 0 | 37474461 | 37472499 | None | | 0 | No | | | | | | 0 | +----------------------------------+-------------+-------------+-------------+---------------+------------------+---------------------+----------------------------+---------------+-----------------------+------------------+-------------------+------------------------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+ 1 row in set (0.00 sec)
5) Konfiguracja i startowanie repliki
Przed włączeniem repliki należy się upewnić, że id serwera SLAVE jest różne od MASTER. W tym celu należy sprawdzić wartość zmiennej server_id.
Możną ją zmienić w pliku konfiguracyjnym (jak w punkcie #2) bądź poprzez polecenie set global server_id = {nowe_id};. Lepiej to jednak zrobić w pliku konfiguracyjnym, ponieważ przy restarcie serwera wartość zmienniej server_id jest brana właśnie stamtąd.
Teraz edytujemy (i odkomentowujemy) wygenerowane polecenie startu replikacji i dodajemy do niego dane niezbedne do polaczenia z serwerem MASTER.
CHANGE MASTER TO MASTER_HOST='{master_host}', MASTER_PORT={master_port}, MASTER_LOG_FILE='{master_log_file}',MASTER_LOG_POS={master_position}, MASTER_USER='{master_user}', MASTER_PASSWORD='{master_password}'
Robimy restore bazy z backupów.
mysql -h{nazwa_hosta} -P{port} -u{nazwa_uzytkownika} -p{haslo} {nazwa_bazy_danych} < {nazwa_pliku_sql}
Startujemy replikę.
mysql> slave start;
Sprawdzamy status repliki.
mysql> show slave status;
Posted in MySQL | No Comments »