Detaillierte Erläuterung des tatsächlichen Prozesses der Master-Slave-Synchronisierung der MySQL-Datenbank

Detaillierte Erläuterung des tatsächlichen Prozesses der Master-Slave-Synchronisierung der MySQL-Datenbank

Dieser Artikel beschreibt den eigentlichen Prozess der Master-Slave-Synchronisierung einer MySQL-Datenbank. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Fortsetzung des vorherigen Artikels: Erste Schritte mit MySQL-Datenbank: Sichern der Datenbank

Beschreibung der Installationsumgebung

Systemumgebung:

[root@~]# cat /etc/redhat-release 
CentOS-Version 6.5 (endgültig)
[root@~]# uname -r
2.6.32-431.el6.x86_64

Datenbank:

Da es sich um eine simulierte Umgebung handelt, befinden sich die Master- und Slave-Bibliotheken auf demselben Server und die Server-IP-Adresse lautet 192.168.1.7

  • Die Hauptbibliothek verwendet Port 3306
  • Verwenden Sie Port 3307 aus der Bibliothek
  • Datenbankdatenverzeichnis/Daten

MySQL-Datenbankdienst installieren

Herunterladen des Pakets

Heute verwenden wir das binäre Installationspaket, um den MySQL-Datenbankdienst bereitzustellen. Weitere Installations- und Bereitstellungsmethoden finden Sie im vorherigen Artikel

[root@~]#wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.51-linux2.6-x86_64.tar.gz

Datenverzeichnis und Softwareinstallationsverzeichnis erstellen

[root@~]#mkdir /data{3306,3307} -p
[root@~]#mkdri /Anwendung

Dekomprimierungssoftware

[root@~]#tar zxf mysql-5.5.51-linux2.6-x86_64.tar.gz 
[root@~]#mv mysql-5.5.51-linux2.6-x86_64 /anwendung/mysql-5.5.51
[root@~]#ln -s /anwendung/mysql-5.5.51 /anwendung/mysql

Benutzer erstellen

[root@~]#groupadd mysql
[root@~]#useradd -g mysql -M mysql

Initialisieren der Datenbank

[root@~]#/Anwendung/mysql/scripts/mysql_install_db --basedir=/Anwendung/mysql --datadir=/data/3306/data --user=mysql

[root@~]#/Anwendung/mysql/scripts/mysql_install_db --basedir=/Anwendung/mysql --datadir=/data/3307/data --user=mysql

Erstellen einer Konfigurationsdatei

[root@~]#vi /data/3306/my.cnf
[Kunde]
Port = 3306
Socket = /data/3306/mysql.sock

[mysql]
kein automatisches Wiederaufwärmen

[mysqld]
Benutzer = MySQL
Port = 3306
Socket = /data/3306/mysql.sock
basedir = /anwendung/mysql
Datenverzeichnis = /Daten/3306/Daten
Open_files_limit = 1024
back_log = 600

max_Verbindungen = 800
max_connect_errors = 3000
Tabellencache = 614
externe Sperre = FALSE
max_allowed_packet = 8M
Sortierpuffergröße = 1 M
Join-Puffergröße = 1 M
Thread-Cache-Größe = 100
Thread_Parallelität = 2
Abfrage-Cachegröße = 2 M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
Thread-Stapel = 192 KB
temporäre Tabellengröße = 2 M
maximale Heap-Tabellengröße = 2 M
lange_Abfragezeit = 1

pid-Datei = /data/3306/mysql.pid
log-bin = /data/3306/mysql-bin
#Der entscheidende Punkt der Master-Slave-Synchronisation: Der Slave muss relay-log = /data/3306/relay-bin nicht öffnen
Relay-Log-Info-Datei = /data/3306/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
Ablaufdatum der Protokolle: 7
Schlüsselpuffergröße = 16 M
Lesepuffergröße = 1 M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
Kleinbuchstaben-Tabellennamen = 1
Namensauflösung überspringen
Slave-Überspringfehler = 1032,1062
replizieren-ignorieren-db=mysql
server-id = 1 #Die Master- und Slave-IDs können nicht identisch sein [mysqldump]
schnell
max_allowed_packet = 2M

[mysqld_safe]
log-error=/data/3306/mysql3306.err
pid-Datei=/data/3306/mysqld.pid

Datenbank-Startskript:

[root@~]#vi /data/3306/mysql
#!/bin/sh
Port = 3306
Benutzer="root"
pwd="123456"
Pfad="/Anwendung/mysql/bin"
sock="/data/${port}/mysql.sock"

