我知道how to restore a dump file from mysqldump。现在,我试图使用kubernetes和docker容器来做到这一点。数据库文件是持久性(nfs)挂载。无法在群集外部访问泊坞窗,因为无需任何外部触摸它。
我试过了:
kubectl run -i -t dbtest --image=mariadb --restart=Never --rm=true --command -- mysql -uroot -ps3kr37 < dump.sql
和
kubectl exec mariadb-deployment-3614069618-mn524 -i -t -- mysql -u root -p=s3kr37 < dump.sql
但两个命令都没有用 - 关于TTY,套接字和其他事情的错误暗示我在这里缺少一些重要的东西。
我在这里不理解什么?
我可以停止部署,scp数据库文件,然后重启容器并希望最好。但是,什么可以正确?
问题Install an sql dump file to a docker container with mariaDB确实看起来像重复但不是:首先,我在Linux而不是Windows,更重要的是答案都是关于使用转储进行初始化。我希望能够删除数据并恢复到转储数据。这是一个最终将是“实时”的测试系统,因此我需要从许多潜在的转储中恢复。
答案 0 :(得分:0)
我做的是:
mysql
和initd
。initd
中,我添加了几个,sql
文件,包括转储。initd
挂载为/docker-entrypoint-initdb.d
。这会导致在初始化时读取所有文件,前提是这是我们第一次运行。mysql
目录以/var/lib/mysql
挂载,包含所有mariaDB文件。如果我需要还原,我会删除mysql
目录的所有内容并重新创建部署。
答案 1 :(得分:0)
这应该有效:
kubectl --kubeconfig=k8s-XXXXXXX-kubeconfig.yaml exec -i ddevdb-XXXXX -- mysql -u root -h mysqlservice -proot drupal < you-dump.sql
kubeconfig是可选的,例如digitalocean提供了这样的功能,您可以从本地运行命令。
查看是否一切正常:
kubectl --kubeconfig=k8s-XXXXXXX-kubeconfig.yaml run -it --rm --image=mariadb:10.4 --restart=Never mysql -- mysql -h mysqlservice -proot
之后,您将在mysql内部拥有一个终端。
答案 2 :(得分:0)
如here中所述,您可以使用以下命令从计算机中的转储还原kubernetes pod上的数据库
$ kubectl exec -it {{podName}} -n {{namespace}} -- mysql -u {{dbUser}} -p{{password}} {{DatabaseName}} < <scriptName>.sql
Example :
$ kubectl exec -it mysql-58 -n sql -- mysql -u root -proot USERS < dump_all.sql