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

15

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

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

是否有一种方法可以一次性备份所有MySQL数据库或使用Ansible获取现有数据库的列表?

3个回答

13

最近在devel中合并了一个补丁,添加了name=all,允许用户导出或导入所有数据。尽管它还没有在1.9.1版本中提供,但已经在文档的这一部分中展示。

# 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现已成为稳定版本的一部分。 - Dirk Krijgsman

7
“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

请按照需要调整mysqldump选项:http://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

3

另一种方法是,每个数据库保存在单独的文件中。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接