如何使用 kubernetes 从 mysqldump 恢复转储文件?

Posted

技术标签:

【中文标题】如何使用 kubernetes 从 mysqldump 恢复转储文件?【英文标题】:How do I restore a dump file from mysqldump using kubernetes? 【发布时间】:2017-11-26 17:24:24 【问题描述】:

我知道how to restore a dump file from mysqldump。现在,我正在尝试使用 kubernetes 和 docker 容器来做到这一点。数据库文件处于持久 (nfs) 挂载状态。 docker 不能在集群外部被访问,因为不需要任何外部的东西来触摸它。

我试过了:

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,更重要的是,答案都是关于使用转储进行初始化。我希望能够丢弃数据并恢复到转储数据。这是一个最终将成为“实时”的测试系统,因此我需要从许多潜在的转储中恢复。

【问题讨论】:

用你的数据库将 NFS 挂载到容器中,然后像本地一样以常规方式导入转储呢? 【参考方案1】:

如here 中所述,您可以使用以下命令从机器中的转储中恢复 kubernetes pod 上的数据库

$ kubectl exec -it podName -n namespace -- mysql -u dbUser -ppassword DatabaseName < <scriptName>.sql
Example :
$ kubectl exec -it mysql-58 -n sql -- mysql -u root -proot USERS < dump_all.sql

【讨论】:

@Affy 这是恢复,不是备份【参考方案2】:

这应该可行:

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 中拥有一个终端。

【讨论】:

【参考方案3】:

我做的是这样的:

使用两个子目录创建 NFS 挂载:mysqlinitd。 在initd 中,我添加了几个,sql 文件,包括转储。 在部署中将initd 挂载为/docker-entrypoint-initdb.d。这会导致在初始化时读取所有文件如果这是我们第一次运行mysql 目录挂载为/var/lib/mysql 并包含所有mariaDB 文件。

如果我需要还原,我会删除 mysql 目录的所有内容并重新创建部署。

【讨论】:

以上是关于如何使用 kubernetes 从 mysqldump 恢复转储文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从客户端访问使用 Nginx Ingress+Kubernetes 托管的 MySql

如何使用 Jenkins 将 Docker 容器从 Amazon ECR 自动部署到 Kubernetes

如何使用 Spring Boot 从 Kubernetes 卷挂载中读取密钥和值

如何从 kubernetes 集群内部访问主机的 localhost

如何从外部网络访问Kubernetes仪表板

terraform-kubernetes-provider 如何从文件中创建秘密?