So führen Sie SQL-Anweisungen automatisch aus, wenn MySQL in Docker gestartet wird

So führen Sie SQL-Anweisungen automatisch aus, wenn MySQL in Docker gestartet wird

Wenn wir mit Docker einen MySQL-Container erstellen, erwarten wir manchmal, dass die Datenbank und die Tabelle automatisch erstellt werden und die Initialisierungsdaten nach dem Start des Containers automatisch eingegeben werden. Das heißt, nach dem Start des Containers können wir direkt eine Verbindung zur Datenbank im Container herstellen und die darin enthaltenen Daten verwenden.

Tatsächlich unterstützt das offizielle Image von MySQL diese Funktion und führt das angegebene SQL-Skript oder Shell-Skript automatisch aus, wenn der Container gestartet wird. Werfen wir einen Blick auf die Docker-Datei des offiziellen Images von MySQL, wie unten dargestellt:

ENTRYPOINT wurde gesetzt, wodurch das Skript /entrypoint.sh aufgerufen wird. Wir ziehen das mysql:8-Image auf den lokalen Computer und starten es mit docker run. Schauen wir uns den Inhalt des Skripts entrypoint.sh an. Es gibt einen Abschnitt, der alle Dateien mit den Endungen .sh und .sql in einem festen Verzeichnis durchsucht und sie dann ausführt, wie unten gezeigt:

Nachdem wir nun das Prinzip verstanden haben, wollen wir es in die Praxis umsetzen:

Wenn Sie eine Disconf-Umgebung auf Docker erstellen, müssen Sie eine MySQL-Datenbank erstellen und nacheinander vier SQL-Dateien ausführen, um die Datenbank, die Tabelle und die Daten zu initialisieren. Dazu gibt es zwei Möglichkeiten:

  • Kopieren Sie die vier SQL-Dateien in das Verzeichnis /docker-entrypoint-initdb.d , damit die vier SQLs automatisch ausgeführt werden, wenn der Container ausgeführt wird. Im Screenshot-Skript kann die Ausführungsreihenfolge mehrerer Dateien jedoch nicht angegeben werden. Wenn das Skript zum Erstellen der Datenbank später ausgeführt wird als das Skript zum Erstellen der Tabelle, schlägt die Tabellenerstellung fehl. Daher kann diese Methode zum Kopieren von SQL unsere Anforderungen nicht erfüllen (wenn die vier Dateien jedoch der Reihe nach zu einem SQL kombiniert werden, können die Anforderungen erfüllt werden).
  • Erstellen Sie eine SH-Datei und führen Sie SQL entsprechend Ihren Anforderungen aus. Der Inhalt ist wie folgt:
#!/bin/bash
mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF
Quelle $WORK_PATH/$FILE_0;
Quelle $WORK_PATH/$FILE_1;
Quelle $WORK_PATH/$FILE_2; 
Quelle $WORK_PATH/$FILE_3;

Es ist ersichtlich, dass die Shell sehr einfach ist. Melden Sie sich bei MySQL an und führen Sie die angegebene SQL-Datei aus. MYSQL_ROOT_PASSWORD, WORK_PATH, FILE_0 sind alle Umgebungsvariablen.

Schauen wir uns an, wie die entsprechende Docker-Datei wie folgt geschrieben wird:

# Docker-Image von disconf mysql
# VERSION 0.0.1
# Autor: bolingcavalry

#Das Basisimage verwendet daocloud.io/library/mysql:8
VON daocloud.io/library/mysql:8

#Autor MAINTAINER BolingCavalry <[email protected]>

#Definieren Sie das Arbeitsverzeichnis ENV WORK_PATH /usr/local/work

#Definieren Sie das Verzeichnis, das automatisch vom Container ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d ausgeführt wird

#Definieren Sie den SQL-Dateinamen ENV FILE_0 0-init_table.sql
ENV DATEI_1 1-init_data.sql
ENV FILE_2 20151225.sql
ENV FILE_3 20160701.sql

#Definieren Sie den Shell-Dateinamen ENV INSTALL_DATA_SHELL install_data.sh

#Erstellen Sie einen Ordner RUN mkdir -p $WORK_PATH

#Kopieren Sie die Initialisierungsdatendatei der Datenbank in das Arbeitsverzeichnis COPY ./$FILE_0 $WORK_PATH/
KOPIEREN ./$FILE_1 $WORK_PATH/
KOPIEREN ./$FILE_2 $WORK_PATH/
KOPIEREN ./$FILE_3 $WORK_PATH/

