Jestem bardzo nowy w administrowaniu bazami danych.
Napotykam wiele problemów podczas konfigurowania replikacji master-slave mysql.
Mam również regularne problemy z rozwiązywaniem problemów z replikacją mysql.
Czy ktoś może pomóc zrozumieć, jak sobie z tym poradzić?
mysql
replication
mysql-5
Abdul Manaf
źródło
źródło
Odpowiedzi:
Podałem linki do samouczków. Pamiętaj tylko, że w Ubuntu plik my.cnf znajduje się w /etc/mysql/my.cnf, a nie w /etc/my.cnf, jak w samouczku Howtoforge. W moim ustawieniu nie korzystałem z FLUSH TABLES WITH READ LOCK; na mistrza. Jeśli na serwerze głównym występuje duża aktywność zapisu, może być konieczne zablokowanie tabel przez uruchomienie tego polecenia przed utworzeniem kopii zapasowej. Jeśli używasz FLUSH TABLES WITH READ LOCK ;, po utworzeniu kopii zapasowej będziesz chciał uruchomić UNLOCK TABLES. Jeśli napotkasz jakiekolwiek problemy, daj mi znać.
Oto samouczek, który znalazłem na Howto Forge, stworzony dla Redhat / CentOS: http://www.howtoforge.com/mysql_database_replication
Kolejny samouczek, który wyglądał dobrze dla Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Oto konfiguracja, której użyłem:
Na serwerze MASTER
Skonfiguruj serwer główny:
Uruchom ponownie MySQL:
/etc/init.d/mysql restart
Połącz się z konsolą mysql: mysql -u root -ppassword
Twórz i udzielaj uprawnień użytkownikowi replikacji.
Pamiętaj, aby gdzieś skopiować te informacje lub pozostawić je widoczne
Zrzuć bazę danych do pliku:
Skopiuj zrzut bazy danych na serwer podrzędny za pomocą scp lub użyj ftp, jeśli chcesz:
Na serwerze SLAVE
Edytuj konfigurację mysql:
Uruchom ponownie MySQL:
/etc/init.d/mysql restart
Przywróć kopię zapasową:
Połącz z MySQL:
Uruchom
SHOW SLAVE STATUS\G
:Następnie pamiętaj, że replikacja może się nie powieść z różnych powodów. Na urządzeniu slave możesz monitorować status, uruchamiając polecenie SHOW SLAVE STATUS \ G; Lub skonfiguruj zadanie CRON do monitorowania statusu i wysyłania e-maili, jeśli się nie powiedzie. Zapoznaj się z danymi wyjściowymi tego polecenia. Jeśli replikacja działa poprawnie, powinieneś zobaczyć „Slave_IO_State: Oczekiwanie na przesłanie zdarzenia przez master”.
Po prawidłowym ustawieniu tej konfiguracji mogę dostarczyć skrypt do monitorowania tej replikacji.
Oto skrypt do monitorowania dziennika błędów w MySQL. Jeśli dodasz linię
uruchom ponownie mysql: /etc/init.d/mysql restart
Następnie możesz użyć następującego skryptu do monitorowania pliku dziennika. Jeśli dziennik zmieni się w jakikolwiek sposób, otrzymasz wiadomość e-mail z powiadomieniem, że wystąpił błąd na serwerze podrzędnym. Jeśli chcesz regularnie sprawdzać dziennik błędów, musisz dodać ten skrypt do swojego pliku crontab.
Oto przykładowy skrypt: /somepath/monitor_mysql_log.sh
Aby dodać do crontab.
Ustaw skrypt jako wykonywalny:
Zaktualizuj crontab:
A skrypt będzie uruchamiany co minutę.
Skrypt, który podałem, to skrypt, który po prostu szybko skompletowałem. Ponadto, aby serwer mógł wysyłać wiadomości e-mail, musisz zainstalować coś takiego jak postfix lub sendmail.
źródło
Mysqldump jest szybki, ale przywracanie zrzutów może być bardzo powolne w przypadku dużej bazy danych, a blokowanie tabel jest niedopuszczalne na działającej stronie. O wiele lepszym i szybszym sposobem konfigurowania urządzeń podrzędnych jest użycie XtraBackup firmy Percona . XtraBackup nakłada niewielkie obciążenie na master, nie wymaga żadnych blokad, a przywracanie na slave jest bardzo szybkie. Mechanizm ten tworzy kompletny klon całej bazy danych, w tym rzeczy takie jak tabele użytkowników, które zepsują niektóre rzeczy, które są konfigurowane przez instalację standardową, takie jak użytkownik debian-sys-maint, co niekoniecznie jest złą rzeczą !
Jako bonus, gdy już wiesz, jak to zrobić, możesz używać dokładnie tego samego mechanizmu do codziennych kopii zapasowych. Kopie zapasowe są wolniejsze niż mysqldump, ale przywracanie danych jest znacznie szybsze, co jest właśnie tym, czego potrzebujesz, gdy jesteś w panice i musisz przywrócić kopię zapasową! Jeśli kiedykolwiek wystąpi poważny błąd replikacji, po prostu skorzystaj z tej procedury, aby wyrzucić slave i odbudować go; to naprawdę nie trwa długo.
Będziesz musiał skonfigurować repo apt / yum Percona dla swojej dystrybucji, a następnie zainstalować
xtrabackup
pakiet zarówno na master, jak i slave. Zdecydowanie zalecam także użycie narzędzia do kompresji Pigz (równoległy gzip, dostępny w większości standardowych repozytoriów), ponieważ ma to ogromny wpływ na szybkość tworzenia kopii zapasowych.Proces przebiega w ten sposób (w Ubuntu inne dystrybucje mogą się nieco różnić) i zakłada, że już zainstalowałeś MySQL na swoim slave:
mkdir -p /var/xtrabackup; /usr/bin/innobackupex --slave-info --stream=tar --throttle=1500 /var/xtrabackup 2> /tmp/xtrabackup.out | /usr/bin/pigz -p 4 -c --best -q > /var/backups/mysql.tgz
(popraw wartość przepustnicy, aby ograniczyć wpływ tworzenia kopii zapasowej na usługę na żywo)scp -l 400000
aby nie zagłodzić mistrza przepustowości sieci dla klientów na żywo)service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(lub skompresuj go gdzieś, jeśli brakuje miejsca na dysku)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Zwróć uwagę nai
opcję operacji tar - bez niej nie będzie działać . To zajmie trochę czasu, jeśli masz dużą bazę danych./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. To skutecznie uruchamia przywracanie po awarii plików z dzienników binarnych. To zajmuje tylko kilka sekund; użyj mniejszej ilości pamięci na mniejszym serwerze.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Powie coś podobnegomysql-bin.000916 13889427
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000916', MASTER_LOG_POS=13889427;
(Zmień, aby pasowały do rzeczywistych danych serwera DB)START SLAVE;
SHOW SLAVE STATUS\G
Twój niewolnik jest teraz skonfigurowany. W razie potrzeby możesz teraz skonfigurować replikację cykliczną:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
zanotuj nazwę i pozycję pliku dziennika (coś w rodzaju mysql-bin.000031 i 17244785).CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000031', MASTER_LOG_POS=17244785;
wstawianie wartości z urządzenia podrzędnego, na które właśnie spojrzeliśmy.START SLAVE;
UNLOCK TABLES;
Powinieneś teraz mieć wszystko z cykliczną replikacją.
Jeśli chodzi o rozwiązywanie problemów, zestaw narzędzi Percona zawiera wiele rzeczy, które mogą pomóc, takie jak sumowanie punktów kontrolnych w celu wykrycia cichego uszkodzenia, pomiar opóźnienia i wiele innych. Najczęstszych form uszkodzenia replikacji można uniknąć, ustawiając
binlog_format = MIXED
plik my.cnf. To powiedziawszy, z mojego doświadczenia wynika, że replikacja nie jest na ogół kłopotliwa.źródło