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
你可以在mysqld之前在后台启动mysql sleeping。这对你有用吗?