mysql - Helm mysql.initializationFiles 中的 Db 迁移导致 pod 崩溃
问题描述
我正在构建一个带有 MySQL 依赖项的掌舵图。它在空时设置得很好,但我想sh
在 pod 上运行一个文件,该文件将从其他地方复制一些数据。为此,我想使用initializationFiles
文档https://github.com/helm/charts/tree/master/stable/mysql中的结构
我与此依赖相关的 values.yaml 部分如下所示:
mysql:
mysqlRootPassword: somePass
mysqlPassword : somePass
mysqlUser: user
appPassword: somePass
initializationFiles:
db.sh: |-
#!/bin/sh
touch dump.sql
看起来initializationFiles
节下的代码被尝试执行并导致 pod 失败。由于此节仅按设计执行一次,因此第二次尝试成功,并且当 pod 运行时,我看不到任何新文件kubectl exec -it pod_name -- bash -c ls
我试过这个:
...
initializationFiles:
- db.sh
并将 db.sh 文件放在与 相同的文件夹中values.yaml
,但这仍然不起作用。sh
设置依赖项 MySQL pod 时执行文件的正确方法是什么?Kubernetes 版本 1.17,掌舵 3.5.0
我看到该文件实际上被复制到了docker-entrypoint-initdb.d
,但它没有被执行,没有创建新文件。
root@mypod:/docker-entrypoint-initdb.d# ls -la
lrwxrwxrwx 1 root root 12 Mar 6 00:14 db.sh -> ..data/db.sh
root@mypod:/docker-entrypoint-initdb.d# cat db.sh
#!/bin/sh
touch dump.sql
我尝试手动运行该文件,但权限被拒绝:
root@mypod:/# ./docker-entrypoint-initdb.d/db.sh
bash: ./docker-entrypoint-initdb.d/db.sh: Permission denied
如果我将命令更改为echo test
然后执行 sh 文件,我可以在 pod 的日志中看到这一点。看起来像更改文件系统是被禁止的,但是做touch /dump.sql
或touch /home/dump.sql
不工作。
解决方案
MUAHAHA 我做到了。里面的脚本./docker-entrypoint-initdb.d/
是由mysql
用户执行的。
在 pod 内四处逛逛后,我找到了一个mysql
用户具有写入权限的目录。所以我只是把文件写在那里然后删除来初始化数据库。现在整个节看起来像这样:
mysql:
mysqlRootPassword: myPass
mysqlPassword : myPass
mysqlUser: user
appPassword: myPass
initializationFiles:
db.sh: |-
#!/bin/sh
mysqldump -h remoteDbUrl -u remoteUser -pRemotePass --databases db1 db2 > /var/lib/mysql/dump.sql
mysql -uroot -pmyPass < /var/lib/mysql/dump.sql
rm /var/lib/mysql/dump.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'myPass';" | mysql -uroot -pmyPass
推荐阅读
- javascript - Django 和 JavaScript 如何协同工作以运行 Python 脚本?
- java - 何时使用请求范围的 bean 与将参数向下传递堆栈?
- c# - 在 Foreach 循环中使用 While 时 UI 未加载
- oracle11g - Oracle 11G 安装程序在安装过程中消失
- c# - 使用 Firebase 实时数据库和统一检查值是否存在
- android - Activity 进入 onPause() 生命周期时不会立即调用 Activity 生命周期 onStop()
- rx-java2 - Observable.switchMap 不会中断 Observable
- php - Laravel ajax put 请求返回 500 内部服务器错误
- python - 为什么这段代码会产生错误“AttributeError: 'Match' object has no attribute 'replace'”?
- django - 如何在视图中引用用户最近上传的文件,然后对文件执行某些操作,然后返回数据?