如何使用 mysqldump 从 docker-compose MariaDB 容器备份数据

对于在 .env 中存储 MYSQL_ROOT_PASSWORD 的容器

这是推荐的最佳实践。对于此示例,我们假设 .env 看起来像这样:

.env
MARIADB_ROOT_PASSWORD=mophur3roh6eegiL8Eeto7goneeFei

创建转储

create_dump.sh
source .env && docker-compose exec mariadb mysqldump -uroot -p${MARIADB_ROOT_PASSWORD} --all-databases > mariadb-dump-$(date +%F_%H-%M-%S).sql

要从 mariadb-dump.sql 恢复转储确保在此命令之前容器未运行

restore_dump.sh
source .env && docker-compose run -T mariadb mariadb -uroot -p${MARIADB_ROOT_PASSWORD} < mariadb-dump.sql

注意你必须将 mariadb 替换为 docker-compose.yml 中容器的名称。

对于 MYSQL_ROOT_PASSWORD 设置为未存储在 .env 中的某个值的容器

这是安全的,但你通常需要多次复制密码:一次用于 mariadb 容器,一次用于使用数据库的任何容器或应用程序,一次用于导出整个数据库 SQL 转储的任何备份脚本

创建转储

create_dump_manual.sh
docker-compose exec mariadb mysqldump -uroot -pYOUR_MARIADB_ROOT_PASSWORD --all-databases > dump-$(date +%F_%H-%M-%S).sql

要从 mariadb-dump.sql 恢复转储

restore_dump_manual.sh
docker-compose exec -T mariadb mysql -uroot -pYOUR_MARIADB_ROOT_PASSWORD  < mariadb-dump.sql

YOUR_MARIADB_ROOT_PASSWORD 替换为你安装的密码。

此外,你必须将 mariadb 替换为 docker-compose.yml 中容器的名称

对于 MYSQL_ALLOW_EMPTY_PASSWORD=yes 的容器

此配置是安全风险 - 参见使用 MYSQL_ALLOW_EMPTY_PASSWORD=yes 运行 docker mariadb/mysql 的安全风险

创建转储

create_dump_empty_pw.sh
docker-compose exec mariadb mysqldump -uroot --all-databases > mariadb-dump-$(date +%F_%H-%M-%S).sql

要从 mariadb-dump.sql 恢复转储

restore_dump_empty_pw.sh
docker-compose exec -T mariadb mysql -uroot < mariadb-dump.sql

关于此主题的更多文章

TechOverflow 目前正在计划一篇关于如何使用 bup 提供基于 docker 的 MariaDB/MySQL 安装的快速高效备份的文章。


Check out similar posts by category: Docker