如何自动备份/恢复Odoo数据库

在此篇教程中,我们主要向大家演示如何在Linux系统中创建一个计划任务来定期备份odoo的数据库。

Odoo 使用Postgresql数据库,我们需要用到一些Postgresql的命令跟linux中的crontab 结合来定期备份数据库,这也是我们强烈建议大家在生产环境下的odoo,一定要定期备份数据,当你出故障时你才知道数据多珍贵。

我们有两种方法可以进行数据库的备份:

利用Odoo数据库管理界面

Odoo 数据库管理界面提供了备份、复制、删除、创建和恢复数据库的工具。 使用数据库管理界面创建备份是就显示轻而易举的。 只需打开浏览器并导航到 http://<你的IP地址>:8069/web/database/manager其中”8069″为端口,如果你已修改了端口,请按实际填写)

你将可以看到下面的页面:

odoo数据库管理界面
odoo数据库管理界面

可以从界面中看到当前所有的数据库,可以进行备份或复制,或删除,也可以把备份好的进行恢复。我们这里需要备份,直接点需要备份的数据库 Backup(备份):

odoo数据库备份类型选择界面

输入数据库管理员密码后,并选择备份的文件格式(zip和pg_dump),两者区别如下:

  • Zip – 这个格式备份的是含了数据库中的文档,你上传的图片,文件,等
  • Pg_dump – 这个是直接用postgresql的备份命令,备份的只是所有的表数据而已,不包含你上传的各种文件。

点击备份后,就会下载自动下载备份文件,根据你数据库的大小决定备份时间。

用命令行来备份数据库

现在我们知道如何通过 Odoo 数据库管理界面创建备份,那我们如何使用相同的工具从命令行创建备份呢?

答案很简单。 使用 wget 或 curl 。

这两个工具都可以使用 POST 发送数据,我们可以使用它来将必要的变量传递给 Odoo 数据库工具。

在下面的示例中,我们的主密码是 ADMIN_PASSWORD,我们正在创建名为 DB_NAME 的数据库的备份文件 back_up_filename.zip,该文件将保存在 backup_dir 目录中。

curl -X POST -F 'master_pwd=ADMIN_PASSWORD' -F 'name=DB_NAME' -F 'backup_format=zip' -o /backup_dir/back_up_filename.zip http://localhost:8069/web/database/backup

如果你喜欢使用wget命令,那命令如下:

wget --post-data 'master_pwd=ADMIN_PASSWORD&name=DB_NAME&backup_format=zip' -O /backup_dir/back_up_filename.zip http://localhost:8069/web/database/backup

如果您想从远程位置而不是本地主机创建备份,您需要输入 Odoo 实例的 URL。 在这种情况下,建议使用加密HTTPS,因为我想你肯定不希望您的密码以纯文本形式通过 Internet 发送,这样很容易给截取, 您可以参考我的另一篇关于如何使用 Nginx 作为反向代理配置 Odoo.

如何设置自动定期备份Odoo数据库

我们可以创建一个cron 任务来定期自动备份odoo数据库。

假如我们需要每天早上1:30备份odoo数据库并保留7天,我们可以这样创建一个脚本:

  • 备份路径:~/odoo_backups
  • 目标数据库名:db1
  • 管理员密码:superadim_passwd
sudo vim ~/backup_odoo.sh
#!/bin/bash

# vars
BACKUP_DIR=~/odoo_backups
ODOO_DATABASE=db1
ADMIN_PASSWORD=superadmin_passwd

# create a backup directory
mkdir -p ${BACKUP_DIR}

# create a backup
curl -X POST \
    -F "master_pwd=${ADMIN_PASSWORD}" \
    -F "name=${ODOO_DATABASE}" \
    -F "backup_format=zip" \
    -o ${BACKUP_DIR}/${ODOO_DATABASE}.$(date +%F).zip \
    http://localhost:8069/web/database/backup


# delete old backups
find ${BACKUP_DIR} -type f -mtime +7 -name "${ODOO_DATABASE}.*.zip" -delete

请自行修改下面的参数,注意改成自己的目标参数!

修改脚本的权限:

sudo chmod +x ~/backup_odoo.sh

最后我们通过crontab命令来创建定期处理任务来执行以上脚本:

crontab -e

在最下面添加下面这行命令:

30 1 * * * /home/<yourusername>/backup_odoo.sh

请注意将上面的路径修改成你脚本的路径!

你也可以根据自己的需要,修改自动任务的时间,具体使用方法可参考crontab使用.

恢复odoo数据库

通过odoo的数据库管理界面恢复

我们通过打开http://<你的域名或ip>:8069/web/database/manager,然后点击“Restore Database”,如下图:

odoo数据库恢复界面

然后把我们备份下来的zip文件上传:

odoo数据库恢复界面
  • This database is a copy -意思就是该数据库是本机环境下备份的
  • This database was moved- 意思就是数据库是从别的数据库备份转移过来的

点击”Continue”后,就开始上传数据库,上传成功后选择数据库进入。

利用命令行恢复odoo数据库

我们也可以通过下面的命令来恢复数据库:

curl -F 'master_pwd=superadmin_passwd' -F backup_file=@/opt/odoo/odoo_backups/db1.2018-04-14.zip -F 'copy=true' -F 'name=db3' http://localhost:8069/web/database/restore

注意修改命令行的参数”master_pwd”,”backup_file”,”name”及界面路径

如果恢复成功,会报下面信息:

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="/web/database/manager">/web/database/manager</a>.  If not click the link.

写在最后

上面详细解说了odoo数据库从备份到恢复的完整过程,如果有什么不懂的可以留言,有什么错误也欢迎斧正!

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注