Docker MariaDB/Mysql 转储

Posted

技术标签:

【中文标题】Docker MariaDB/Mysql 转储【英文标题】:Docker MariaDB/Mysql dump 【发布时间】:2015-12-13 04:03:42 【问题描述】:

如何在https://hub.docker.com/_/mariadb/ 上运行容器中的mysqldump?

我找不到任何有用的文档或数据?

任何备份和恢复数据库的方法。

这是我的连续运行命令:

docker run --name myaapp-mariadb -v /databases/maria:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mariadb:10

【问题讨论】:

你能发布你是如何设置 mariadb 服务器容器的吗?即docker run -e MYSQL_ROOT_PASSWORD=foo --name some-mysql mariadb 【参考方案1】:

如果我们假设您以这种方式创建了 mariadb 服务器容器:

docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:latest

然后你从另一个客户端容器访问它:

docker run -it --link some-mariadb:mysql \
   --rm mariadb:latest \
   sh -c 'exec mysqldump -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" database_name' > database_name_dump.sql

mysql官方图片page有更多有用的使用技巧。

【讨论】:

你不需要另一个容器,你可以以同样的方式使用“docker exec”。【参考方案2】:

接受的答案在所有意义上都被接受且正确。添加,这适用于我们将数据库映射到外部卷的情况。

因此,例如,如果容器是使用以下命令创建的

docker run --name mysqldb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -v /dir_path_on_your_machine/mysql-data:/var/lib/mysql -d mariadb:latest

然后,我们可以从命令行或终端执行以下命令

docker exec mysqldb mysqldump --user=root --password=password dbname > /dir_path_on_your_machine/mysql-data/dump/db.sql

但是,使用上述命令创建的转储不会转储存储过程、函数和事件。为了做到这一点,我们需要额外的参数

--triggers          Dump triggers for each dumped table.
--routines          Dump stored routines (functions and procedures).
--events            Dump events.

因此,我们可以修改我们的命令以包含上述参数以获得所需的结果。

示例更新命令

docker exec mysqldb mysqldump --routines --triggers --user=root --password=password dbname > /dir_path_on_your_machine/mysql-data/dump/db1.sql

如果您遇到任何与导入相关的错误,请检查this 是否有帮助。

【讨论】:

以上是关于Docker MariaDB/Mysql 转储的主要内容,如果未能解决你的问题,请参考以下文章

Maria DB:MySQL 服务器已消失,错误日志中没有任何内容

如何将 MySQL 转储从主机恢复到 Docker 容器

如何在 docker 容器中禁用核心文件转储

sh 使用Docker容器创建ElasticSearch转储

sh 从Docker转储MySQL

加载大型sql转储时Docker内存不足