So konfigurieren Sie die MySQL-Master-Slave-Synchronisierung in Ubuntu 16.04

So konfigurieren Sie die MySQL-Master-Slave-Synchronisierung in Ubuntu 16.04

Vorbereitung

1. Die Master- und Slave-Datenbankversionen sollten konsistent sein

2. Daten in der Master- und Slave-Datenbank bleiben konsistent

Primäre Datenbank: 121.199.27.227 /ubuntu 16.04 MySQL 5.7.21 (Alibaba Cloud)

Aus der Datenbank: 182.254.149.39 /ubuntu 16.04 MySQL 5.7.21 (Tencent Cloud)

Firewall-Konfiguration

Um unnötige Angriffe zu vermeiden, konfigurieren Sie den Masterserver so, dass nur bestimmte IP-Adressen auf den Datenbankport zugreifen können.

Firewall-Konfiguration der Hauptdatenbank

# iptables -A INPUT -p tcp -s slave_ip --dport 3306 -j AKZEPTIEREN
#Löschen Sie alle vorhandenen Konfigurationen, um mehrere doppelte Datensätze zu vermeiden. $ sudo iptables -D INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT 
$ sudo iptables -D INPUT -p tcp -s 127.0.0.1 --dport 3306 -j AKZEPTIEREN 
$ sudo iptables -D INPUT -p tcp --dport 3306 -j DROP 
$ sudo iptables -D INPUT -p udp --dport 3306 -j DROP 
$ sudo iptables -D INPUT -p sctp --dport 3306 -j DROP
#Fügen Sie eine Konfiguration hinzu, um nur bestimmten Adressen den Zugriff auf den Datenbankport zu erlauben. $ sudo iptables -A INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT
$ sudo iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j AKZEPTIEREN
$ sudo iptables -A INPUT -p tcp --dport 3306 -j DROP
$ sudo iptables -A INPUT -p udp --dport 3306 -j DROP
$ sudo iptables -A INPUT -p sctp --dport 3306 -j DROP
$ sudo iptables -L -n
#Konfiguration speichern $ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent speichern
#Die Konfiguration wird in den folgenden zwei Dateien gespeichert: /etc/iptables/rules.v4 /etc/iptables/rules.v6.
#Es ist am besten, den tatsächlich gespeicherten Inhalt zu bestätigen, insbesondere wenn andere Sicherheitssoftware wie Denyhosts installiert ist.
#Überflüssige Regeln können aufgezeichnet worden sein und müssen manuell aus der Firewall-Konfiguration der Bibliothek gelöscht werden# iptables -A OUTPUT -p tcp -d master_ip --dport 3306 -j ACCEPT
#Löschen Sie alle vorhandenen Konfigurationen, um mehrere doppelte Datensätze zu vermeiden$ sudo iptables -D OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT
#Konfiguration hinzufügen$ sudo iptables -A OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT
$ sudo iptables -L -n
#Konfiguration speichern $ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent speichern
#Die Konfiguration wird in den folgenden zwei Dateien gespeichert: /etc/iptables/rules.v4 /etc/iptables/rules.v6.
#Es ist am besten, den tatsächlich gespeicherten Inhalt zu bestätigen, insbesondere wenn andere Sicherheitssoftware wie Denyhosts installiert ist.
#Es können redundante Regeln aufgezeichnet sein, die manuell gelöscht werden müssen

Masterdatenbank-Masterkonfiguration

1. Ändern Sie die MySQL-Konfiguration

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

Ändern Sie den Abschnitt [mysqld] wie folgt:

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log #Binärlog öffnen. Es ist standardmäßig auskommentiert. Wir entfernen die Kommentare. server-id = 1 #Server-ID festlegen
bind-address = 0.0.0.0 #Der Standardwert ist 127.0.0.1. Hier setzen wir es auf eine beliebige Adresse, um den Fernzugriff zu ermöglichen. Stellen Sie vorher sicher, dass die Firewall richtig konfiguriert ist, da sonst Sicherheitsrisiken bestehen.

2. Starten Sie MySQL neu und erstellen Sie ein Benutzerkonto für die Synchronisierung

Erstellen Sie einen Benutzer und autorisieren Sie: Benutzer: repl Passwort: slavepass

$ sudo service mysql neu starten
$ mysql -u root -p -e "CREATE USER 'repl'@'182.254.149.39' IDENTIFIED BY 'slavepass';" #Benutzer erstellen$ mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'182.254.149.39';" #Berechtigungen zuweisen$ mysql -u root -p -e "flush privileges;" #Berechtigungen aktualisieren

