我正在將mysql作為一個kubernetes部署的init容器運行。
出于各種原因,我需要在init容器中啟動mysql/恢復(fù)mysql的備份 -> 將其保存到一個pvc中,然后主pod將是一個附帶數(shù)據(jù)的mysql pod。
這是因為我需要對磁盤進行快照,而且我將讓CI在pod準(zhǔn)備好/運行之前監(jiān)視快照。
所以我不能只是將dump.sql轉(zhuǎn)儲到docker-entrypoint-initdb.d中就完成了。
這是因為volumesnapshot kubernetes資源將在數(shù)據(jù)恢復(fù)/準(zhǔn)備之前被占用。這就是為什么我需要在init容器中準(zhǔn)備數(shù)據(jù)的原因。
我遇到的問題是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)
并且永遠不會繼續(xù)執(zhí)行bash腳本的下一步。我嘗試在末尾添加一個&,以便在后臺運行,但這并不能解決問題。
有人遇到過這個問題嗎?我如何手動運行entrypoint,然后執(zhí)行一些命令。
我還嘗試了這個,它應(yīng)該在后臺運行并退出,但它仍然沒有。
#!/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。這對你有用嗎?
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