start_mysql()
{
 wenn [ ! -e "$sock" ];dann
  printf "MySQL wird gestartet...\n"
  /bin/sh ${Pfad}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
 anders
  printf "MySQL läuft...\n"
  Ausfahrt
 fi
}
stop_mysql()
{
 wenn [ ! -e "$sock" ];dann
  printf "MySQL wurde gestoppt...\n"
  Ausfahrt
 anders
  printf "MySQL wird gestoppt...\n"
  ${Path}/mysqladmin -u ${user} -p${pwd} -S /data/${port}/mysql.sock herunterfahren
 fi
}
restart_mysql()
{
 printf "MySQL wird neu gestartet...\n"
 stop_mysql
 Schlaf 2
 mysql starten
}
Fall $1 in
Start)
 mysql starten
;;
stoppen)
 stop_mysql
;;
Neustart)
 mysql_neustarten
;;
*)
 printf "Verwendung: /data/${port}/mysql {start|stop|restart}\n"
esac

Hinweis: Die Konfigurationsdatei der Master-Slave-Bibliothek ist dieselbe wie die Startdatei. Sie müssen nur den Port und die Server-ID ändern, um die Konfiguration abzuschließen.

Autorisieren Sie das Verzeichnis und erhöhen Sie die Ausführungsberechtigung der Startdatei

[root@~]#chown -R mysql.mysql /data
[root@~]#find /data -name mysql -exex chmod +x {} \;

Starten der Datenbank

[root@~]#/data/3306/mysql start
[root@~]#/data/3307/mysql start

Ändern des Standard-Datenbankkennworts

[root@~]#mysqladmin -uroot Passwort '123456' -S /data/3306/mysql.sock
[root@~]#mysqladmin -uroot Passwort '123456' -S /data/3307/mysql.sock

Testanmeldung, Sie können sich bei zwei Datenbanken anmelden, um den gesamten Installationsvorgang abzuschließen

Konfigurieren der Hauptbibliothek

1) Sichern Sie die Hauptdatenbank

mkdir /sicherung

Melden Sie sich bei der Hauptdatenbank an, um einen Benutzer zu erstellen und zu autorisieren

[root@~]#mysql -uroot -p123456 -S /data/3306/mysql.sock

mysql> gewähre Replikations-Slave auf *.* an rep@'192.168.1.%', identifiziert durch'123456';

Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> Berechtigungen leeren;

Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Tabellensperrvorgang ausführen

[root@~]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3306/mysql.sock -e "Tabelle mit Lesesperre leeren;"

Sichern der Masterdatenbank

[root@~]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3306/mysql.sock -e "master status anzeigen;" >/backup/mysql.log

[root@~]#/application/mysql/bin/mysqldump -uroot -p123456 -S /data/3306/mysql.sock -A -B |gzip >/backup/mysql.sql.gz

Den Status der gesperrten Tabelle aufheben

[root@~]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3306/mysql.sock -e "Tabellen entsperren;"

Hinweis: Die oben genannten Vorgänge können auch durch Anmelden bei der Hauptdatenbank ausgeführt werden. Beachten Sie jedoch, dass Sie nach dem Ausführen des Vorgangs zum Sperren der Tabelle ein weiteres Fenster öffnen müssen, um die Daten zu sichern. Sie können nicht direkt beenden, um zu verhindern, dass Daten geschrieben werden und unvollständige Sicherungsdaten entstehen. Am besten verwenden Sie nicht-interaktive Operationen.

Konfigurieren Sie die Slave-Bibliothek, um eine Master-Slave-Synchronisierung zu erreichen

Entpacken Sie die Sicherungsdatei der Hauptbibliothek und stellen Sie die Datenbank wieder her

[root@backup ]#gzip -d mysql.sql.gz

[root@backup ]#/Anwendung/mysql/bin/mysql -uroot -p123456 -S /data/3307/mysql.sock < mysql.sql

LOG anzeigen

[root@backup ]#cat mysql.log
+------------------+----------+--------------+------------------+
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 424 | | |
+------------------+----------+--------------+------------------+

Melden Sie sich bei der Slave-Bibliothek an und führen Sie die folgenden Vorgänge aus

mysql> ÄNDERN SIE MASTER IN
 -> MASTER_HOST='192.168.1.7', #Server-IP
 -> MASTER_PORT=3306, #Master-Datenbank-Port-> MASTER_USER='rep', #Synchronisierter Benutzer-> MASTER_PASSWORD='123456', #Synchronisiertes Benutzerpasswort-> MASTER_LOG_FILE='mysql-bin.000002', #Binlog-Datei-> MASTER_LOG_POS=424; #Position pointmysql> start slave; #Synchronisierung starten

