如何从 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 --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 服务器的容器并使用其中的客户端工具。
MySQL 和 MariaDB 官方图片页面中有很多有用的使用技巧。
通过 Mr_Thorynque 和 Thomas 更新回答。
接受的答案在所有意义上都被接受和正确。添加,这适用于我们将数据库映射到外部卷的情况。
因此,例如,如果使用以下命令创建容器
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是否有帮助。
接受的答案对于 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
将 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...
您可以访问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 替换为主机上要保存转储文件的目录的绝对路径。