首页  >  问答  >  正文

使用Kubernetes初始化容器在MySQL上运行

我正在将mysql作为一个kubernetes部署的init容器运行。

出于各种原因,我需要在init容器中启动mysql/恢复mysql的备份 -> 将其保存到一个pvc中,然后主pod将是一个附带数据的mysql pod。

这是因为我需要对磁盘进行快照,而且我将让CI在pod准备好/运行之前监视快照。

所以我不能只是将dump.sql转储到docker-entrypoint-initdb.d中就完成了。

这是因为volumesnapshot kubernetes资源将在数据恢复/准备之前被占用。这就是为什么我需要在init容器中准备数据的原因。

我遇到的问题是init容器需要一个命令来覆盖entrypoint.sh(实际上启动mysql等)

到目前为止,我有这个在容器启动时运行的bash脚本。

./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

问题是,entrypoint被运行,但然后卡在

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)

并且永远不会继续执行bash脚本的下一步。我尝试在末尾添加一个&,以便在后台运行,但这并不能解决问题。

有人遇到过这个问题吗?我如何手动运行entrypoint,然后执行一些命令。

我还尝试了这个,它应该在后台运行并退出,但它仍然没有。

#!/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 天前362

全部回复(1)我来回复

  • 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

    回复
    0
  • 取消回复