[英]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
变量指定的数据库中。
您本地的 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.