Details zur MySQL-Datenbankarchitektur

Details zur MySQL-Datenbankarchitektur

Vorwort:

Viele Kollegen arbeiten schon lange, aber ihre Kenntnisse von MySQL beschränken sich nur auf die oberflächlichen CRUD-Kenntnisse. Sie wissen sehr wenig über die tieferen Prinzipien und technischen Kenntnisse von MySQL. Mit zunehmenden Berufsjahren nimmt ihre Wettbewerbsfähigkeit am Arbeitsplatz weiter ab. Es kommt häufig vor, dass man bei Vorstellungsgesprächen vom Interviewer geschlagen wird. Die am häufigsten gestellten Interviewfragen zu MySQL sind beispielsweise:

  • Können Sie das Prinzip des MVCC-Mechanismus in MySQL erklären?
  • Was ist das Transaktionsprinzip und die Implementierung von MySQL?
  • Was ist das Prinzip der MySQL-Daten-Master-Slave-Replikation?
  • Wie ist die Speicherstruktur der MySQL zugrunde liegenden Daten?
  • Wie aktiviere ich MySQL, um die Speicherung großer Datenmengen zu unterstützen?
  • Was ist das Prinzip und die Implementierung des Sperrmechanismus in MySQL?
  • MySQL-Indexierungsmechanismus? Welche Datenstrukturen und Algorithmen sind an der Indizierung beteiligt?
  • Warum verwendet MySQL einen B+-Baum als Indexstruktur?
  • Wie viele Daten kann ein B+-Baum speichern?
  • Können Sie mir etwas über das Implementierungsprinzip der Gap-Sperre in MySQL erklären?
  • Warum stürzt die InnoDB-Engine ab? Können Sie das Implementierungsprinzip erläutern?
  • Warten Sie auf eine Reihe weiterer hochfrequenter Interviews

Wenn Sie sie einzeln auflisten, können Sie wahrscheinlich Hunderte von häufig gestellten Interviewfragen zu MySQL auflisten. Kennen Sie sie alle?

Es ist nicht nur ein Vorstellungsgespräch. Wenn Sie vom Low-Level-Programmierer zum erfahrenen Ingenieur, Architekten usw. aufsteigen möchten, müssen Sie die grundlegenden Prinzipien und Technologien von MySQL beherrschen.

Hinweis: Binghe wird in Zukunft von Zeit zu Zeit Artikel über die zugrunde liegenden Prinzipien und Technologien von MySQL veröffentlichen. Er wird hart mit seinen Freunden zusammenarbeiten, um die zugrunde liegenden MySQL-Technologien, die Binghe beherrscht, mit allen zu teilen, um die Interviewer in Vorstellungsgesprächen und andere Freunde bei der Arbeit zu schlagen.

1. MySQL-Architektur

Werfen wir zunächst einen Blick auf das unten dargestellte MySQL-Architekturdiagramm.

Aus dem MySQL-Architekturdiagramm können wir erkennen, dass die MySQL-Architektur von oben nach unten grob in vier Teile unterteilt werden kann: Netzwerkverbindungsschicht, Datenbankdienstschicht, Speichermodulschicht und Systemdateischicht. Lassen Sie uns als Nächstes kurz über die Zusammensetzungsinformationen der einzelnen Teile sprechen.

2. Netzwerkverbindungsschicht

Die Netzwerkverbindungsschicht befindet sich an der Spitze der gesamten MySQL-Architektur und dient hauptsächlich als Client-Anschluss. Es bietet die Möglichkeit, eine Verbindung mit dem MySQL-Server herzustellen und unterstützt fast alle gängigen serverseitigen Sprachen wie Java , C , C++、Python usw. Jede Sprache stellt über ihre eigene API-Schnittstelle eine Verbindung mit MySQL her.

3. Datenbank-Serviceschicht

Die Datenbankdienstschicht ist der Kern des gesamten Datenbankservers und umfasst hauptsächlich Systemverwaltungs- und Steuerungstools, Verbindungspool, SQL-Schnittstelle, Parser, Abfrageoptimierer und Cache.

