memiah.mysql-s3-backup
MySQL S3 Backup
Un Role de Ansible que instala la Interfaz de Línea de Comandos de Amazon AWS y configura un script bash para subir copias de seguridad individuales de bases de datos MySQL a Amazon S3.
Requisitos
El rol asume que ya tienes MySQL instalado.
Si activas GPG, también necesitarás haber creado esas credenciales.
Se recomienda que crees un usuario con permisos limitados. A continuación hay una política llamada AmazonS3CreateReadWriteAccess-[nombre-del-bucket] que se puede usar para proporcionar acceso limitado (crear/listar/poner) al bucket [nombre-del-bucket].
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [ "s3:CreateBucket", "s3:ListBucket" ],
            "Resource": [ "arn:aws:s3:::[nombre-del-bucket]" ]
        },
        {
            "Effect": "Allow",
            "Action": [ "s3:PutObject" ],
            "Resource": [ "arn:aws:s3:::[nombre-del-bucket]/*" ]
        }
    ]
}
Además, puedes considerar la versión y los ciclos de vida del bucket en S3.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml):
mysql_backup_name: "mysql-s3-backup"
Nombre usado para identificar este rol, utilizado para el directorio predeterminado, el archivo y el nombre del perfil de AWS.
mysql_backup_dir: "/opt/{{ mysql_backup_name }}"
Directorio donde se almacenará el script de copia de seguridad y la configuración.
mysql_backup_cronfile: "{{ mysql_backup_name }}"
mysql_backup_cron_enabled: true
mysql_backup_cron_hour: 23
mysql_backup_cron_minute: 0
mysql_backup_cron_email: false
Cron está habilitado y programado para ejecutarse a las 23:00 todos los días y no se enviará un correo electrónico a un destinatario. Si deseas que la salida se envíe por correo, establece esto en la dirección de correo del destinatario.
mysql_backup_aws_profile: "{{ mysql_backup_name }}"
Para separación, creamos un nuevo perfil de AWS para el contexto de este script, puedes establecer esto en "default" para ignorar perfiles.
mysql_backup_aws_access_key: "[clave-de-acceso]"
Tu clave de acceso de Amazon AWS.
mysql_backup_aws_secret_key: "[clave-secreta]"
Tu clave secreta de Amazon AWS.
mysql_backup_aws_region: eu-west-1
Nombre de la región donde se encuentra el bucket S3.
mysql_backup_aws_format: text
Formato de salida de la CLI de AWS.
mysql_backup_gpg_secret_key: False
Clave secreta GPG para encriptar las copias de seguridad.
mysql_backup_gpg_secret_dest: "~/{{ mysql_backup_name }}-gpg.asc"
Ubicación utilizada para almacenar la clave secreta GPG.
mysql_backup_system_user: root
Usuario que será dueño y ejecutará el script de copia de seguridad, así como el trabajo de cron.
mysql_backup_config: []
Personalizaciones para el script de copia de seguridad en sí (los valores usan la sintaxis bash).
timestamp: "$(date +"%Y-%m-%d_%H%M")"Fecha y hora utilizadas para crear directorios de respaldo "YYYY-MM-DD_HHII".backup_dir: "/tmp/mysql-s3-backups/${timestamp}"Ruta del directorio local de respaldo utilizada para almacenar archivos antes de la carga.backup_dir_remove: "true"Eliminar el directorio de respaldo local al completar el script.aws_bucket: "mysql-s3-backups"Nombre predeterminado del bucket S3 de AWS.aws_dir: "$timestamp"Directora predeterminada de AWS para almacenar copias de seguridad.aws_extra_arguments: "--endpoint https://s3-compatable-endpoint.example.com"Argumentos adicionales para pasar a la CLI de AWS.aws_enabled: "true"Habilitar la carga en Amazon S3; si es falso, la bandera "backup_dir_remove" se establecerá en falso.aws_profile: "mysql-s3-backup"Establecer el perfil de AWS a utilizar (~/.aws/credentials y ~/.aws/config).mysql_slave: "false"Establecer en verdadero si se realiza una copia de seguridad desde un servidor esclavo de MySQL; esto detendrá el esclavo y lo iniciará de nuevo cuando termine el script.mysql_using_rds: "false"Establecer en verdadero si se realiza una copia de seguridad desde una réplica de lectura de RDS; esto asegurará que utilicemos las funciones mysql.rds_stop_replication y mysql.rds_start_replication en lugar de los comandos estándar STOP / START SLAVE (que no tienen los permisos necesarios en RDS).mysql_use_defaults_file: "true"Usar el archivo de configuración predeterminado de MySQL.mysql_defaults_file: ""Especificar la ubicación del archivo de valores predeterminados, por ejemplo, "/etc/my.cnf".mysql_user: "",mysql_password: "",mysql_host: ""Si mysql_use_defaults_file es falso, intentará usar estos parámetros para conectarse a MySQL.mysql_exclude: "information_schema|performance_schema|mysql|sys"Lista de bases de datos a excluir de la exportación, esta es una lista separada por tuberías (RegEx).mysqldump_args: "--triggers --routines --force --opt --add-drop-database"Flags predeterminados utilizados para el volcado de la base de datos.gpg_enabled: "false"Si es verdadero, las copias de seguridad se cifrarán con GPG y se añadirá el sufijo ".gpg" a cada uno de los archivos de copia de seguridad.gpg_args: "--encrypt --batch --trust-model always"Flags predeterminados utilizados para la encriptación GPG.gpg_recipient: ""Destinatario de los archivos encriptados con clave pública.gpg_sign: "false"Bandera para forzar la firma de las copias de seguridad.gpg_signer: ""Clave GPG predeterminada para firmar.
Dependencias
Ejemplo de Playbook
- hosts: mysql-servers
  vars_files:
    - vars/main.yml
  roles:
     - memiah.mysql-s3-backup
Dentro de vars/main.yml:
mysql_backup_aws_access_key: "clave_acceso_aqui"
mysql_backup_aws_secret_key: "clave_secreta_aqui"
mysql_backup_aws_region: eu-west-1
mysql_backup_config:
  aws_profile: "{{ mysql_backup_aws_profile }}"
  aws_bucket: "nombre_bucket_aqui"
  backup_dir: "{{ mysql_backup_dir }}/backups/${timestamp}"
Licencia
MIT / BSD
Información del Autor
Este rol fue creado en 2016 por Memiah Limited.
ansible-galaxy install memiah.mysql-s3-backup