首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可接受的Docker MySql转储

可接受的Docker MySql转储
EN

Stack Overflow用户
提问于 2021-08-05 17:59:00
回答 1查看 123关注 0票数 1

我正在尝试使用ansible和docker来备份我的MySQL数据库。这是我的ansible-task:

代码语言:javascript
复制
  docker_container:
    name: "{{ mysql_dump_container_name }}"
    image: mysql:8.0.20
    env:
      MYSQL_ROOT_PASSWORD: "{{ mysql_password }}"
      MYSQL_DATABASE: "{{ mysql_database }}"
    ports:
      - "3307:3307"
    volumes:
      - "{{ mysql_backup_dir }}:/backup"
    entrypoint: "mysqldump -u {{ mysql_username }} -p{{ mysql_password }} --host {{ mysql_host }} {{ mysql_database }} > 1.sql "
    detach: yes
    restart_policy: "unless-stopped"
  become: yes

我收到以下错误:

代码语言:javascript
复制
mysqldump: Couldn't find table: ">"

入口点消息为:

代码语言:javascript
复制
"entrypoint": [
    "mysqldump -u root -proot --host wl.cs.net TEST > 1.sql"
],

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 06:59:22

实际上,您不需要覆盖entrypoint,因为容器中已经存在的as将运行您的命令。您只需要确保>最终出现在正确的位置。我通过引用命令来做到这一点。

您可以这样做:

代码语言:javascript
复制
  docker_container:
    name: "{{ mysql_dump_container_name }}"
    image: "mysql:8.0.20"
    volumes:
      - "{{ mysql_backup_dir }}:/backup"
    command: "/bin/sh -c 'mysqldump -u {{ mysql_username }} -p{{ mysql_password }} --host {{ mysql_host }} {{ mysql_database }} > /backup/1.sql'"
    detach: false
    cleanup: true
  become: yes

其他注意事项:

  • 您不需要任何port,因为容器没有侦听任何内容。
  • 您不需要env,因为您不是在创建数据库。
  • 您可能不想要restart_policy: "unless-stopped",因为重新启动失败的备份没有意义,因为它可能会再次失败。(您需要找出失败的原因,首先)
  • 您可能需要detach: false,因此ansible将等待容器完成,如果备份失败,则显示failed
  • 您可能需要cleanup: true,因此您不需要手动清理容器。

链接:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68671452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档