memiah.mysql-s3-backup
MySQL S3备份
一个Ansible角色,用于安装亚马逊AWS命令行界面,并配置一个bash脚本,将单个MySQL数据库备份上传到亚马逊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]"
您的亚马逊AWS访问密钥。
mysql_backup_aws_secret_key: "[secret-key]"
您的亚马逊AWS密钥。
mysql_backup_aws_region: eu-west-1
存储桶所在的区域名称。
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"
启用上传到亚马逊S3。如果设置为false,"backup_dir_remove" 标志将被设置为false。aws_profile: "mysql-s3-backup"
设置要使用的AWS配置文件(~/.aws/credentials 和 ~/.aws/config)。mysql_slave: "false"
如果从MySQL从服务器备份,则设置为true,这将停止从服务器,并在脚本完成时重新启动它。mysql_using_rds: "false"
如果从RDS只读副本备份,则设置为true,这将确保使用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
作者信息
此角色由 Memiah Limited 于2016年创建。