3. Überprüfen Sie den Masterstatus und notieren Sie den Namen der Binärdatei (mysql-bin.000001) und den Speicherort (333802):

$ mysql -u root -p -e "MASTER-STATUS ANZEIGEN;"
Passwort eingeben: 
+------------------+----------+--------------+------------------+-------------------+
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 333802 | | | |
+------------------+----------+--------------+------------------+-------------------+

4. Sichern Sie die Master-Datenbank, um die Daten für die erste Datensynchronisation der Slave-Datenbank vorzubereiten

Verwenden Sie das folgende Skript, um eine Datenbanksicherungsdatei zu generieren

#Hier nehmen wir das Backup der WordPress-Datenbank als Beispiel datadump=`which mysqldump`
mysqluser="Stamm"
userpass="Passwort" 
wordpressdb="WordPress"
Backupwordpress_sql = $wordpressdb.`Datum +%Y%m%d`.sql
wenn $datadump -u $mysqluser --password=$userpass -h localhost --opt $wordpressdb > $backupwordpress_sql 2>&1
Dann
  echo "Sicherung von $wordpressdb erfolgreich"
anders
  echo "Backup $wordpressdb Fehler"
  Ausfahrt 1
fi
#Überprüfen Sie, ob am Ende der Datei „-- Dump completed on“ steht. Wenn es nicht vorhanden ist, bedeutet dies, dass die Sicherung fehlgeschlagen ist.
if [ 0 -eq "$(sed '/^$/!h;$!d;g' $backupwordpress_sql | grep -c "Dump abgeschlossen am")" ]; 
Dann
 echo "Backup $wordpressdb Fehler"
 Ausfahrt 1 
anders
 echo "Sicherung von $wordpressdb erfolgreich"
fi

Führen Sie das Skript aus, um sicherzustellen, dass die endgültige Ausgabesicherung erfolgreich ist

$ CD ~
$ sudo bash backup_wordpress.sh

Slave-Server-Konfiguration

1. Ändern Sie die MySQL-Konfiguration

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

Ändern Sie die Server-ID. Die Server-IDs jeder Datenbank müssen eindeutig sein und dürfen nicht miteinander in Konflikt stehen.

[mysqld]
server-id = 2 #Server-ID festlegen, muss eindeutig sein log_bin = /var/log/mysql/mysql-bin.log #Am besten auch das Protokoll öffnen

2. Führen Sie die erste Wiederherstellung der Datenbank durch:

$ sudo service mysql neu starten
$ scp -P 22 -r [email protected]:~/wordpress.*.sql ./
#Löschen Sie eine mögliche Warnzeile, die uns möglicherweise daran hindert, Daten wiederherzustellen. $ sed -i "/^mysqldump: \[Warnung\] Die Verwendung eines Passworts auf der Befehlszeilenschnittstelle kann unsicher sein\./d" wordpress.*.sql
$ mysql -u root -p -e "Datenbank WordPress löschen;"
$ mysql -u root -p -e "Datenbank WordPress erstellen;"
$ mysql -u root -p wordpress < wordpress.*.sql

3. Starten Sie MySQL neu, öffnen Sie eine MySQL-Sitzung und führen Sie die SQL-Anweisung zur Synchronisierung aus (erfordert den Hostnamen des primären Servers, Anmeldeinformationen sowie den Namen und Speicherort der Binärdatei):

$ mysql -u root -p -e "ÄNDERN SIE MASTER AUF MASTER_HOST='121.199.27.227', MASTER_USER='repl', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=333802;"

4. Starten Sie den Slave-Synchronisierungsprozess:

$ mysql -u root -p -e "Slave starten;"

5. Überprüfen Sie den Slave-Status:

$ mysql -u root -p -e "Slave-Status anzeigen\G;"
Passwort eingeben:
*************************** 1. Reihe ***************************
        Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
         Master_Host: 121.199.27.227
         Master_Benutzer: repl
         Master_Port: 3306
        Verbindungswiederholung: 60
       Master_Log_File:mysql-bin.000001
     Read_Master_Log_Pos: 9448236
        Relay_Log_File: VM-114-251-ubuntu-relay-bin.000002
        Relay_Log_Pos: 17780
    Relay_Master_Log_File: mysql-bin.000001
       Slave_IO_Running: Ja
      Slave_SQL_Running: Nein
       Replicate_Do_DB:
     Replikat_Ignorieren_DB:
      Tabelle_replizieren:
    Tabelle_Ignorieren_replizieren:
   Wild_Do_Tabelle replizieren:
 Tabelle_Wild_Ignore_replizieren:
    ...

