Ich bin sehr neu in der Datenbankverwaltung.
Beim Einrichten der MySQL-Master-Slave-Replikation treten viele Probleme auf.
Ich habe auch mit regelmäßigen Problemen bei der Fehlerbehebung bei der MySQL-Replikation zu kämpfen.
Kann jemand helfen zu verstehen, wie ich mit all diesen umgehen soll?
mysql
replication
mysql-5
Abdul Manaf
quelle
quelle
Antworten:
Ich habe Links zu Tutorials bereitgestellt. Beachten Sie jedoch, dass sich die Datei my.cnf unter Ubuntu in /etc/mysql/my.cnf und nicht wie im Tutorial in /etc/my.cnf befindet. In meinem Setup habe ich FLUSH TABLES WITH READ LOCK nicht verwendet. auf den Meister. Wenn Ihr Masterserver über viele Schreibaktivitäten verfügt, müssen Sie möglicherweise Ihre Tabellen sperren, indem Sie diesen Befehl ausführen, bevor Sie eine Sicherungskopie erstellen. Wenn Sie FLUSH TABLES WITH READ LOCK verwenden, möchten Sie nach der Sicherung UNLOCK TABLES ausführen. Wenn Sie auf Probleme stoßen, lassen Sie es mich wissen.
Hier ist das Tutorial, das ich in Howto Forge für Redhat / CentOS gefunden habe: http://www.howtoforge.com/mysql_database_replication
Ein weiteres Tutorial, das für Ubuntu in Ordnung aussah http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Hier ist die Konfiguration, die ich verwendet habe:
Auf dem MASTER Server
Konfigurieren Sie den Master-Server:
Starten Sie MySQL neu:
/etc/init.d/mysql restart
Stellen Sie eine Verbindung zur Konsole von mysql her: mysql -u root -ppassword
Erstellen und erteilen Sie Berechtigungen für den Replikationsbenutzer.
Stellen Sie sicher, dass Sie diese Informationen irgendwo kopieren oder sichtbar lassen
Dump die Datenbank in eine Datei:
Kopieren Sie den Datenbankspeicherauszug mit scp auf den Slave-Server oder verwenden Sie ftp, wenn Sie möchten:
Auf dem SLAVE Server
Bearbeiten Sie die MySQL-Konfiguration:
Starten Sie MySQL neu:
/etc/init.d/mysql restart
Stellen Sie die Sicherung wieder her:
Stellen Sie eine Verbindung zu MySQL her:
Ausführen
SHOW SLAVE STATUS\G
:Beachten Sie anschließend, dass die Replikation aus verschiedenen Gründen fehlschlagen kann. Auf dem Slave können Sie den Status überwachen, indem Sie den Befehl SHOW SLAVE STATUS \ G ausführen. Oder richten Sie einen Cron-Job ein, um den Status zu überwachen und E-Mails zu senden, wenn dies fehlschlägt. Machen Sie sich mit der Ausgabe dieses Befehls vertraut. Wenn die Replikation ordnungsgemäß ausgeführt wird, sollte "Slave_IO_State: Warten auf das Senden des Ereignisses durch den Master" angezeigt werden.
Sobald Sie dieses Setup korrekt erhalten haben, kann ich Ihnen ein Skript zur Überwachung dieser Replikation bereitstellen.
Hier ist ein Skript zur Überwachung des Fehlerprotokolls in MySQL. Wenn Sie die Zeile hinzufügen
Starten Sie mysql neu: /etc/init.d/mysql restart
Dann können Sie das folgende Skript verwenden, um die Protokolldatei zu überwachen. Wenn sich das Protokoll auf irgendeine Weise ändert, erhalten Sie eine E-Mail, in der Sie darüber informiert werden, dass auf dem Slave-Server ein Fehler aufgetreten ist. Wenn Sie möchten, dass das Fehlerprotokoll regelmäßig überprüft wird, müssen Sie dieses Skript zu Ihrer crontab hinzufügen.
Hier ist ein Beispielskript: /somepath/monitor_mysql_log.sh
Crontab hinzufügen.
Machen Sie das Skript ausführbar:
Crontab aktualisieren:
Und das Skript wird jede Minute ausgeführt.
Das Skript, das ich bereitgestellt habe, ist ein Skript, das ich gerade schnell zusammengestellt habe. Damit Ihr Server E-Mails senden kann, müssen Sie außerdem etwas wie Postfix oder Sendmail installieren.
quelle
Mysqldump ist schnell, aber das Wiederherstellen von Dumps kann für eine große Datenbank sehr langsam sein, und das Sperren von Tabellen ist auf einer Live-Site nicht zulässig. Eine viel bessere und schnellere Methode zum Einrichten von Slaves ist die Verwendung von Perconas XtraBackup . XtraBackup belastet den Master nur wenig, erfordert keine Sperren und die Wiederherstellung auf dem Slave ist sehr schnell. Dieser Mechanismus erzeugt einen vollständigen Klon der gesamten Datenbank, einschließlich Benutzertabellen, die einige Dinge zerstören, die durch eine Standardinstallation eingerichtet wurden, wie z. B. der Benutzer debian-sys-maint, was nicht unbedingt eine schlechte Sache ist !
Als Bonus können Sie genau den gleichen Mechanismus für Ihre täglichen Sicherungen verwenden, sobald Sie wissen, wie dies gemacht wird. Backups sind langsamer als mysqldump, aber Wiederherstellungen sind viel schneller. Dies ist genau das, was Sie brauchen, wenn Sie in einer Situation sind, in der Sie in Panik geraten und ein Backup wiederherstellen müssen! Wenn jemals ein schwerwiegender Replikationsfehler auftritt, verwenden Sie einfach dieses Verfahren, um den Slave in den Papierkorb zu werfen und neu zu erstellen. es dauert wirklich nicht lange.
Sie müssen Perconas Apt / Yum Repo für Ihre Distribution einrichten und das
xtrabackup
Paket dann auf Master und Slave installieren . Ich empfehle außerdem nachdrücklich die Verwendung des Pigz- Komprimierungsdienstprogramms (paralleles gzip, das in den meisten Standard-Repos verfügbar ist), da dies einen großen Unterschied zur Backup-Geschwindigkeit darstellt.Der Prozess läuft wie folgt ab (unter Ubuntu können andere Distributionen geringfügig abweichen) und setzt voraus, dass Sie MySQL bereits auf Ihrem Slave installiert haben:
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
(Passen Sie den Drosselungswert an, um die Auswirkungen der Sicherungskopie auf den Live-Dienst zu begrenzen.)scp -l 400000
diese Option, um den Master nicht an Netzwerkbandbreite für Live-Clients zu verlieren).service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(oder komprimieren Sie es irgendwo, wenn Sie wenig Speicherplatz haben)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Beachten Sie dasi
Option für die Teer-Operation - ohne sie wird es nicht funktionieren . Dies dauert eine Weile, wenn Sie eine große Datenbank haben./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. Dies führt effektiv eine Absturzwiederherstellung für die Dateien aus den Binärprotokollen durch. Dies dauert nur wenige Sekunden. Verwenden Sie auf einem kleineren Server einen kleineren Speicher.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Es wird so etwas sagenmysql-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;
(Change übereinstimmen Details echten DB - Server)START SLAVE;
SHOW SLAVE STATUS\G
Dein Sklave ist jetzt fertig. Bei Bedarf können Sie jetzt die Umlaufreplikation einrichten:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
Notieren Sie den Namen und die Position der Protokolldatei (etwa mysql-bin.000031 und 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;
Einfügen von Werten vom Slave, den wir uns gerade angesehen haben.START SLAVE;
UNLOCK TABLES;
Sie sollten jetzt alle mit einer Umlaufreplikation festgelegt werden.
Was die Fehlerbehebung angeht , bietet das Percona-Toolkit eine Vielzahl von Hilfsmitteln, wie beispielsweise Prüfsummen zur Erkennung stiller Korruption, Verzögerungsmessungen und mehr. Die häufigsten Formen der Replikationsbeschädigung können vermieden werden, indem Sie
binlog_format = MIXED
in Ihrer my.cnf festlegen. Nach meiner Erfahrung ist die Replikation jedoch nicht generell problematisch.quelle