Warten Sie 60 Sekunden, um den Synchronisierungsstatus zu überprüfen

[root@backup ]# mysql -S /data/3307/mysql.sock -e "show slave status\G"|egrep "Seconds_Behind_Master|_Running"
   Slave_IO_Running: Ja
   Slave_SQL_Running: Ja
   Sekunden_Hinter_Master: 0

Solange die obige Situation eintritt, bedeutet dies, dass die Master-Slave-Synchronisation erfolgreich ist

Testen der Master-Slave-Synchronisation

Erstellen Sie eine Datenbank in der Hauptbibliothek

[root@backup ~]# mysql -S /data/3306/mysql.sock -e "Datenbank Tongbuku erstellen"

[root@backup ~]# mysql -S /data/3306/mysql.sock -e "Datenbanken anzeigen"
+-----------------------------+
| Datenbank |
+-----------------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
| Prüfung |
|Tongbuku |
+-----------------------------+

Überprüfen Sie den Synchronisierungsstatus der Slave-Bibliothek

[root@backup ~]# mysql -S /data/3307/mysql.sock -e "Datenbanken anzeigen"
+-----------------------------+
| Datenbank |
+-----------------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
| Prüfung |
|Tongbuku |
+-----------------------------+

Dies zeigt an, dass der Master-Slave-Synchronisierungsstatus normal ist. Sie können auch eine Tabelle in der neuen Datentabelle der Masterdatenbank erstellen und neue Daten einfügen, um den Master-Slave-Synchronisierungsstatus zu testen.

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Zwei Möglichkeiten zur Lösung des Problems, dass die MySQL-Master-Slave-Datenbank nicht synchronisiert wird
  • Master-Slave-Synchronisationskonfiguration der Mysql-Datenbank
  • Dieser Artikel zeigt Ihnen das Prinzip der MySQL Master-Slave-Synchronisation
  • So führen Sie MySQL in einer Docker-Umgebung aus und aktivieren Binlog, um die Master-Slave-Synchronisierung zu konfigurieren
  • MySQL Master-Slave-Synchronisation, Implementierungsprinzip des Transaktions-Rollbacks
  • Detaillierte Erklärung des Server-ID-Beispiels bei der MySQL-Master-Slave-Synchronisierung
  • Master-Slave-Synchronisationskonfiguration und Lese-/Schreibtrennung der MySQL-Datenbank
  • Prinzip und Anwendung der MySQL-Master-Slave-Synchronisation

<<:  Das Vue-Projekt realisiert das Zeichnen eines Wasserzeichens in einem bestimmten Bereich

>>:  Lernen Sie den Funktionsmechanismus von jsBridge in einem Artikel kennen

Artikel empfehlen

Schnelle und sichere Methode zum Umbenennen einer MySQL-Datenbank (3 Arten)

Inhaltsverzeichnis So benennen Sie eine MySQL-Dat...

Die Verknüpfungsmethode zwischen Menü und Registerkarte von vue+iview

Vue+iview-Menü und Tab-Verknüpfung Ich entwickle ...

Mysql GTID Mha-Konfigurationsmethode

Gtid + Mha + Binlog-Serverkonfiguration: 1: Testu...

Skin-Change-Lösung basierend auf Vue kombiniert mit ElementUI

Inhaltsverzeichnis Vorne geschrieben Lösung 1: Gl...

So verwalten Sie große Datei-Uploads und Breakpoint-Resumes basierend auf js

Inhaltsverzeichnis Vorwort Frontend-Struktur Back...

Detaillierte Einführung in den MySQL Innodb Index-Mechanismus

1. Was ist ein Index? Ein Index ist eine Datenstr...

Reine CSS-Implementierung eines Radio- und Checkbox-Effektbeispiels

Radio und Kontrollkästchen Reines CSS zum Erziele...

Detaillierte Erklärung zur Verwendung von Router-View-Komponenten in Vue

Wenn Sie ein Vue-Projekt entwickeln, müssen Sie h...

Verwenden Sie momentJs, um eine Countdown-Komponente zu erstellen (Beispielcode)

Heute möchte ich einen Countdown von Vue und Mome...

Design-Story: Der Wachmann, der sich Nummernschilder nicht merken kann

<br />Um die Fahrzeuge zu regeln, die in die...

Häufige Fehler und Gründe für MySQL-Verbindungsfehler

=================================================...

Tutorial zur Installation von mysql5.7.23 auf Ubuntu 18.04

In diesem Artikel erfahren Sie, wie Sie mysql5.7....

Detaillierte Erklärung der Nginx-Konfigurationsdatei

Die Hauptkonfigurationsdatei von Nginx ist nginx....