实际上,用例使用来自动执行此操作ansible
。我只想在数据库完全为空(里面没有表)时才导入数据库转储。当然,总会有执行sql语句的方法,但这是不得已的方法,我相信应该为此提供更优雅的解决方案。
pg_restore
据我所知,手册没有提供此选项。
这是我计划使用ansible进行的操作:
- name: db_restore | Receive latest DB backup
shell: s3cmd --skip-existing get `s3cmd ls s3://{{ aws_bucket }}/ | grep sentry | tail -1 | awk '{print $4}'` sql.latest.tgz
args:
chdir: /root/
creates: sql.latest.tgz
- name: db_restore | Check if file exists
stat: path=/root/sql.latest.tgz
register: sql_latest
- name: db_restore | Restore latest DB backup if backup file found
shell: PGPASSWORD={{ dbpassword }} tar -xzOf /root/sentry*.tgz db.sql | psql -U{{ dbuser }} -h{{ pgsql_server }} --set ON_ERROR_STOP=on {{ dbname }}
when: sql_latest.stat.exists
ignore_errors: True
理想情况下,这应该检查数据库是否为空。没有用于此目的的ansible模块。Google也保持沉默。当前的解决方案实际上也可以使用,当导入失败时,它将给出错误信息,而我可以忽略错误,但是看到一个错误的警报有些痛苦。
要将数据库视为空数据库,我们必须知道从创建时就没有添加任何内容。由于postgres不会跟踪此问题(如@Craig Ringer所述),因此我建议使用与ansible不同的方法。
因此,只需使用如下处理程序机制:
- name: Create zabbbix postgres DB
postgresql_db: name="{{zabbix_db_name}}"
notify:
- Init zabbix database
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句