mysql-s3-backup
MySQL S3 Резервное Копирование
Роль Ansible, которая устанавливает интерфейс командной строки Amazon AWS и настраивает bash-скрипт для загрузки отдельных резервных копий баз данных MySQL на Amazon S3.
Требования
Роль предполагает, что MySQL уже установлен.
Если вы включаете GPG, вам также нужно создать эти учетные данные.
Рекомендуется создать пользователя с ограниченными правами. Ниже приведена политика с именем AmazonS3CreateReadWriteAccess-[bucket-name]
, которая может быть использована для предоставления ограниченного доступа (создание/список/загрузка) к ведру [bucket-name]
.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "s3:CreateBucket", "s3:ListBucket" ],
"Resource": [ "arn:aws:s3:::[bucket-name]" ]
},
{
"Effect": "Allow",
"Action": [ "s3:PutObject" ],
"Resource": [ "arn:aws:s3:::[bucket-name]/*" ]
}
]
}
Кроме того, вы можете рассмотреть возможность версионности ведра и жизненных циклов в S3.
Переменные Роли
Доступные переменные перечислены ниже вместе с их значениями по умолчанию (см. defaults/main.yml
):
mysql_backup_name: "mysql-s3-backup"
Имя, используемое для идентификации этой роли, используется для именования каталога, файлов и профиля AWS.
mysql_backup_dir: "/opt/{{ mysql_backup_name }}"
Каталог, в котором будут храниться скрипт резервного копирования и конфигурация.
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 включен и настроен на выполнение в 23:00 каждый день и не будет отправлять сообщения по электронной почте. Если вы хотите отправлять результаты на электронную почту, укажите адрес электронной почты получателя.
mysql_backup_aws_profile: "{{ mysql_backup_name }}"
Для разделения создается новый профиль AWS для этого контекста скрипта; вы можете установить это значение в "default"
, чтобы игнорировать профили.
mysql_backup_aws_access_key: "[accesss-key]"
Ваш ключ доступа к Amazon AWS.
mysql_backup_aws_secret_key: "[secret-key]"
Ваш секретный ключ Amazon AWS.
mysql_backup_aws_region: eu-west-1
Название региона, в котором находится ведро S3.
mysql_backup_aws_format: text
Формат вывода из AWS CLI.
mysql_backup_gpg_secret_key: False
Секретный ключ GPG, с помощью которого резервные копии будут зашифрованы.
mysql_backup_gpg_secret_dest: "~/{{ mysql_backup_name }}-gpg.asc"
Место хранения секретного ключа GPG.
mysql_backup_system_user: root
Пользователь, который будет владеть и запускать скрипт резервного копирования, а также задачу cron.
mysql_backup_config: []
Настройки для самого скрипта резервного копирования (значения используют синтаксис bash).
timestamp: "$(date +"%Y-%m-%d_%H%M")"
Дата и время, используемые для создания каталогов резервного копирования "YYYY-MM-DD_HHII".backup_dir: "/tmp/mysql-s3-backups/${timestamp}"
Локальный путь к каталогу резервного копирования, который используется для хранения файлов перед загрузкой.backup_dir_remove: "true"
Удаление локального каталога резервного копирования по завершении скрипта.aws_bucket: "mysql-s3-backups"
Имя ведра AWS S3 по умолчанию.aws_dir: "$timestamp"
Директория AWS по умолчанию для хранения резервных копий.aws_extra_arguments: "--endpoint https://s3-compatable-endpoint.example.com"
Дополнительные аргументы, которые можно передать в aws cli.aws_enabled: "true"
Включить загрузку на Amazon S3; если false, флаг "backup_dir_remove" будет установлен в false.aws_profile: "mysql-s3-backup"
Установите профиль AWS для использования (~/.aws/credentials и ~/.aws/config).mysql_slave: "false"
Установите в true, если вы создаете резервную копию с сервера-слейва MySQL; это остановит слейв и запустит его снова, когда скрипт завершится.mysql_using_rds: "false"
Установите в true, если вы создаете резервную копию с RDS-реплики, это обеспечит использование функций mysql.rds_stop_replication и mysql.rds_start_replication вместо стандартных команд STOP / START SLAVE (которые не имеют необходимых прав на RDS).mysql_use_defaults_file: "true"
Использовать файл конфигурации MySQL по умолчанию.mysql_defaults_file: ""
Специфическое местоположение файла настроек по умолчанию, например, "/etc/my.cnf".mysql_user: ""
,mysql_password: ""
,mysql_host: ""
Если mysql_use_defaults_file равно false, скрипт попытается использовать эти параметры для подключения к MySQL.mysql_exclude: "information_schema|performance_schema|mysql|sys"
Список баз данных, которые следует исключить из экспорта; это список, разделенный символом "|".mysqldump_args: "--triggers --routines --force --opt --add-drop-database"
Флаги по умолчанию, используемые для дампа базы данных.gpg_enabled: "false"
Если true, резервные копии будут зашифрованы с помощью GPG, и суффикс ".gpg" будет добавлен к каждому файлу резервной копии.gpg_args: "--encrypt --batch --trust-model always"
Флаги по умолчанию для шифрования GPG.gpg_recipient: ""
Получатель зашифрованных файлов с помощью открытого ключа.gpg_sign: "false"
Флаг для обязательной подписи резервных копий.gpg_signer: ""
Ключ GPG по умолчанию для подписания.
Зависимости
Пример Плейбука
- hosts: mysql-servers
vars_files:
- vars/main.yml
roles:
- memiah.mysql-s3-backup
Внутри vars/main.yml
:
mysql_backup_aws_access_key: "access_key_here"
mysql_backup_aws_secret_key: "secret_key_here"
mysql_backup_aws_region: eu-west-1
mysql_backup_config:
aws_profile: "{{ mysql_backup_aws_profile }}"
aws_bucket: "bucket_name_here"
backup_dir: "{{ mysql_backup_dir }}/backups/${timestamp}"
Лицензия
MIT / BSD
Авторская Информация
Эта роль была создана в 2016 году компанией Memiah Limited.
ansible-galaxy install memiah/ansible-role-mysql-s3-backup