用 Docker 无脑备份数据库

每次有一个新的数据库,都要琢磨着配置一个备份。当然你可能有一个祖传的 shell 脚本,重新配置一下放到 crontab 里就可以了。但是无论是查看和修改配置,还是查看 crontab 都不是那么方便。 今天介绍一个 Docker 镜像,只需要简单的配置启动,就可以。地址在这里:https://hub.docker.com/r/deitch/mysql-backup/ 但你也许不需要点开链接,先看完我的例子吧。 version: '3.7' services: backup: image: databack/mysql-backup volumes: - /root/dbbackup:/db environment: - DB_DUMP_TARGET=/db - DB_USER=root - DB_PASS=root - DB_SERVER=xxx.xxx.xxx.xxx user: root deploy: placement: constraints: - node.id == YOURDOCKERSWARMNODEID 讲要点 Version 我用了最新版的 docker-compose 格式,优点就是不用在装 docker-compose … 使用新版 Docker 自带的 docker stack -c backup.yml backup 这样子启动 stack 就好。这样机器就只用装 docker 一个包。 如果你想用旧版的 docker-compose 点开上边作者的 readme 里有例子。 ...

2019年2月26日 · 1 分钟 · Hyacinthus

在 Docker 中使用 mysql 的一些技巧

今天我写一点在 Docker 容器中使用 MYSQL 的 tips. 要不要在生产环境使用 Docker 运行数据库这么深奥的问题,等我踩足够的坑再来写吧。 但是至少在开发和测试环境你可以用 docker 管理数据库啊。 Compose file 先贴一个我常用的 docker-compose 片段,后边进行详细的解释。这是日常使用的状态,此处省略了别的服务。 version: '2' services: mysql: image: mysql:5.7.16 ports: - ${DB_PORT}:3306 environment: - TZ=Asia/Shanghai command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./mysql_data:/var/lib/mysql restart: unless-stopped 版本 一定要锁定镜像到最小的版本,因为mysql镜像升级后需要你手动在容器中执行命令去 mysql-upgrade,否则很久之后,你才发现有的数据已经损坏了。 实在想升级,升级步骤如下: 如果是用 docker run 启动的,那么停掉再启动个新的。如果是用 docker-compose 启动的,直接改版本号 pull 镜像重新 up。 在新的版本启动后执行 docker exec -it 你的容器名称或id mysql-upgrade 端口 如果想在外部通过工具访问,需要将3306端口映射到host上的一个端口,不准备外部访问的环境则不必。 一般来说开发和测试环境还是经常需要登到数据库上查看的。 时区 添加环境变量 TZ 让mysql用你的默认时区启动。 这是因为 mysql 的基础镜像是 debian, 这个环境变量可以声明 debian 的时区,然后被 mysql 继承。 ...

2017年3月28日 · 1 分钟 · Hyacinthus