recherche

Maison  >  Questions et réponses  >  le corps du texte

Initialiser un conteneur pour qu'il s'exécute sur MySQL à l'aide de Kubernetes

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

P粉315680565P粉315680565243 Il y a quelques jours396

répondre à tous(1)je répondrai

  • P粉683665106

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

    Vous pouvez démarrer mysql en veille en arrière-plan avant mysqld. Est-ce que ça marche pour toi?

    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

    répondre
    0
  • Annulerrépondre