freehck.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: 如果想将备份存储在 S3 上,设置为 true

mysql_backup_backend_use_scp: 如果想使用 SCP 将备份发送到其他主机,设置为 true

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 webhook;设置它以接收 Slack 通知

如何获取 Slack webhook: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

压缩和加密变量

mysql_backup_gzip: 对备份文件进行 gzip 压缩

mysql_backup_encrypt_aes: 对备份文件进行加密(如果启用 gzip,此操作将在 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'
  # gzip 和加密
  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-backup 脚本部署到主机之后,建议去执行备份任务的主机上,从 /opt/scripts 无参数运行作业脚本。如果没有错误通过并且在存储上看到备份文件,那么一切正常。如果没有,你会发现问题出在哪里。例如,配置用户时可能忘记将存储主机添加到 known_hosts。或者你的 s3cfg 模板可能包含错误。不要忘记仔细检查所有内容:备份工作是非常重要的任务。

在确认备份创建并存储在正确位置后,仔细检查它。你必须确保能够使用它进行恢复。

许可证

MIT

作者信息

Dmitrii Kashin, freehck@freehck.ru

关于项目

install a script performing mysql backups

安装
ansible-galaxy install freehck.script_mysql_backup
许可证
mit
下载
1.2k
拥有者