freehck.script_psql_backup

freehck.script_psql_backup

此角色创建一个执行psql备份的脚本。

它可以转储数据库,可能会用gzip压缩,并使用aes256加密备份。

它可以向Slack发送消息。

它可以将备份存储在S3上,或/和通过scp传输到其他主机。

角色变量

基本变量

psql_backup_host: psql主机

psql_backup_port: psql端口(默认为3306)

psql_backup_user: psql用户

psql_backup_pass: psql密码

psql_backup_db: 要备份的psql数据库(如果未设置,则将--all-databases选项传递给psqldump)

psql_backup_backend_use_s3: 如果要将备份存储在S3上,设置为true

psql_backup_backend_use_scp: 如果要使用scp将备份发送到其他主机,设置为true

S3后端变量

psql_backup_s3cfg_template: 你的s3fs配置模板(提供了默认值,请放心)

psql_backup_s3: S3配置选项格式如下

psql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "bucket-name"
SCP后端变量

psql_backup_scp_host: 储存主机以复制备份

psql_backup_scp_user: 登录储存主机的用户

psql_backup_scp_dst: 在储存主机上存放备份的路径

psql_backup_scp_identity_src: 登录储存主机使用的身份文件(是的,它应该是一个私钥)

命名

psql_backup_archive_prefix: 备份名称或时间戳之前的所有内容

psql_backup_archive_stamp: 时间戳模板,使用date工具格式(默认是%F-%Hh%Mm%Ss,结果会类似2019-09-23-12h22m07s

psql_backup_script_name: 如果想重命名基础脚本,请自行选择

psql_backup_custom_script_name: 如果想给执行备份的作业脚本指定特定名称。默认是psql-backup-<database_name>.sh,其中可以是all,如果未指定备份数据库。

psql_backup_scp_identity_name: 默认是id_rsa,但在有多个使用不同密钥的SCP后端时,可以修改它

psql_backup_encrypt_aes_key_name: 默认是aes256.key,如果想为不同的备份任务使用不同的加密密钥,需要此项

通知

psql_backup_warn_size: 以GiB为单位,默认是0。将你的备份与此大小进行比较。如果备份较小,则会发出警告。

psql_backup_hostname: 主机名(将在Slack消息中显示)

psql_backup_slack_webhook: 这是一个Slack webhook;设置它以获取Slack通知

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

压缩与加密变量

psql_backup_gzip: gzip备份文件

psql_backup_encrypt_aes: 加密备份文件(如果启用gzip,则该操作将在gzip之后进行)

psql_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

目录

psql_backup_script_dir: 存放基础脚本的目录

psql_backup_custom_script_dir: 存放特定备份作业脚本的目录

psql_backup_conf_dir: 存放备份脚本配置文件的目录

psql_backup_encrypt_aes_key_dir: 存放aes256加密密钥的目录

psql_backup_tmpdir: 用于存放临时结果的目录(不需要创建其他目录,默认是/tmp)

将数据传递到角色外

psql_backup_save_facts_about_custom_script: 如果设置为true,角色将保存生成的作业脚本的完整路径,需执行以进行备份,存入变量psql_backup_last_generated_custom_script。可以使用此变量为该脚本添加特定的cron任务。

示例Playbook

# 创建psql备份作业脚本
- role: freehck.script_psql_backup
  # psql连接参数
  psql_backup_host: "{{ db_host }}"
  psql_backup_user: "{{ db_user }}"
  psql_backup_pass: "{{ db_pass }}"
  psql_backup_db: "{{ db_name }}"
  # 后端存储参数
  psql_backup_backend_use_s3: no
  psql_backup_backend_use_scp: yes
  psql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  psql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  psql_backup_scp_user: 'file'
  psql_backup_scp_dst: '/var/www/file/public/psql-db-prod-backup'
  # gzip与加密
  psql_backup_gzip: yes
  psql_backup_encrypt_aes: yes
  psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # 其他
  psql_backup_save_facts_about_custom_script: yes
  psql_backup_logfile: "/var/log/psql-backup.log"
  tags: [ backup, psql ]

# 创建该作业脚本的cron任务是合理的
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "备份数据库"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ psql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, psql ]

重要信息

在将psql-backup脚本部署到你的主机后,最好登上执行备份任务的主机,并从/opt/scripts运行作业脚本,无需参数。如果没有错误,并且在存储中看到备份文件,那么一切正常。如果没有,你需要找出问题所在。例如,你可能忘记将存储主机添加到known_hosts中,或者你的s3cfg模板中可能包含错误。不要忘记仔细检查所有内容:备份是非常重要的任务。

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

许可

MIT

作者信息

Dmitrii Kashin, freehck@freehck.ru

关于项目

install a script performing mysql backups

安装
ansible-galaxy install freehck.script_psql_backup
许可证
mit
下载
115
拥有者