Docker MariaDB/Mysql 转储

问题描述 投票:0回答:5

如何从 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

mysql docker mariadb database-backups
5个回答
11
投票

如果我们假设您以这种方式创建了 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 maria-dump -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 等效二进制文件称为

mysqldump

最后,您可以使用 docker

exec
命令进入运行 MariaDB/MySQL 服务器的容器并使用其中的客户端工具。

MySQLMariaDB 官方图片页面中有很多有用的使用技巧。

通过 Mr_Thorynque 和 Thomas 更新回答。


4
投票

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

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

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是否有帮助。


3
投票

接受的答案对于 mariadb 来说似乎已弃用。

从 mariadb 11.0.1 开始,mysqldump 已弃用并从 mariadb Docker 官方镜像中删除。请改用 mariadb-dump。 (https://mariadb.com/kb/en/mysqldump/

mariadb 备份命令示例:

docker exec -t <containerID> mariadb-dump -u <USER> -p --all-databases > dump_db_`date +%d-%m-%Y"_"%H_%M_%S`.sql

1
投票

将 MariaDB 从一个 docker 容器迁移到第二个的方法:

docker exec -it seafile-db mariadb-dump -uroot -p{password} --opt ccnet-db > ccnet_db.sql

docker cp ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql

docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p{password} ccnet_db < /tmp/ccnet_db.sql"

您不能使用 mysqldump,因为它在创建时不是 docker 容器的一部分:docker run mariadb...


0
投票

您可以访问Docker容器并在其中安装MySQL客户端工具。具体方法如下:

首先,使用以下命令访问您的 Docker 容器:

docker exec -it 容器 ID bash

进入容器后,安装 MySQL 客户端工具。在基于 Debian/Ubuntu 的系统上,您通常可以使用以下命令安装它:

apt更新apt\ 安装 mysql 客户端

从主机环境运行 mysqldump:您可以直接从主机环境运行 mysqldump,而不是从 Docker 容器内运行 mysqldump。这需要在您的主机上安装 MySQL 客户端工具。

具体操作方法如下:

mysqldump -h 127.0.0.1 -P 3306 -u 用户名 -pkus 密码 > 路径.dump

path.dump 替换为主机上要保存转储文件的目录的绝对路径。

© www.soinside.com 2019 - 2024. All rights reserved.