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