由于 Odoo(原名 OpenERP)自 8.0 以来会生成 CSS,并把附件存储在文件系统中,因此以前单纯备份数据库的脚本已经不够用了。出于实际部署的考虑,我专门写了个较为通用的 Odoo 备份脚本,不仅能备份 PostgreSQL 数据库,还能包括 Odoo 在文件系统存储的数据文件一起备份,也能备份相应的配置等。

本备份脚本会将数据库、Odoo 的数据文件及指定目录的其他文件(含子目录)一起打包到一个 .7z 的压缩包中,非常便于同步到本地。

#!/usr/bin/python
#encoding: utf-8
# A automatic backup script for Odoo # Please run it by crontab from datetime import datetime, date, time
import os, sys, time
from subprocess import call PG_SYSUSER = 'postgres' profiles = [ # First profile
{
'name': 'odoo1', # 此 profile 的名称,注意此名称会作为文件名的一部分,推荐只使用数字和字母
'backup_dir': '/var/backup/odoo', # 存放备份文件的目录
'expired_days': 30, # 保留 30 天的备份文件
'dbs': ['odoodb'], # 要备份的 数据库
'dirs': ['/var/odoo/runtime/filestore', '/etc/nginx'] # 要包含到备份中的目录或文件,如果你愿意可以连 odoo 代码一起备份
} ] def remove_files_before(dir_path, days):
now = time.time()
cutoff = now - (days * 86400)
files = os.listdir(dir_path)
for filename in files:
file_path = os.path.join(dir_path, filename)
if not os.path.isfile(file_path):
continue
fs = os.stat(file_path)
file_time = fs.st_ctime
# delete file if older than 10 days
if file_time < cutoff:
print 'Deleteing file: ', file_path
os.remove(filename) def dump_pgdb(dir_path, dbname):
cmd = 'sudo -u {0} vacuumdb -z {1}'.format(PG_SYSUSER, dbname)
print cmd
os.system(cmd)
dump_path = os.path.join(dir_path, dbname + '.pgdump')
cmd = "sudo -u {1} pg_dump --no-owner --format=c -b -f {0} {2}".format(dump_path, PG_SYSUSER, dbname)
print cmd
os.system(cmd)
return os.path.join(dir_path, dbname + '.pgdump') #remove_files_before('/data/backup/xindi', 10) def backup_snapshot(profile):
paths = []
#第一步备份数据库
dbs = profile['dbs']
temp_dumps = []
for db in dbs:
dump_path = dump_pgdb('/tmp', db)
temp_dumps.append(dump_path)
paths.append(dump_path)
#第二步打包
for dir in profile['dirs']:
paths.append(dir)
paths_arg = ' '.join(paths)
now = datetime.now()
archive_name = 'snapbak_{0}_{1}.7z'.format(profile['name'], now.strftime('%Y%m%d%H%M%S'))
archive_path = os.path.join(profile['backup_dir'], archive_name)
cmd = '7z a {0} {1}'.format(archive_path, paths_arg)
print cmd
os.system(cmd)
# Remove the database dump file in /tmp
for td in temp_dumps:
os.remove(td) remove_files_before(profile['backup_dir'], profile['expired_days']) for profile in profiles:
print 'Processing profile ' + profile['name']
backup_snapshot(profile)

使用方法:

1. 安装依赖项

假设使用 debian/ubuntu:

$sudo apt-get install sudo p7zip-full

2. 创建脚本

$sudo mkdir /opt/bin

$sudo vim /opt/bin/autobackup.py

$sudo chmod a+x /opt/bin/autobackup.py

3. 在 cron 中设置定时任务

crontab -e

在打开的编辑器中输入:

0 3 * * * /opt/bin/auto_backup.py

表示每天夜里三点执行此自动备份任务。

最后重启系统即告完成。


Happy Hacking!

