繁体   English   中英

将 sql 转储恢复到正在运行的 mysql/mariadb docker 容器中

[英]Restore sql dump into running mysql/mariadb docker container

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

docker exec -i container_name \
  /bin/sh -c 'exec mysql -uroot -psecret' \
  < gunzip -c backup.sql.gz

备份文件存在。 但我得到这个错误:

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

我不建议使用docker exec命令进行恢复,如果转储文件很小,最好将转储文件放在 docker-image 中,或者将转储文件挂载到/docker-entrypoint-initdb.d

因此,将其添加到您的 Dockerfile 中,一旦容器启动,您将需要运行这些命令,

FROM mariadb
COPY backup.sql.gz /docker-entrypoint-initdb.d

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

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

docker run -v $PWD/backup.sql.gz:/docker-entrypoint-initdb.d/ -it mariadb

初始化一个新实例

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

mariadb-dockerhub

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

您正在寻找 shell管道,而不是重定向

gunzip -c backup.sql.gz \
  | mysql -h127.0.0.1 -uroot -psecret

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

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

gunzip -c backup.sql.gz \
  | sudo docker exec container_name \
    mysql -uroot -psecret

暂无
暂无

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

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