我需要使用Ansible备份服务器上所有已有的MySQL数据库。
我知道mysql_db模块,它逐个输入我想要操作的数据库名称,因此在使用该模块之前,必须获取现有数据库的列表。
是否有一种方法可以一次性备份所有MySQL数据库或使用Ansible获取现有数据库的列表?
最近在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
来升级。)
- 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
另一种方法是,每个数据库保存在单独的文件中。
---
# 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) }}"