J'utilise MySQL en tant que conteneur d'initialisation d'un déploiement Kubernetes.
Pour diverses raisons, je dois démarrer mysql/restaurer une sauvegarde de mysql dans le conteneur d'initialisation -> l'enregistrer dans un pvc, puis le pod principal sera un pod mysql avec les données qui y sont attachées.
C'est parce que je dois prendre un instantané du disque et je demanderai à CI de surveiller l'instantané jusqu'à ce que le pod soit prêt/exécuté.
Je ne peux donc pas simplement vider le dump.sql dans docker-entrypoint-initdb.d et en finir avec cela.
En effet, les ressources volumesnapshot kubernetes seront occupées avant la récupération/préparation des données. C'est pourquoi je dois préparer les données dans le conteneur init.
Le problème que j'ai est que le conteneur init a besoin d'une commande pour remplacer Entrypoint.sh (pour démarrer MySQL, etc.)
Jusqu'à présent, j'ai ce script bash qui s'exécute au démarrage du conteneur.
./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
Le problème est que le point d'entrée est exécuté, mais reste ensuite bloqué
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)
et ne passe jamais à l'étape suivante du script bash. J'ai essayé d'ajouter un & à la fin pour l'exécuter en arrière-plan, mais cela n'a pas résolu le problème.
Quelqu'un a-t-il rencontré ce problème ? Comment puis-je exécuter le point d'entrée manuellement, puis exécuter certaines commandes.
J'ai aussi essayé ceci, il devrait s'exécuter en arrière-plan et se fermer, mais ce n'est toujours pas le cas.
#!/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
Vous pouvez démarrer mysql en veille en arrière-plan avant mysqld. Est-ce que ça marche pour toi?