Initialisieren eines Containers zur Ausführung auf MySQL mithilfe von Kubernetes
P粉315680565
P粉315680565 2024-03-26 19:48:31
0
1
419

Ich verwende MySQL als Init-Container einer Kubernetes-Bereitstellung.

Aus verschiedenen Gründen muss ich MySQL starten/ein Backup von MySQL im Init-Container wiederherstellen -> es in einem PVC speichern und dann wird der Haupt-Pod ein MySQL-Pod sein, an den die Daten angehängt sind.

Das liegt daran, dass ich einen Snapshot der Festplatte erstellen muss und CI den Snapshot überwachen lässt, bis der Pod bereit ist/läuft.

Ich kann also nicht einfach dump.sql in docker-entrypoint-initdb.d ablegen und fertig.

Dies liegt daran, dass Volumesnapshot-Kubernetes-Ressourcen vor der Datenwiederherstellung/-vorbereitung belegt sind. Deshalb muss ich die Daten im Init-Container vorbereiten.

Das Problem, das ich habe, ist, dass der Init-Container einen Befehl benötigt, um enterpoint.sh zu überschreiben (um MySQL usw. tatsächlich zu starten)

Bisher habe ich dieses Bash-Skript, das ausgeführt wird, wenn der Container startet.

./entrypoint.sh --ignore-db-dir=lost+found 
echo "done"(这只是为了测试目的,看看它是否被处理,但实际上没有)
mysql -u root -ppassword < /data/backups/backup.sql
mysql -u root -ppassword < /sql-files/sql-files.sql

Das Problem ist, dass der Einstiegspunkt ausgeführt wird, dann aber hängen bleibt

2022-01-14T15:07:54.809983Z 0 [Note] Event Scheduler: Loaded 0 events
2022-01-14T15:07:54.810442Z 0 [Note] mysqld: ready for connections.
Version: '5.7.36'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

und fährt nie mit dem nächsten Schritt des Bash-Skripts fort. Ich habe versucht, am Ende ein & hinzuzufügen, um es im Hintergrund auszuführen, aber das hat das Problem nicht gelöst.

Ist jemand auf dieses Problem gestoßen? Wie kann ich den Einstiegspunkt manuell ausführen und dann einige Befehle ausführen?

Ich habe es auch versucht, es sollte im Hintergrund laufen und beendet werden, aber es funktioniert immer noch nicht.

#!/bin/sh

start_mysql () {
    sleep 30
    #mysql -u root -ppassword < /data/backups/backup.sql
    #mysql -u root -ppassword < /sql-files/sql-files.sql
    echo "hi"
    sleep 30
    echo "done 123354543543" >> /data/backups/test.txt
    echo "actually done"
    exit 0 
}

start_mysql &
./entrypoint.sh --ignore-db-dir=lost+found

P粉315680565
P粉315680565

Antworte allen(1)
P粉683665106

你可以在mysqld之前在后台启动mysql sleeping。这对你有用吗?

start_mysql {
    sleep 30
    mysql -u root -ppassword < /data/backups/backup.sql
    mysql -u root -ppassword < /sql-files/sql-files.sql
}

start_mysql &
./entrypoint.sh
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage