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