首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将sql转储还原到运行mysql/mariadb坞容器中

问将sql转储还原到运行mysql/mariadb坞容器中
EN

Stack Overflow用户
提问于 2019-10-29 12:04:09
回答 2查看 2K关注 0票数 0

一个mariadb/mysql停靠容器正在运行。我想从主机恢复sql转储。

代码语言:javascript
复制
docker exec -i container_name \
  /bin/sh -c 'exec mysql -uroot -psecret' \
  < gunzip -c backup.sql.gz

备份文件存在。但我知道这个错误:

-bash: gunzip:没有这样的文件或目录

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-29 12:46:55

本地shell在读取此命令时第一次通过。它看到重定向< gunzip,并尝试在当前目录中打开一个名为gunzip的本地文件,并将其用作docker exec命令的标准输入。当该文件不存在时,您将得到所看到的错误。

你在找的是壳管道,而不是重定向

代码语言:javascript
复制
gunzip -c backup.sql.gz \
  | mysql -h127.0.0.1 -uroot -psecret

这需要在主机上安装MySQL命令行工具,但这与处理任何非特定的本地MySQL安装的方式相同。

如果您真的想通过docker exec执行此操作,则应用相同的基本布局。

代码语言:javascript
复制
gunzip -c backup.sql.gz \
  | sudo docker exec container_name \
    mysql -uroot -psecret
票数 1
EN

Stack Overflow用户

发布于 2019-10-29 12:24:13

我不建议使用docker exec命令进行还原,这是将转储文件放到docker映像中的最佳方法,如果它很小,或者将转储文件挂载到/docker-entrypoint-initdb.d。

因此,将其添加到您的Dockerfile中,您将需要在容器打开后运行这些命令,

代码语言:javascript
复制
FROM mariadb
COPY backup.sql.gz /docker-entrypoint-initdb.d

因此,当您启动容器时,它将自动填充。

第二,您也可以使用主机绑定卷。

代码语言:javascript
复制
docker run -v $PWD/backup.sql.gz:/docker-entrypoint-initdb.d/ -it mariadb

初始化新实例

当容器首次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在.sh, .sql and .sql.gz中找到的扩展名为/docker-entrypoint-initdb.d的文件。文件将按字母顺序执行。您可以通过将SQL转储安装到该目录并提供包含贡献数据的自定义映像来轻松填充mariadb服务。默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中。

mariadb-码头枢纽

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58607115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档