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

CSS3-Beispielcode zum Erreichen einer Elementbogenbewegung

So verwenden Sie CSS, um die Bogenbewegung von El...

Eine kurze Diskussion über die MySQL-Optimierungslösung für große Tabellen

Hintergrund Die Menge neuer Daten in der Geschäft...

Verständnis und Beispielcode des Vue-Standardslots

Inhaltsverzeichnis Was ist ein Slot Grundlegendes...

Zusammenfassung gängiger Begriffe in CSS (Cascading Style Sheet)

Wenn Sie CSS verwenden, vergessen Sie nicht, DOCTY...

Detailliertes Tutorial zur Installation von mysql5.7.21 unter Windows

In diesem Artikel finden Sie das Installations-Tu...

Lösung für das Problem des MySQL-Datenverzögerungssprungs

Heute haben wir ein weiteres typisches Problem im...

Details der MySQL-Berechnungsfunktion

Inhaltsverzeichnis 2. Feldverkettung 2. Geben Sie...

Tutorial zur Installation von MySQL 8.0.18 unter Windows (Community Edition)

In diesem Artikel wird kurz die Installation von ...

Verwendung des Linux-Befehls sed

1. Funktionseinführung sed (Stream EDitor) ist ei...

Lösung zum Importieren weiterer Daten aus MySQL in Hive

Ursprünglicher abgeleiteter Befehl: bin/sqoop imp...