【问题标题】:Ansible - How to backup all MySQL databases?Ansible - 如何备份所有 MySQL 数据库?
【发布时间】:2015-02-19 01:08:46
【问题描述】:

我需要使用 Ansible 备份我服务器上的所有个现有 MySQL 数据库。

我知道mysql_db 模块。它需要我要一个一个操作的数据库的名称,所以我必须在使用该模块之前获取现有数据库的列表。

有没有办法一次备份所有 MySQL 数据库或使用 Ansible 获取现有数据库的列表?

【问题讨论】:

    标签: mysql ansible


    【解决方案1】:

    patch to adds name=all that allows a user to dump or import all data 最近被合并到 devel 中,它在 1.9.1 中尚不可用,但它已在文档的 this part 中显示。

    # Dumps all databases to hostname.sql
    - mysql_db: state=dump name=all target=/tmp/{{ inventory_hostname }}.sql
    

    希望这将很快在稳定版本中提供。
    (运行sudo pip install ansible --upgrade进行升级。)

    【讨论】:

    • 如 Michal Gasek 更新中所述,name=all 现在是稳定版本的一部分。
    【解决方案2】:

    另一种方式,每个数据库在单独的文件中。

    ---
    # This playbook backups all mysql databases into separate files.
    
    - name: backup mysql
      vars:
        - exclude_db:
          - "Database"
          - "information_schema"
          - "performance_schema"
          - "mysql"
      tasks:
        - name: get db names
          shell: 'mysql -u root -p{{ vault_root_passwd }} -e "show databases;" '
          register: dblist
        - name: backup databases
          mysql_db:
            state: dump
            name: "{{ item }}"
            target: "/tmp/{{ item }}.sql"
            login_user: root
            login_password: "{{ vault_root_passwd }}"
          with_items: "{{ dblist.stdout_lines | difference(exclude_db) }}"
    

    【讨论】:

      【解决方案3】:

      mysql_db 模块在底层使用了mysqldump 可执行文件,它又提供了一个--all-databases 开关,只是Ansible 模块没有提供通过该模块使用它的选项。

      我建议现在通过 command 模块使用 mysqldump 可执行文件,同时在 Ansible 的 GitHub 上提交功能请求以添加对它的支持。

      这样的事情应该让你现在开始:

      - name: Dump all MySQL databases to a single file
        command: mysqldump --opt -uroot --all-databases --result-file=/tmp/all-dbs.sql
      

      根据需要将选项调整为mysqldumphttp://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

      2016 年 11 月 26 日更新:

      2015 年 5 月 12 日,mysql_db 模块中添加了一个添加 name=all 的补丁,因此推荐的转储所有数据库的方法是:

      # Dumps all databases to hostname.sql
      - mysql_db: state=dump name=all target=/tmp/{{ inventory_hostname }}.sql
      

      【讨论】:

        猜你喜欢
        • 2011-10-31
        • 1970-01-01
        • 2019-06-16
        • 1970-01-01
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多