【问题标题】:Ansible Docker MySql dumpAnsible Docker MySql 转储
【发布时间】:2021-10-10 18:00:13
【问题描述】:

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

  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

我收到以下错误:

mysqldump: Couldn't find table: ">"

入口点消息是:

"entrypoint": [
    "mysqldump -u root -proot --host wl.cs.net TEST > 1.sql"
],

我做错了什么?

【问题讨论】:

标签: mysql docker ansible


【解决方案1】:

实际上,您不需要覆盖entrypoint,因为已经在容器中的那个会运行您的命令。您只需要确保> 出现在正确的位置即可。我通过引用命令来做到这一点。
你可以这样做:

  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,因为您没有创建数据库。
  • 您可能希望将转储写入/backup 中的文件。
  • 您可能不想要restart_policy: "unless-stopped",因为重新启动失败的备份没有意义,因为它可能会再次失败。 (首先你需要找出失败的原因)
  • 您可能需要detach: false,因此ansible 将等待容器完成,然后在备份失败时显示failed
  • 您可能需要cleanup: true,因此您无需手动清理容器。

链接:

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2014-01-13
    相关资源
    最近更新 更多