第八章 数据的备份与恢复
我们在第一部分的最后一章简单介绍过数据库的备份,用到第三方的开源模块auto_backup。这种备份对于常规的小规模应用是符合要求的,但是随着系统使用时间的延长,以及数据量的增长,这中备份的模式弊端就会凸显出来。
我们知道数据库的备份可以选择dump或者zip格式,实际上,只有当数据库中附件的文件不是那么大的时候可以选择zip格式,否则zip格式的备份文件会非常大,导致备份和恢复成为一种很困难的事情。
比如某家公司的系统在使用了2年之后,数据库的大小已经达到30G的规模,这个时候再使用zip模式备份就会经历相当长的等待时间,而且备份下来的文件通常也非常大,即便是压缩过之后。恢复也会耗时长久,而且通常会导致服务器响应超时。因此,对于使用过一段时间之后的数据库,我们推荐的备份格式是dump。dump格式的备份文件仅包含数据库中的数据,不含附件。
数据库的手动备份
虽然odoo官方提供了web界面的数据库管理功能,但有时候我们还是会遇到需要自己手动备份数据库的时候。
pg_dump -U postgres -d db_name -F p -O -f db.sql
其中 db_name是要备份的数据名, db.sql是备份文件名称
与之匹配的数据库恢复脚本:
psql db_name -U db_user < db.sql
归档数据库的恢复
首先,我们正常使用odoo自带的还原数据库功能,将dump文件还原到新服务器中。
然后我们正常登录到新还原的数据库中。此时我们有可能会发现css样式没有了,这是因为系统之前编译过的样式文件存储在附件中,而我们的数据库还原并没有还原样式文件,因此导致了样式的丢失。
没有关系,我们正常登录到系统中。
我们发现,不仅样式没了,模块的图片也统统没有了。这个时候,我们打开开发者模式,然后搜索web模块,点击升级按钮
这一步会升级系统中所有已经安装的模块,等系统升级完成就可以看到我们的模块图片已经全部回来了。
超大数据库的恢复
有时候, 数据库过大导致恢复失败,那么我们就需要手动将备份文件恢复到数据库中.
pg_restore -c -d erp --no-owner --role=odoo12 backup.dump;
本地开发环境的数据恢复
有时候我们希望在本地环境中将生产环境的数据备份下来,以供我们进行开发和测试. 但是由于生产环境的持续使用, 产生的附件数据有时候会十分庞大, 因此我们在开发的时候可以只备份数据而不备份附件, 以提高备份效率.
之后,我们使用sql将附件记录从数据库中进行删除:
delete from ir_attachment;
然后我们使用如下的命令将系统进行整体升级:
odoo -u web
如果你的系统设计或者开发不符合规范,那么在升级过程中会报出异常, 这时候需要根据具体的异常信息进行处理. 所以这里提醒读者, 一定要慎重使用studio, 开发过程中一定要严格遵守开发规范,否则将会浪费大量时间在调试中.(如果没有报错,说明设计良好,代码相对比较规范)