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

myk*_*ola 10 mysql ansible

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

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

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

fif*_*nce 10

添加name=all补丁允许用户转储或导入所有数据最近合并到了devel中,它在1.9.1中尚未提供,但它已经在文档的这一部分中显示.

# Dumps all databases to hostname.sql
- mysql_db: state=dump name=all target=/tmp/{{ inventory_hostname }}.sql
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*sek 6

mysql_db模块使用mysqldump引擎盖下的可执行程序,后者又提供了一个--all-databases开关,只是Ansible模块不提供通过模块使用它的选项.

我建议现在使用mysqldump可执行的via command模块,同时在Ansible的GitHub上提交一个功能请求来添加对它的支持.

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

- name: Dump all MySQL databases to a single file
  command: mysqldump --opt -uroot --all-databases --result-file=/tmp/all-dbs.sql
Run Code Online (Sandbox Code Playgroud)

mysqldump根据需要调整选项:http://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
Run Code Online (Sandbox Code Playgroud)