Neuerstellung des Slaves mit LVM
Hier ist die Methode, mit der wir MySQL-Slaves unter Linux LVM neu erstellen. Dies garantiert einen konsistenten Schnappschuss und erfordert nur minimale Ausfallzeiten Ihres Masters.
Setzen Sie innodb max schmutzige Seiten Prozent auf dem Master-MySQL-Server auf Null. Dadurch wird MySQL gezwungen, alle Seiten auf die Festplatte zu schreiben, was den Neustart erheblich beschleunigt.
set global innodb_max_dirty_pages_pct = 0;
Führen Sie den Befehl aus, um die Anzahl der fehlerhaften Seiten zu überwachen
mysqladmin ext -i10 | grep dirty
Sobald die Zahl nicht mehr abnimmt, haben Sie den Punkt erreicht, an dem Sie fortfahren können. Setzen Sie als Nächstes den Master zurück, um die alten Bin-Protokolle / Relay-Protokolle zu löschen:
RESET MASTER;
Führen Sie lvdisplay aus, um den LV-Pfad abzurufen
lvdisplay
Die Ausgabe sieht folgendermaßen aus
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Fahren Sie die Master-Datenbank mit dem Befehl herunter
service mysql stop
Nehmen Sie als nächstes ein Snaphot, mysql_snapshot ist der neue logische Datenträgername. Wenn sich Binlogs auf dem Betriebssystemlaufwerk befinden, müssen diese ebenfalls als Snapshot erstellt werden.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Starten Sie den Master erneut mit dem Befehl
service mysql start
Stellen Sie die Standardeinstellung für schmutzige Seiten auf die Standardeinstellung zurück
set global innodb_max_dirty_pages_pct = 75;
Führen Sie lvdisplay erneut aus, um sicherzustellen, dass der Snapshot vorhanden und sichtbar ist
lvdisplay
Ausgabe:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Hängen Sie den Schnappschuss ein
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Wenn ein MySQL-Slave ausgeführt wird, müssen Sie ihn stoppen
service mysql stop
Als nächstes müssen Sie den MySQL-Datenordner löschen
cd /var/lib/mysql
rm -fr *
Zurück zum Meister. Synchronisieren Sie nun den Snapshot mit dem MySQL-Slave
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Sobald rsync abgeschlossen ist, können Sie den Snapshot aushängen und entfernen
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Erstellen Sie einen Replikationsbenutzer auf dem Master, wenn der alte Replikationsbenutzer nicht vorhanden ist oder das Kennwort unbekannt ist
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Stellen Sie sicher, dass die Datendateien / var / lib / mysql dem Benutzer mysql gehören. In diesem Fall können Sie den folgenden Befehl weglassen:
chown -R mysql:mysql /var/lib/mysql
Zeichnen Sie als nächstes die Binlog-Position auf
ls -laF | grep mysql-bin
Sie werden so etwas sehen
..
-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
Hier ist die Master-Protokolldatei die höchste Dateinummer in Folge und die Position des Bin-Protokolls ist die Dateigröße. Notieren Sie diese Werte:
master_log_file=mysql-bin.000020
master_log_post=65657162
Als nächstes starten Sie den Slave MySQL
service mysql start
Führen Sie den Befehl change master auf dem Slave aus, indem Sie Folgendes ausführen:
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;
Starten Sie endlich den Slave
SLAVE START;
Slave-Status überprüfen:
SHOW SLAVE STATUS;
Stellen Sie sicher, dass Slave IO ausgeführt wird und keine Verbindungsfehler vorliegen. Viel Glück!
BR, Juha Vehnia
Ich habe dies kürzlich in meinem Blog geschrieben, der hier zu finden ist ... Es gibt dort nur wenige Details, aber die Geschichte ist dieselbe.
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