Linux 下的 PostgreSQL 数据库+文件通用自动备份脚本的更多相关文章

  1. Linux下实现MySQL数据库每天定时自动备份

    使用MySQL自带的备份工具+ crontab 的方式来实现备份 1.查看磁盘挂载信息(选一个容量合适的) #df -h 2.创建备份目录 为了方便,在/home保存备份文件: cd /home/ga ...

  2. linux下rm误删除数据库文件的恢复方法

    在linux redhat 5.4版本,rm误删除数据库文件的恢复过程分享.测试没有问题,可用. 1.首先测试rm 误删除数据库文件 [oracle@primary dbwdn]$ ll total ...

  3. Linux下设置postgresql数据库开机启动

    PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下,linux文件即为linux系统上的启动脚本: 1.将Linux文件复制到 /e ...

  4. Linux下实现mysql数据库每天自动备份

    Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...

  5. windows下数据库文件使用脚本同步到linux下的mysql数据库中

    1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...

  6. Linux下安装PostgreSQL 转载linux社区

    Linux下安装PostgreSQL [日期:2016-12-25] 来源:Linux社区  作者:xiaojian [字体:大 中 小]   在Linux下安装PostgreSQL有二进制格式安装和 ...

  7. Linux 下 Vi 配置文件 .vimrc 文件

    Linux 下 Vi 配置文件 .vimrc 文件 配置 vim 的方法是在用户主目录下建立个.vimrc文件,我一般使用root帐户,所以就在/root/下建立一个.vimrc文件:vi /root ...

  8. linux下为目录和文件设置权限

    摘:linux下为目录和文件设置权限 分类: Linux2012-05-09 03:18 7456人阅读 评论(1) 收藏 举报 linuxwordpressweb数据库serverfile linu ...

  9. Linux下用到数据库sqlite3

    最近在Linux下用到数据库sqlite3,于是开始了该方面的学习. 0. 引言 我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理, 包括创建数据库.创建 ...

随机推荐

  1. kubernetes集群搭建(5):服务发现dns配置

    抱歉,多次尝试,均未成功,后续将通过二进制安装再次尝试

  2. Sequelize 学习笔记(11)- Migrations 迁移

    一.作用 类似 git 管理源代码 一样,维护你的 DB. 二.安装 npm install --save sequelize-cli 三.使用 1.构建项目时 node_modules/.bin/s ...

  3. Facebook的一些基本操作(网页版)

    前期准备 1,注册一次Facebook账号,新建一个应用取到应用id 2,引进Facebook的SDK到页面中: 在js中引进以下代码,初始化 // facebook window.fbAsyncIn ...

  4. linux下 /usr/bin/ld: 找不到 -ldhnetsdk的解决方法

    linux下使用Qt编译程序的时候,安装了程序自带的链接库之后,仍然上报这个错误, 发现系统上报这个错误: /usr/bin/ld: 找不到 -ldhnetsdk 经过仔细的定位,终于解决了,这里把思 ...

  5. Python3自动化运维之Fabric模版详解

    一.概要 Fabric是基于Python(2.7,3.4+以上版本)实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括 ...

  6. asp.net core的docker实践

    如果centos中没有安装和docker和.net core镜像,先安装docker和asp.net core 镜像 安装dockeryum -y install docker-io 启动 Docke ...

  7. 利用python数据分析与挖掘相关资料总结

    小生今年研二,目前主要从事软件工程数据挖掘与分析.之前一直苦于找不到一个从数据预处理.数据分析.数据可视化和软件建模的统一平台.因此,小生辗转反辙学习了java,R语言,python,scala等等. ...

  8. [译]初试C# 8.0

    原文地址: https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/ 初试C# 8.0 昨天我们宣布了Visu ...

  9. web框架的前生今世--从servlet到spring mvc到spring boot

    背景 上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来.最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html.css等.  但是可 ...

  10. linux图形化客户端

    很多服务器都用linux 但这些linux都是没有图形化界面的, 一般也不建议在服务器上装图形化界面 我们都知道,维护linux,大部分都是使用命令 那么,为什么不能开发一个应用程序, 把图形化操作转 ...