En este artículo voy a demostrar cómo es posible crear un dump de una base de datos MySQL utilizando la herramienta mysqldump desde Ansible para el caso de un servidor de bases de datos configurado sin autenticación con clave pública, lo cual requiere ingresar la contraseña del usuario de forma interactiva.

La idea de este artículo es generar un dump de una base de datos en un servidor remoto utilizando Ansible. Particularmente, este servidor MySQL no soporta autenticación con clave pública (no está configurado para soportarlo), por ende se debe ingresar la contraseña de forma manual e interactiva. Sin embargo, cuando se trata de una tarea en medio de un playbook, no hace falta ingresar la contraseña de forma interactiva, sino que es posible solicitarla al comienzo del playbook. Esto permite que el playbook resulte en cierto modo "desatendido", pero sin la necesidad de almacenar una contraseña en formato de texto plano (por ejemplo hardcodeada dentro del propio playbook).

El módulo shell de Ansible permite ejecutar comandos aleatorios en un host. Más allá de que Ansible cuenta con un buen número de módulos para bases de datos, de esta forma es posible lanzar mysqldump con opciones totalmente personalizadas.

Luego es posible descargar el archivo con el dump creado en el sistema local (servidor Ansible) mediante el módulo fetch.

Ejemplo de uso: descargar un dump de la base "mibase" en el servidor "db.linuxito.com" y descargar una copia al master de Ansible.

---
# Este playbook crea un dump de la base de datos 'mibase' de db.linuxito.com

- hosts: all
    - vars_prompt:
      - name: mypass
        prompt: "Ingrese contraseña de root (MySQL)"

- hosts: db.linuxito.com
  become: yes
  tasks:
    - set_fact: datetime="{{ lookup('pipe','date +%Y-%m-%d-%H-%M-%S') }}"
    - name: Crear un dump de la base mibase
      shell: mysqldump -R -hlocalhost -P3306 -uroot -p{{ mypass }} mibase | pbzip2 -6 -c - > /tmp/mibase_{{ datetime }}.sql.bz2
    - name: Descargar el dump
      fetch:
        src: /tmp/mibase_{{ datetime }}.sql.bz2
        dest: /tmp/

Se observa que al momento de lanzar el playbook se solicita la contraseña del usuario "root" de MySQL de forma interactiva mediante vars_prompt. Esto permite que la contraseña se solicite al inicio y luego se pueda continuar de forma automática, sin la necesidad de hardcodear la misma en el código YML del playbook.

Una copia del dump queda guardada en la ruta /tmp/db.linuxito.com/tmp/ en el sistema local.

Referencias


Tal vez pueda interesarte


Compartí este artículo