Ansible - 如何备份所有MySQL数据库?

时间:2015-02-19 01:08:46

标签: mysql ansible

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

我了解mysql_db模块。它需要逐个操作的数据库的名称,因此我必须在使用该模块之前获取现有数据库的列表。

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

3 个答案:

答案 0 :(得分:10)

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

Input::flash();
return View::make('ajax.view')
                    ->withInput(Input::all())
                    ->withErrors($validation)
                    ->render();

希望很快就可以在稳定版本中使用 (运行# Dumps all databases to hostname.sql - mysql_db: state=dump name=all target=/tmp/{{ inventory_hostname }}.sql 进行升级。)

答案 1 :(得分:6)

mysql_db模块使用引擎盖下的mysqldump可执行文件,后者又提供--all-databases开关,只是Ansible模块不提供选项通过模块使用它。

我建议现在通过mysqldump模块使用command可执行文件,同时在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日,name=all模块中添加了添加mysql_db的补丁,因此推荐的转储所有数据库的方法是:

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

答案 2 :(得分:0)

替代方式,每个数据库都在单独的文件中。

---
# 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) }}"