我需要使用Ansible备份我服务器上的所有现有MySQL数据库。
我了解mysql_db模块。它需要逐个操作的数据库的名称,因此我必须在使用该模块之前获取现有数据库的列表。
有没有办法一次备份所有MySQL数据库或者使用Ansible获取现有数据库列表?
答案 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
根据需要将选项调整为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
答案 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) }}"