我正在將mysql作為一個(gè)kubernetes部署的init容器運(yùn)行。
出于各種原因,我需要在init容器中啟動(dòng)mysql/恢復(fù)mysql的備份 -> 將其保存到一個(gè)pvc中,然后主pod將是一個(gè)附帶數(shù)據(jù)的mysql pod。
這是因?yàn)槲倚枰獙?duì)磁盤(pán)進(jìn)行快照,而且我將讓CI在pod準(zhǔn)備好/運(yùn)行之前監(jiān)視快照。
所以我不能只是將dump.sql轉(zhuǎn)儲(chǔ)到docker-entrypoint-initdb.d中就完成了。
這是因?yàn)関olumesnapshot kubernetes資源將在數(shù)據(jù)恢復(fù)/準(zhǔn)備之前被占用。這就是為什么我需要在init容器中準(zhǔn)備數(shù)據(jù)的原因。
我遇到的問(wèn)題是init容器需要一個(gè)命令來(lái)覆蓋entrypoint.sh(實(shí)際上啟動(dòng)mysql等)
到目前為止,我有這個(gè)在容器啟動(dòng)時(shí)運(yùn)行的bash腳本。
./entrypoint.sh --ignore-db-dir=lost+found echo "done"(這只是為了測(cè)試目的,看看它是否被處理,但實(shí)際上沒(méi)有) mysql -u root -ppassword < /data/backups/backup.sql mysql -u root -ppassword < /sql-files/sql-files.sql
問(wèn)題是,entrypoint被運(yùn)行,但然后卡在
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)
并且永遠(yuǎn)不會(huì)繼續(xù)執(zhí)行bash腳本的下一步。我嘗試在末尾添加一個(gè)&,以便在后臺(tái)運(yùn)行,但這并不能解決問(wèn)題。
有人遇到過(guò)這個(gè)問(wèn)題嗎?我如何手動(dòng)運(yùn)行entrypoint,然后執(zhí)行一些命令。
我還嘗試了這個(gè),它應(yīng)該在后臺(tái)運(yùn)行并退出,但它仍然沒(méi)有。
#!/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之前在后臺(tái)啟動(dòng)mysql sleeping。這對(duì)你有用嗎?
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