4. Verbindungspool

Es ist hauptsächlich für das Speichern und Verwalten der Verbindungsinformationen zwischen dem Client und der Datenbank verantwortlich. Ein Thread im Verbindungspool ist für das Verwalten der Verbindungsinformationen von einem Client zur Datenbank verantwortlich.

5. Systemverwaltungs- und Steuerungstools

Bietet Verwaltungs- und Steuerungsfunktionen für das Datenbanksystem, z. B. Sichern und Wiederherstellen von Daten in der Datenbank, Gewährleistung der Sicherheit der gesamten Datenbank, Bereitstellung des Sicherheitsmanagements, Koordinieren und Verwalten des gesamten Datenbankclusters usw.

6. SQL-Schnittstelle

Es ist hauptsächlich dafür verantwortlich, verschiedene vom Client gesendete SQL-Befehle zu empfangen, die SQL-Befehle an andere Teile zu senden, die von anderen Teilen zurückgegebenen Ergebnisdaten zu empfangen und die Ergebnisdaten an den Client zurückzugeben.

7. Analysebaum

Es ist hauptsächlich dafür verantwortlich, das angeforderte SQL in einen „Analysebaum“ zu analysieren und den „Analysebaum“ dann gemäß einigen MySQL-Regeln grammatikalisch zu überprüfen, um zu bestätigen, ob er zulässig ist.

Abfrage-Optimierer

Wenn in MySQL der „Analysebaum“ die Syntaxprüfung des Parsers besteht, wird er vom Optimierer in einen Ausführungsplan konvertiert und interagiert dann mit der Speicher-Engine und über die Speicher-Engine mit den zugrunde liegenden Datendateien.

9. Cache

Der Cache von MySQL besteht aus einer Reihe kleiner Caches. Zum Beispiel: MySQL-Tabellen-Cache, Datensatz-Cache, Berechtigungscache in MySQL, Engine-Cache usw. Der Cache in MySQL kann die Leistung von Datenabfragen verbessern. Wenn das Abfrageergebnis den Cache erreichen kann, gibt MySQL die Ergebnisinformationen direkt im Cache zurück.

10. Speicher-Engine-Schicht

Die Speicher-Engine-Schicht in MySQL ist hauptsächlich für das Schreiben und Lesen von Daten und die Interaktion mit den zugrunde liegenden Dateien verantwortlich. Es ist erwähnenswert, dass die Speicher-Engine in MySQL Plug-in-basiert ist. Die Abfrageausführungs-Engine im Server kommuniziert über entsprechende Schnittstellen mit der Speicher-Engine. Gleichzeitig schirmt die Schnittstelle die Unterschiede zwischen verschiedenen Speicher-Engines ab. In MySQL sind InnoDB und MyISAM die am häufigsten verwendeten Speicher-Engines.

Für Studenten ist es wichtig, die Speicher-Engines InnoDB und MyISAM zu beherrschen. Sie werden häufig in Vorstellungsgesprächen getestet und sind auch das, was Sie wissen müssen, um Architekt zu werden .

11. Systemdateiebene

Die Systemdateiebene umfasst hauptsächlich die zugrunde liegenden Dateien, die Daten in MySQL speichern, interagiert mit der Speicher-Engine der oberen Ebene und ist die physische Speicherebene der Dateien. Zu den gespeicherten Dateien gehören hauptsächlich: Protokolldateien, Datendateien, Konfigurationsdateien, MySQL-PID-Dateien und Socket-Dateien usw.

12. Logdateien

Die Protokolle in MySQL umfassen hauptsächlich: Fehlerprotokoll, allgemeines Abfrageprotokoll, Binärprotokoll, Protokoll für langsame Abfragen usw.

1. Fehlerprotokoll

Es speichert hauptsächlich Fehlerinformationen, die während des Betriebs von MySQL generiert werden. Mit der folgenden SQL-Anweisung können Sie das Fehlerprotokoll in MySQL anzeigen.

Variablen wie „%log_error%“ anzeigen;

2. Allgemeines Abfrageprotokoll

