Odbudowa slave'a za pomocą LVM
Oto metoda, której używamy do przebudowy slave'ów MySQL przy użyciu Linux LVM. Gwarantuje to spójną migawkę, wymagając bardzo minimalnego czasu przestoju na serwerze głównym.
Ustaw innodb max brudnych stron procent na zero na głównym serwerze MySQL. Zmusi to MySQL do zapisania wszystkich stron na dysku, co znacznie przyspieszy ponowne uruchomienie.
set global innodb_max_dirty_pages_pct = 0;
Aby monitorować liczbę brudnych stron, uruchom polecenie
mysqladmin ext -i10 | grep dirty
Gdy liczba przestanie spadać, osiągniesz punkt, aby kontynuować. Następnie zresetuj urządzenie główne, aby wyczyścić stare dzienniki bin / dzienniki przekaźników:
RESET MASTER;
Uruchom lvdisplay, aby uzyskać ścieżkę LV
lvdisplay
Wynik będzie wyglądał następująco
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Zamknij główną bazę danych za pomocą polecenia
service mysql stop
Następnie zrób migawkę, mysql_snapshot będzie nową nazwą woluminu logicznego. Jeśli na dysku systemu operacyjnego znajdują się dzienniki binarne, również należy je wykonać jako migawki.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Uruchom ponownie mastera za pomocą polecenia
service mysql start
Przywróć domyślne ustawienie brudnych stron
set global innodb_max_dirty_pages_pct = 75;
Uruchom ponownie lvdisplay, aby upewnić się, że migawka istnieje i jest widoczna
lvdisplay
Wynik:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Zamontuj migawkę
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Jeśli masz działające urządzenie podrzędne MySQL, musisz je zatrzymać
service mysql stop
Następnie musisz wyczyścić folder danych MySQL
cd /var/lib/mysql
rm -fr *
Powrót do mistrza. Teraz zsynchronizuj migawkę ze slave'em MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Po zakończeniu rsync możesz odmontować i usunąć migawkę
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Utwórz użytkownika replikacji na serwerze głównym, jeśli stary użytkownik replikacji nie istnieje lub hasło jest nieznane
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Sprawdź, czy pliki danych / var / lib / mysql należą do użytkownika mysql, jeśli tak, możesz pominąć następujące polecenie:
chown -R mysql:mysql /var/lib/mysql
Następnie zapisz pozycję binlog
ls -laF | grep mysql-bin
Zobaczysz coś takiego
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
W tym przypadku główny plik dziennika to najwyższy numer pliku w kolejności, a pozycja bin log to rozmiar pliku. Zapisz te wartości:
master_log_file=mysql-bin.000020
master_log_post=65657162
Następnie uruchom slave MySQL
service mysql start
Wykonaj polecenie change master na urządzeniu slave, wykonując następujące czynności:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
Wreszcie zacznij niewolnika
SLAVE START;
Sprawdź status slave:
SHOW SLAVE STATUS;
Upewnij się, że Slave IO działa i nie ma błędów połączenia. Powodzenia!
BR, Juha Vehnia
Niedawno napisałem to na moim blogu, który znajduje się tutaj ... Jest tam kilka szczegółów, ale historia jest taka sama.
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases