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 服务器已消失,错误日志中没有任何内容