#Legen Sie die auszuführende Shell-Datei in das Verzeichnis /docker-entrypoint-initdb.d/, und der Container führt diese Shell automatisch aus
KOPIEREN ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/

#Fügen Sie der ausführbaren Datei Ausführungsberechtigungen hinzu RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL

0-init_table.sql, 1-init_data.sql, 20151225.sql, 20160701.sql sind die SQL-Dateien, die wir ausführen möchten und die beim Erstellen des Docker-Images in die Image-Datei kopiert werden.

Bitte klonen Sie mein GitHub für den vollständigen Inhalt: [email protected]:zq2599/docker_disconf.git . Geben Sie nach dem Klonen den darin enthaltenen MySQL-Ordner ein und führen Sie in diesem Ordner die Befehlszeile docker build -t disconf_mysql:0.0.1 aus, um das Image zu erstellen.

Führen Sie dann docker run –name mysqldisconf -e MYSQL_ROOT_PASSWORD=123456 -idt disconf_mysql:0.0.1 aus, um einen Container zu starten, und führen Sie dann docker logs -f mysqldisconf aus, um das Containerprotokoll anzuzeigen. Wie in der roten Box unten gezeigt, können Sie sehen, dass die sh-Datei, die wir an den angegebenen Ort geschrieben haben, ausgeführt wurde:

Gehen wir zur Datenbank, um zu prüfen, ob die Daten wirklich da sind. Führen Sie docker exec -it mysqldisconf /bin/bash aus, um den Container aufzurufen.

Nach der Ausführung mysql -uroot -p123456 zur Anmeldung bei MySQL ist der Vorgang wie folgt:

Wie Sie sehen, können Vorgänge wie show databases,show tables,select * from app beweisen, dass SQL nach der Erstellung des Containers automatisch ausgeführt wurde, wodurch unser Ziel erreicht wurde.

Zusammenfassen

Oben habe ich Ihnen gezeigt, wie Sie SQL-Anweisungen automatisch ausführen, wenn MySQL in Docker gestartet wird. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Docker startet den Implementierungsprozess der MySQL-Konfiguration
  • Führen Sie die Initialisierungs-SQL aus, wenn Docker MySQL startet
  • Lösung für MySQL-Initialisierungs- und Startfehler in Docker
  • So starten Sie schnell MySQL-Tests mit Docker auf dem Mac
  • So initialisieren Sie die Mysql-Datenbank, wenn der Docker-Container gestartet wird
  • Docker startet die Schritte zur Implementierung des MySQL-Dienstes

<<:  Detaillierte Erklärung der Front-End-Sicherheit: JavaScript-Anti-HTTP-Hijacking und XSS

>>:  Analyse des allgemeinen MySQL-Abfrageprotokolls und des langsamen Abfrageprotokolls

Artikel empfehlen

Spezifische Schritte zur Verwendung des Vant-Frameworks im WeChat-Applet

Inhaltsverzeichnis 1. Öffnen Sie das Projektverze...

MySQL führt Befehle für externe SQL-Skriptdateien aus

Inhaltsverzeichnis 1. Erstellen Sie eine SQL-Skri...

Implementierung eines Nginx-Load-Balancing-Clusters

(1) Experimentelle Umgebung youxi1 192.168.5.101 ...

Ein netter HTML-Druckcode unterstützt das Umblättern

ylbtech_html_drucken HTML-Druckcode, unterstützt S...

So legen Sie das Breitenattribut auf den Stil des Span-Tags fest

Wenn Sie das Breitenattribut direkt auf den Stil d...

Singleton-Entwurfsmuster in JavaScript

Inhaltsverzeichnis 1. Was ist ein Entwurfsmuster?...

Mounten Sie die Festplatte in einem Verzeichnis unter Ubuntu 18.04

Einführung In diesem Artikel wird beschrieben, wi...

Implementierung einfacher Tabs mit js

Tab-Auswahlkarten werden auf echten Webseiten seh...

JavaScript ist unzuverlässig undefiniert

undefined Wenn wir in JavaScript feststellen möch...

Details zum JavaScript-Prototyp

Inhaltsverzeichnis 1. Übersicht 1.1 Was ist ein P...