Es zeichnet hauptsächlich allgemeine Abfrageinformationen während des MySQL-Vorgangs auf. Mit der folgenden SQL-Anweisung können Sie die allgemeine Abfrageprotokolldatei in MySQL anzeigen.

Variablen wie „%general%“ anzeigen;

3. Binärprotokoll

Es zeichnet hauptsächlich die in der MySQL-Datenbank ausgeführten Einfüge-, Änderungs- und Löschvorgänge auf und zeichnet auch die Ausführungszeit und Ausführungsdauer der SQL-Anweisung auf. Das Binärprotokoll zeichnet jedoch keine SQL-Anweisungen wie „Select“ und „Show“ auf, die die Datenbank nicht ändern. Wird hauptsächlich zum Wiederherstellen von Datenbankdaten und zum Implementieren der MySQL-Master-Slave-Replikation verwendet.

Überprüfen Sie, ob die binäre Protokollierung aktiviert ist.

Variablen wie „%log_bin%“ anzeigen;

Binäre Protokollparameter anzeigen

Variablen wie „%binlog%“ anzeigen

Anzeigen von Protokolldateien

Binärprotokolle anzeigen;

4. Langsames Abfrageprotokoll

Langsame Abfragen erfassen hauptsächlich SQL-Anweisungen, deren Ausführungszeit die angegebene Zeit überschreitet. Die Standardzeit beträgt 10 Sekunden.

Überprüfen Sie, ob das Slow Query Log aktiviert ist

Variablen wie „%slow_query%“ anzeigen;

Anzeigen der Dauer langsamer Abfrageeinstellungen

Variablen wie „%long_query_time%“ anzeigen

13. Datendateien

Die Datendateien umfassen hauptsächlich: db.opt-Datei, frm-Datei, MYD-Datei, MYI-Datei, ibd-Datei, ibdata-Datei, ibdata1-Datei, ib_logfile0- und ib_logfile1-Dateien usw.

1.db.opt-Datei

Protokolliert hauptsächlich Informationen wie den Zeichensatz und die Prüfregeln, die von der aktuellen Datenbank verwendet werden.

2. frm-Datei

Speichert die Strukturinformationen der Datentabelle, hauptsächlich die Metadateninformationen zur Datentabelle, einschließlich der Tabellenstrukturdefinitionsinformationen der Datentabelle. Jede Tabelle verfügt über eine FRM-Datei.

Es ist erwähnenswert, dass die Tabelle der InnoDB-Speicher-Engine in der MySQL 8-Version keine FRM-Datei hat. (Ich werde später einige Artikel über die neuen Funktionen von MySQL 8 schreiben, von der Verwendung bis zu den zugrunde liegenden Prinzipien und wie sie sich von MySQL 5 unterscheiden).

3. MYD-Datei

Ein Dateiformat, das der MyISAM-Speicher-Engine gewidmet ist. Es speichert hauptsächlich Daten in der Datentabelle der MyISAM-Speicher-Engine. Jede Tabelle der MyISAM-Speicher-Engine entspricht einer .MYD-Datei.

4. MYI-Datei

Ein Dateiformat speziell für die MyISAM-Speicher-Engine, das hauptsächlich Indexinformationen speichert, die sich auf die Datentabelle der MyISAM-Speicher-Engine beziehen. Jede Tabelle der MyISAM-Speicher-Engine entspricht einer .MYI-Datei.

5.ibd-Datei

Speichert die Datendateien und Indexdateien der Innodb-Speicher-Engine. Es speichert hauptsächlich die Daten und Indizes des exklusiven Tablespace. Jede Tabelle entspricht einer .ibd-Datei.

6. ibdata-Datei

Speichert Datendateien und Indexdateien der Innodb-Speicher-Engine. Es speichert hauptsächlich Daten und Indizes von gemeinsam genutzten Tablespaces. Alle Tabellen teilen sich eine (oder mehrere) .ibdata-Dateien. Die Anzahl der gemeinsam genutzten .ibdata-Dateien kann je nach Konfiguration angegeben werden.

