Heim  >  Fragen und Antworten  >  Hauptteil

Initialisieren eines Containers zur Ausführung auf MySQL mithilfe von Kubernetes

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粉315680565P粉315680565206 Tage vor358

Antworte allen(1)Ich werde antworten

  • P粉683665106

    P粉6836651062024-03-27 11:39:41

    你可以在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

    Antwort
    0
  • StornierenAntwort