2015-02-19 15 views
9

Tôi cần sao lưu tất cả cơ sở dữ liệu MySQL hiện có trên máy chủ của mình bằng Ansible.Ansible - Làm thế nào để sao lưu tất cả cơ sở dữ liệu MySQL?

Tôi biết về mô-đun mysql_db. Nó lấy tên của các cơ sở dữ liệu mà tôi muốn thao tác từng cái một, vì vậy tôi phải lấy danh sách các cơ sở dữ liệu hiện có trước khi sử dụng mô đun đó.

Có cách nào để sao lưu tất cả cơ sở dữ liệu MySQL cùng một lúc hoặc để có danh sách cơ sở dữ liệu hiện có với Ansible không?

Trả lời

6

Mô-đun mysql_db sử dụng mysqldump mô-đun thực thi dưới mui xe, lần lượt cung cấp công tắc --all-databases, chỉ mô-đun Ansible không cung cấp tùy chọn để sử dụng nó qua mô-đun.

Tôi khuyên bạn nên sử dụng mysqldump thực thi qua command mô-đun ngay bây giờ và trong khi chờ đợi yêu cầu tính năng trên GitHub của Ansible để thêm hỗ trợ cho nó.

Something như thế này sẽ giúp bạn đi cho bây giờ:

- name: Dump all MySQL databases to a single file 
    command: mysqldump --opt -uroot --all-databases --result-file=/tmp/all-dbs.sql 

Điều chỉnh các tùy chọn để mysqldump như mong muốn: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

Cập nhật ngày 26 Tháng Mười Một 2016:

Một miếng vá thêm name=all đã được thêm vào mô-đun mysql_db vào ngày 12 tháng 5 năm 2015, do đó, cách được khuyến nghị để đổ tất cả cơ sở dữ liệu là:

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

A patch to adds name=all that allows a user to dump or import all data đã được hợp nhất thành devel gần đây, nó chưa có sẵn trong 1.9.1, nhưng nó đã được hiển thị trong this part tài liệu.

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

Hy vọng điều này sẽ sớm có sẵn trong bản phát hành ổn định.
(Chạy sudo pip install ansible --upgrade để nâng cấp.)

+0

Điều đó thật tuyệt, tôi sẽ thử. Cảm ơn bạn. –

0

Cách khác, mỗi cơ sở dữ liệu trong tệp riêng biệt.

--- 
# 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) }}" 
Các vấn đề liên quan