2015-02-19 5 views
9

Мне нужно сделать резервную копию всех существующих баз данных MySQL на моем сервере с Ansible.Ansible - Как сделать резервную копию всех баз данных MySQL?

Я знаю mysql_db модуль. Он принимает имена баз данных, которые я хотел бы обрабатывать один за другим, поэтому перед использованием этого модуля я должен получить список существующих баз данных.

Есть ли способ сделать резервную копию всех баз данных MySQL сразу или получить список существующих баз данных с помощью Ansible?

ответ

6

Модуль mysql_db использует mysqldump исполняемый под капотом, который, в свою очередь, обеспечивает в --all-databases выключатель, это просто, что модуль анзибль не дает возможность использовать его с помощью модуля.

Я бы предложил использовать mysqldump исполняемый файл с помощью модуля command, и в то же время файл запроса функции на GitHub от Ansible, чтобы добавить поддержку для него.

Что-то подобное должно получить ты сейчас:

- 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

Update 26 ноября 2016 года:

патч добавления name=all был добавлен в модуль mysql_db 12 мая 2015 г., поэтому рекомендуется сбросить все базы данных:

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

patch to adds name=all that allows a user to dump or import all data был слит в разви недавно, это пока не доступно в версии 1.9.1, но это уже было показано в this part документации.

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

Надеемся, что это скоро будет доступно в стабильном выпуске.
(Пробег sudo pip install ansible --upgrade для модернизации.)

+0

Это так здорово, я попробую. Спасибо. –

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) }}" 
Смежные вопросы