如何创建一个 Docker 容器,每晚备份 MySQL 数据库?

6

你好,我已经创建了一个 MySQL 镜像,并使用以下命令:

docker run --name db-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest  --> Run container with my sql

使用docker pull mysql命令可以创建一个包含mysql的镜像。

docker run --name db_mysql-e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=mami -p 3306:3306 -d mysql

我执行了它,但之后不知道如何在这个容器中创建数据库并设置备份任务。

如果有人可以提供逐步指导,请帮助我。


1
你想如何备份?首先,我强烈建议您挂载MySQL的数据目录,以避免容器被销毁时数据丢失。最简单的备份解决方案是在主机上运行mysqldump Cron作业。 - Boris the Spider
你能给我展示如何创建这个cron job吗?最好附带一个例子。 - Liverpool
2
MySQL文档中有完整的备份和恢复部分。不使用Docker,找出如何在主机(或另一台主机)上运行指向容器化MySQL的路径。一旦你弄清楚了如何备份,如果认为在容器中运行是合适的,那么再尝试打包它。但这并不是一个特别需要Docker的任务。 - David Maze
请按照官方Docker MySQL镜像的文档进行操作:https://hub.docker.com/_/mysql#creating-database-dumps - Thomasleveil
1个回答

5

您可以使用主机系统的cron服务运行以下命令,如 MySQL docker镜像的文档所述:

运行命令的crontab示例:每晚2:00运行一次命令:

00 02 * * * /usr/bin/docker exec db-mysql sh -c 'exec mysqldump --all-databases -uroot -p"my-secret-pw"' > /some/path/on/your/host/all-databases.sql

或者,您可以运行专门用于此任务的另一个容器,例如deitch/mysql-backup:

docker run --name db-mysql -d \
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    -e MYSQL_USER=my-user \
    -e MYSQL_PASSWORD=my-user-password \
    -e MYSQL_DATABASE=my-db \
    mysql:latest

docker run -d --restart=always \
    --name=db-backup \
    -e DB_DUMP_BEGIN=0200 \
    -e DB_SERVER=db-mysql \
    -e DB_USER=my-user \
    -e DB_PASS=my-user-password \
    -e DB_NAMES=my-db \
    -e DB_DUMP_TARGET=/db \
    -v /somewhere/on/your/host/:/db \
    databack/mysql-backup

你还需要确保 /somewhere/on/your/host/ 文件夹可写,且用户组为 1005
sudo chgrp 1005 /somewhere/on/your/host/
sudo chmod g+rwX /somewhere/on/your/host/

但是这个容器必须有一种方式连接到你的db-mysql容器。为此,你需要创建一个Docker网络并将两个容器连接到它:

docker network create mysql-backup-net
docker network connect mysql-backup-net db-backup
docker network connect mysql-backup-net db-mysql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接