wtorek, 13 maja 2014

Podpięcie nowego noda do replikacji w MySQL-u

Opisywałam już zestawić replikację master-master dla dwóch nodów w MySQL-u. Jeśli chcecie wrócić do tego posta to tutaj jest do niego link.

Ale co jeśli chcemy podpiąć nowy serwer do replikacji? Na przykład mamy już działający jeden serwer ale chcemy aby działał w replikacji master-slave lub master-master.

Oto kilka prostych kroków:
  1. Upewniamy się, że master ma wszystkie dane, a do nowego noda nikt nie pisze.
  2. Generujemy dump z mastera:

    mysqldump -uroot -proot --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A > dump.sql

    To polecenie stworzy dump ze wszystkimi tabelami z mastera. Dzięki opcji --master-data wiemy na jakiej pozycji i jakim pliku jest master przy wykonywaniu tego dumpu.
  3. Zczytujemy pozycję mastera z dumpa:

    head dump.sql -n80 | grep "MASTER_LOG_POS"
  4. Kopiujemy plik dumpa na nowy nod

    scp dump.sql root@HOST:/path
  5. Importujemy dump

    mysql -uroot -proot < dump.sql

    W dumpie mamy wszystkie polecenia do odtworzenia mastera (usunięcie i stworzenie baz i table + inserty z danymi).
  6. Ustawiamy replikację z danymi, które zaczytaliśmy z dumpa:

    CHANGE MASTER TO MASTER_HOST='host',MASTER_USER='replication',MASTER_PASSWORD='replication', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=98;

    START SLAVE;

    Od tego momentu nowy nod jest slavem do naszego mastera. Jeśli na masterze były nowe zmiany powstałe po wykonaniu dumpa ale przed uruchomieniem replikacji, zostaną teraz zaciągnięte bo slave wie od którego momentu ma dane. 
Jeśli po tych krokach chcemy aby nowy nod był nowym masterem i zamienić naszą replikację master-slave na master-master, musimy ostatni 6 punkt wykonać także na 'starym' serwerze (oczywiście dane na temat pliku i pozycji mastera musimy zczytać, np. przy pomocy polecenia: SHOW MASTER STATUS).

Pamiętajmy o pewnych ustawieniach:
  • włączenie binary logów aby replikacja mogła działać (log-bin)
  • unikalność ID serwerów (server-id)
  • dla replikacji master-master: auto_increment_offset & auto_increment_increment
Mam nadzieję, że przyda się wam ten krótki post.

Brak komentarzy:

Prześlij komentarz