script_mysql_backup

freehck.script_mysql_backup

Эта роль создает скрипт, который выполняет резервное копирование MySQL.

Он создает дамп базы данных, возможно, сжатый с помощью gzip и зашифрованный с помощью aes256.

Скрипт может отправлять сообщения в Slack.

Он может сохранять резервную копию на S3 или/и передавать на другой хост с помощью SCP.

Переменные роли

Основные переменные

mysql_backup_host: хост MySQL

mysql_backup_port: порт MySQL (по умолчанию 3306)

mysql_backup_user: пользователь MySQL

mysql_backup_pass: пароль MySQL

mysql_backup_db: база данных MySQL для резервного копирования (если не указана, будет использован параметр --all-databases для mysqldump)

mysql_backup_backend_use_s3: установите значение true, если хотите сохранить резервную копию на S3

mysql_backup_backend_use_scp: установите значение true, если хотите передать резервную копию на другой хост с помощью SCP

Переменные для S3

mysql_backup_s3cfg_template: шаблон конфигурации для s3fs (по умолчанию предоставляется, не волнуйтесь)

mysql_backup_s3: параметры конфигурации S3 в следующем формате

mysql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "bucket-name"
Переменные для SCP

mysql_backup_scp_host: хост для хранения, куда будет скопирована резервная копия

mysql_backup_scp_user: пользователь для входа на хост хранения

mysql_backup_scp_dst: путь на хосте хранения для сохранения резервной копии

mysql_backup_scp_identity_src: файл идентичности для входа на хост хранения (да, это должен быть закрытый ключ)

Именование

mysql_backup_archive_prefix: просто имя резервной копии или всё, что перед меткой времени

mysql_backup_archive_stamp: шаблон метки времени в формате инструмента date (по умолчанию %F-%Hh%Mm%Ss, результатом будут метки времени вроде 2019-09-23-12h22m07s)

mysql_backup_script_name: если хотите переименовать основной скрипт, пожалуйста

mysql_backup_custom_script_name: если хотите задать конкретное имя для скрипта задания, который выполняет резервное копирование. По умолчанию это mysql-backup-<database_name>.sh, где может быть all, если не указаны базы данных для резервного копирования.

mysql_backup_scp_identity_name: по умолчанию это id_rsa, но может быть полезно изменить его, если вы хотите иметь несколько SCP-ресурсов с разными ключами

mysql_backup_encrypt_aes_key_name: по умолчанию это aes256.key, необходимо, если хотите иметь разные ключи шифрования для разных задач резервного копирования

Уведомления

mysql_backup_warn_size: в GiB, по умолчанию 0. Сравните размер вашей резервной копии с этим значением. Если ваша резервная копия меньше, предупредите об этом.

mysql_backup_hostname: имя хоста (которое будет отображаться в сообщениях Slack)

mysql_backup_slack_webhook: как указано, это вебхук Slack; установите его, чтобы получать уведомления в Slack

Как получить вебхук для Slack: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Переменные для сжатия и шифрования

mysql_backup_gzip: сжать файл резервной копии с помощью gzip

mysql_backup_encrypt_aes: зашифровать файл резервной копии (если включено gzip, это действие будет выполнено после сжатия)

mysql_backup_encrypt_aes_key_src: aes256 ключ для шифрования вашей резервной копии

Aes256 ключ — это просто 32 байта случайных данных.

Вы можете использовать следующую команду для его создания: dd if=/dev/urandom of=aes256.key count=1 bs=32.

Если вы предпочитаете строковые пароли (это менее безопасно), вы можете использовать: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Каталоги

mysql_backup_script_dir: каталог для хранения основного скрипта

mysql_backup_custom_script_dir: каталог для хранения скриптов, специфичных для соответствующих задач резервного копирования

mysql_backup_conf_dir: каталог для хранения конфигурационных файлов скрипта резервного копирования

mysql_backup_encrypt_aes_key_dir: каталог для хранения ключа шифрования aes256

mysql_backup_tmpdir: каталог для хранения временных результатов (создавать отдельный не нужно, по умолчанию это /tmp)

Передача данных за пределы роли

mysql_backup_save_facts_about_custom_script: если установить в true, роль сохранит полный путь сгенерированного скрипта задания, который должен быть выполнен для резервного копирования, в переменную mysql_backup_last_generated_custom_script. Вы можете использовать эту переменную для добавления конкретной задачи cron для этого скрипта.

Пример плейбука

# создание скрипта задания резервного копирования MySQL
- role: freehck.script_mysql_backup
  # параметры подключения к MySQL
  mysql_backup_host: "{{ db_host }}"
  mysql_backup_user: "{{ db_user }}"
  mysql_backup_pass: "{{ db_pass }}"
  mysql_backup_db: "{{ db_name }}"
  # параметры хранения
  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'
  # сжатие и шифрование
  mysql_backup_gzip: yes
  mysql_backup_encrypt_aes: yes
  mysql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # другое
  mysql_backup_save_facts_about_custom_script: yes
  mysql_backup_logfile: "/var/log/mysql-backup.log"
  tags: [backup, mysql]

# разумно создать задачу cron для этого скрипта задания
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "резервное копирование базы данных"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ mysql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [backup, mysql]

Важная информация

После развертывания скрипта резервного копирования MySQL на вашем хосте разумно зайти на хост, который выполняет задачи резервного копирования, и запустить скрипт задания из /opt/scripts без параметров. Если он прошел без ошибок и вы видите файл резервной копии на хранилище, значит, все в порядке. Если нет — вы узнаете, в чем проблема. Например, вы могли забыть добавить хост хранилища в known_hosts при настройке пользователей. Или ваш шаблон s3cfg мог содержать ошибку. Не забудьте проверить все дважды: резервное копирование — очень важная задача.

После того, как вы проверите, что резервная копия была создана и сохранена в правильном месте, внимательно проверьте ее. Вы должны быть уверены, что сможете восстановить данные с ее помощью.

Лицензия

MIT

Авторская информация

Дмитрий Кашин, freehck@freehck.ru

О проекте

install a script performing mysql backups

Установить
ansible-galaxy install freehck/ansible-role-script-mysql-backup
Лицензия
mit
Загрузки
1168
Владелец