繁体   English   中英

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

[英]How do I restore a dump file from mysqldump using kubernetes?

我知道如何从 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 数据库文件,然后重新启动容器并希望一切顺利。 然而,有什么可以去的呢?


使用 mariaDB 将 sql 转储文件安装到 docker 容器的问题确实看起来像重复但不是:首先,我使用的是 Linux 而不是 Windows,更重要的是,答案都是关于使用转储进行初始化。 我希望能够删除数据并恢复到转储数据。 这是一个最终将成为“实时”的测试系统,因此我需要从许多潜在的转储中恢复。

作为描述在这里,你可以在你的机器使用下面的命令来恢复数据库上kubernetes荚从转储

$ 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

我所做的是这样的:

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

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

这应该有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM