freehck.script_mysql_backup

freehck.script_mysql_backup

Este rol crea un script que realiza copias de seguridad de MySQL.

Realiza un volcado de la base de datos, posiblemente comprime y cifra la copia de seguridad con aes256.

Puede enviar mensajes a Slack.

Puede almacenar tu copia de seguridad en S3 y/o copiarla a otro host mediante SCP.

Variables del Rol

Variables básicas

mysql_backup_host: host de mysql

mysql_backup_port: puerto de mysql (por defecto 3306)

mysql_backup_user: usuario de mysql

mysql_backup_pass: contraseña de mysql

mysql_backup_db: base de datos mysql para hacer copia (si no se establece, entonces se pasará la opción --all-databases a mysqldump)

mysql_backup_backend_use_s3: establecer en verdadero si deseas almacenar tu copia en S3

mysql_backup_backend_use_scp: establecer en verdadero si quieres enviar tu copia a otro host usando SCP

Variables del backend S3

mysql_backup_s3cfg_template: plantilla de tu configuración s3fs (se proporciona una por defecto, no te preocupes)

mysql_backup_s3: opciones de configuración de s3 en el siguiente formato

mysql_backup_s3:
  username: "usuario_s3"
  access_key: "clave_acceso_usuario_s3"
  secret_key: "clave_secreta_usuario_s3"
  bucket: "nombre-del-bucket"
Variables del backend SCP

mysql_backup_scp_host: host de almacenamiento para copiar tu copia de seguridad

mysql_backup_scp_user: usuario para iniciar sesión en el host de almacenamiento

mysql_backup_scp_dst: ruta en el host de almacenamiento para guardar tu copia

mysql_backup_scp_identity_src: archivo de identidad para usar al iniciar sesión en el host de almacenamiento (sí, debería ser una clave privada)

Nomenclatura

mysql_backup_archive_prefix: solo el nombre de la copia o simplemente todo antes de la marca de tiempo

mysql_backup_archive_stamp: plantilla de marca de tiempo en formato de herramienta date (la por defecto es %F-%Hh%Mm%Ss y resulta en marcas de tiempo como 2019-09-23-12h22m07s)

mysql_backup_script_name: si deseas cambiar el nombre del script base, eres bienvenido

mysql_backup_custom_script_name: si deseas establecer un nombre específico para el script de trabajo que realiza la copia. El valor por defecto es mysql-backup-<nombre_base_datos>.sh, donde puede ser all si no se especificaron bases de datos para hacer copia.

mysql_backup_scp_identity_name: el valor por defecto es id_rsa, pero podría ser útil modificarlo si deseas tener múltiples backends SCP que usen diferentes claves

mysql_backup_encrypt_aes_key_name: el valor por defecto es aes256.key, necesario si deseas tener diferentes claves de cifrado para distintas tareas de copia de seguridad

Notificaciones

mysql_backup_warn_size: en GiB, el valor por defecto es 0. Compara tu copia con este tamaño. Si tu copia es menor, te avisará.

mysql_backup_hostname: nombre del host (que se imprimirá en los mensajes de slack)

mysql_backup_slack_webhook: como se indica, es un webhook de slack; configúralo para recibir notificaciones de slack

Cómo obtener un webhook de slack: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Variables para Comprimir y Cifrar

mysql_backup_gzip: comprimir el archivo de copia

mysql_backup_encrypt_aes: cifrar el archivo de copia (si gzip está habilitado, esta acción se realizará específicamente DESPUÉS de gzip)

mysql_backup_encrypt_aes_key_src: clave aes256 para cifrar tu copia

La clave Aes256 son solo 32 bytes aleatorios.

Puedes usar el siguiente comando para crearla: dd if=/dev/urandom of=aes256.key count=1 bs=32.

Si prefieres contraseñas de tipo string (es menos seguro) puedes usar esto: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Directorios

mysql_backup_script_dir: directorio para almacenar el script base

mysql_backup_custom_script_dir: directorio para almacenar scripts específicos para trabajos de copia apropiados

mysql_backup_conf_dir: directorio para almacenar archivos de configuración del script de copia

mysql_backup_encrypt_aes_key_dir: directorio para almacenar la clave de cifrado aes256

mysql_backup_tmpdir: directorio para mantener resultados temporales (no necesitas crear uno separado, es /tmp por defecto)

Pasar datos fuera del rol

mysql_backup_save_facts_about_custom_script: si lo estableces en verdadero, el rol guardará la ruta completa del script de trabajo generado, que debe ejecutarse para realizar la copia, en la variable mysql_backup_last_generated_custom_script. Puedes usar esta variable para añadir una tarea cron específica para este script.

Ejemplo de Playbook

# crear script de trabajo de copia de seguridad mysql
- role: freehck.script_mysql_backup
  # parámetros de conexión a mysql
  mysql_backup_host: "{{ db_host }}"
  mysql_backup_user: "{{ db_user }}"
  mysql_backup_pass: "{{ db_pass }}"
  mysql_backup_db: "{{ db_name }}"
  # parámetros de almacenamiento backend
  mysql_backup_backend_use_s3: no
  mysql_backup_backend_use_scp: yes
  mysql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  mysql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  mysql_backup_scp_user: 'file'
  mysql_backup_scp_dst: '/var/www/file/public/mysql-db-prod-backup'
  # gzip y cifrar
  mysql_backup_gzip: yes
  mysql_backup_encrypt_aes: yes
  mysql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # otros
  mysql_backup_save_facts_about_custom_script: yes
  mysql_backup_logfile: "/var/log/mysql-backup.log"
  tags: [ backup, mysql ]

# es recomendable crear la tarea cron para este script de trabajo
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "copia de seguridad de la base de datos"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ mysql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, mysql ]

Información Importante

Después de desplegar el script de copia de seguridad mysql en tu host, sería recomendable ir al host que realiza las tareas de copia y ejecutar el script de trabajo desde /opt/scripts sin parámetros. Si pasó sin errores y ves el archivo de copia en el almacenamiento, entonces todo está bien. Si no, descubrirás cuál fue el problema. Por ejemplo, podrías olvidar agregar el host de almacenamiento a known_hosts al configurar usuarios. O tu plantilla s3cfg podría contener un error. No olvides revisar todo dos veces: realizar copias de seguridad es una tarea muy importante.

Después de verificar que la copia fue creada y almacenada en el lugar correcto, revísala cuidadosamente. Debes asegurarte de que puedes restaurar usando esta copia.

Licencia

MIT

Información del Autor

Dmitrii Kashin, freehck@freehck.ru

Acerca del proyecto

install a script performing mysql backups

Instalar
ansible-galaxy install freehck.script_mysql_backup
Licencia
mit
Descargas
1.2k
Propietario