7. ibdata1-Datei

In den Datendateien des MySQL-Systemtablespace werden hauptsächlich Metadaten der MySQL-Datentabelle, Undo-Protokolle und andere Informationen gespeichert.

8. ib_logfile0- und ib_logfile1-Dateien

Redo-Log-Dateien in der MySQL-Datenbank werden hauptsächlich verwendet, um die Transaktionspersistenz in MySQL zu implementieren. Wenn MySQL zu einem bestimmten Zeitpunkt ausfällt und fehlerhafte Seiten vorhanden sind, die nicht in die IBD-Datei der Datenbank geschrieben wurden, wiederholt MySQL beim Neustart von MySQL die Daten basierend auf den Redo-Log-Informationen und macht die Daten persistent, die in das Redo-Log geschrieben, aber noch nicht in die Datentabelle geschrieben wurden.

14. Konfigurationsdatei

Wird zum Speichern aller MySQL-Konfigurationsinformationen verwendet. In Unix/Linux-Umgebungen ist dies die Datei my.cnf und in Windows-Umgebungen die Datei my.ini.

1.pid-Datei

Die PID-Datei ist eine Datei, die die Prozess-ID des MySQL-Prozesses während der Ausführung speichert. Sie existiert hauptsächlich in der Unix/Linux-Umgebung. Das spezifische Speicherverzeichnis kann in der Datei my.cnf oder my.ini konfiguriert werden.

2. Socket-Datei

Die Socket-Datei ist wie die PID-Datei eine Datei, die nur existiert, wenn MySQL in einer Unix/Linux-Umgebung ausgeführt wird. In Unix/Linux-Umgebungen können Clients über Sockets direkt eine Verbindung zu MySQL herstellen.

Dies ist das Ende dieses Artikels über die Details der MySQL-Architektur. Weitere relevante Inhalte zur MySQL-Architektur finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Zwei Möglichkeiten zum Speichern von Scrapy-Daten in einer MySQL-Datenbank (synchron und asynchron)
  • Python-Beispiel zum Speichern von JSON-ähnlichen Daten in MySQL
  • So installieren Sie MySQL 5.7 unter Ubuntu und konfigurieren den Datenspeicherpfad
  • So ändern Sie das Datenbankdatenspeicherverzeichnis in MySQL
  • Detailliertes Beispiel für MySQL-Datenspeicherprozessparameter
  • So verschieben Sie den Datenspeicherort von mysql5.7.19 in Centos7
  • So implementieren Sie das MySQL-Umschalten des Datenspeicherverzeichnisses
  • Lösung zum Ändern des Datenspeicherorts der Datenbank in MySQL 5.7
  • MySQL-Speicherung räumlicher Daten und Funktionen

<<:  Spezifischer Einsatz von Routing Guards in Vue

>>:  Eine kurze Diskussion über die Verwendung und Analyse von Nofollow-Tags

Artikel empfehlen

So laden Sie das JAR-Paket über die Webseite auf Nexus hoch

Wie lädt man das JAR-Paket in ein privates Lager ...

Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs

Überblick Heute werde ich hauptsächlich erklären,...

So löschen Sie Tabellendaten in MySQL

Es gibt zwei Möglichkeiten, Daten in MySQL zu lös...

Beispielcode zur Implementierung eines gepunkteten Rahmen-Scrolleffekts mit CSS

Wir sehen oft einen coolen Effekt, wenn die Maus ...

Grafisches Tutorial zur Installation von Linux CentOS6.9 unter VMware

Als technischer Neuling zeichne ich den Vorgang d...

Vue Router lädt verschiedene Komponenten je nach Hintergrunddaten

Inhaltsverzeichnis Anforderungen aus der Projektp...

Miniprogramm zur Implementierung der Rechnerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

So erzielen Sie mit CSS einen Daten-Hotspot-Effekt

Die Wirkung ist wie folgt: analysieren 1. Hier se...

Docker-Praxis: Python-Anwendungscontainerisierung

1. Einleitung Container nutzen einen Sandbox-Mech...