Wenn Slave_IO_Running und Slave_SQL_Running beide JA sind, bedeutet dies, dass die Master-Slave-Synchronisierungseinstellung erfolgreich war. Als Nächstes können Sie einige Überprüfungen durchführen. Fügen Sie beispielsweise ein Datenelement in eine Tabelle in der Testdatenbank der Masterdatenbank ein und prüfen Sie, ob in derselben Datentabelle der Testdatenbank des Slaves neue Daten vorhanden sind, um zu überprüfen, ob die Master-Slave-Replikationsfunktion wirksam ist. Sie können den Slave auch herunterfahren (mysql>stop slave;) und dann den Master ändern, um zu sehen, ob der Slave ebenfalls entsprechend geändert wurde (nach dem Stoppen des Slaves werden die Änderungen des Masters nicht mit dem Slave synchronisiert), und die Master-Slave-Replikationsfunktion kann überprüft werden.

Andere verwandte Parameter, die ebenfalls verwendet werden können:

Nachdem der Master das Binärprotokoll geöffnet hat, werden standardmäßig Operationen an allen Tabellen in allen Bibliotheken aufgezeichnet. Sie können es so konfigurieren, dass nur Operationen an einer bestimmten Datenbank oder sogar einer bestimmten Tabelle aufgezeichnet werden. Insbesondere können Sie die folgenden Optionen im Abschnitt [mysqld] der MySQL-Konfigurationsdatei hinzufügen und ändern:

# Welche Datenbanken werden nicht synchronisiert? binlog-ignore-db = mysql 
binlog-ignorieren-db = Test 
binlog-ignore-db = Informationsschema 
# Nur bestimmte Datenbanken synchronisieren, außer diesen keine anderen Datenbanken synchronisieren binlog-do-db = game

Wenn Sie beispielsweise zuvor den Masterstatus überprüfen, können Sie sehen, dass nur die Testbibliothek aufgezeichnet ist und das Handbuch und die MySQL-Bibliotheken ignoriert werden.

Zusammenfassen

Oben ist die vom Herausgeber eingeführte Konfigurationsmethode für die MySQL-Master-Slave-Synchronisierung in Ubuntu 16.04. Ich hoffe, sie ist für alle hilfreich. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Lösung für den Mysql-FEHLER 1045 (28000): Zugriff verweigert für Benutzer root@localhost-Problem im Ubuntu-System
  • Lösung zum Vergessen des MySQL-Root-Passworts in Ubuntu
  • MySQL und MySQL Workbench Installations-Tutorial unter Ubuntu
  • Lösen Sie das Problem von FEHLER 1045 (28000): Zugriff verweigert für Benutzer ''root''@''localhost'' beim Anmelden nach der Installation von MySQL 5.7.17 auf Ubuntu 16.04
  • Installieren Sie mysql5.7.10 manuell unter Ubuntu
  • MySQL 5.7.17 Installations- und Konfigurations-Tutorial unter Linux (Ubuntu)
  • So konfigurieren Sie MySQL auf einem Ubuntu 16.04-Server und aktivieren die Remote-Verbindung
  • Detaillierte Erläuterung der drei Möglichkeiten zum Starten/Stoppen/Neustarten der MySQL-Datenbank in Ubuntu Server

<<:  So ändern Sie das Terminal in Ubuntu 18 in eine schöne Eingabeaufforderung

>>:  Docker- und Portainer-Konfigurationsmethoden unter Linux

Artikel empfehlen

Win2008 R2 MySQL 5.5 ZIP-Format MySQL-Installation und -Konfiguration

Installation und Konfiguration von MySQL im ZIP-F...

Beispiel einer Autorisierungsüberprüfungsmethode von Nest.js

Inhaltsverzeichnis 0x0 Einführung 0x1 RBAC-Implem...

Detaillierte Erläuterung der MySQL Master-Slave-Datenbankkonstruktionsmethode

Dieser Artikel beschreibt, wie man eine MySQL Mas...

Detaillierte Erklärung zur Verwendung von HTML-Header-Tags

HTML besteht aus zwei Teilen: Kopf und Text ** Da...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.18 (Linux)

Dieser Artikel zeichnet das grafische Tutorial zu...

CSS transparenter Rahmen Hintergrund-Clip-Magie

In diesem Artikel wird hauptsächlich die wunderba...

Vue implementiert einen einfachen Laufschrifteffekt

In diesem Artikel wird der spezifische Code von V...

Setzen Sie den Eingang auf schreibgeschützt über deaktiviert und schreibgeschützt

Es gibt zwei Möglichkeiten, schreibgeschützte Eing...