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