原文出自:https://alanhou.org/odoo-14-installing-the-odoo-development-environment/
在使用Odoo时,你的实例所有的数据都存储在PostgreSQL数据库中。可以使用你习惯的任意标准数据库管理工具,但Odoo为一些常用操作提供了一个网页界面。
准备工作
我们假定你的工作环境已配置好,并且已运行了一个实例。
如何管理…
Odoo数据库管理界面提供创建、复制、删除、备份和恢复数据库的工具。还有一种修改主控密码(master密码)的方式,用于保护对数据库管理界面的访问。
访问数据库管理界面
需要执行如下步骤来访问数据库:
1、进入实例的登录页面(如果已登录请先登出)。
2、点击Manage Databases链接。这会导航至http://localhost:8069/web/database/manager(也可以在浏览器中直接访问这个URL)。
设置或修改主控密码
图1.4 – 主控密码警告
需要执行如下步骤来设置master:
1、点击Set Master Password按钮。会弹出一个对话框来要求你提供新的主控密码:
2、输入一个复杂的新密码并点击Continue
如果已设置了主控密码,点击页面底部的Set Master Password按钮来进行修改。在弹出的对话框中输入老的主控密码再输入新密码,然后点击Continue。
📝主控密码是在admin_password键下的服务端配置。如果启动服务时没有指定配置文件,会在~/.odoorc中生成新的配置文件。查看下一部分获取更多有关配置文件的信息。
创建新数据库
这个对话框用于创建一个由当前Odoo服务处理的新数据库实例:
1、在数据库管理窗口中,点击页面底部的Create Database按钮。会弹出如下对话框:
2、填写表单,如下:
- Master Password:这是这一实例的主控密码。
- Database Name:输入所想要创建的数据库名称。
- Email: 在此处添加email地址;在稍后用作用户名。
- Password:输入你想为新实例所设置的admin用户密码。
- Phone Number:设置电话号码(可选)。
- Language:在下拉列表中选择你希望新数据库默认安装的语言。Odoo会自动加载所选语言的翻译。
- Country:在下拉列表中选择主租户的国家。选择这一项后会自动做一些配置,如公司的币种。
- Demo data:勾选获取演示数据。这对于运行交互式测试或为用户设置演示项目非常有用,但针对包含生产数据的数据库设计时则不应勾选。
ℹ️如果想要使用该数据库来运行模块的自动化测试(参见[第七章 调试](https://alanhou.org/odoo-14-debugging/)),则需要有演示数据,因为Odoo中的大多数自动化测试依赖于这些记录来成功运行。
3、点击Continue按钮并等待新数据库初始化完成。然后会被重定向到该实例并以管理员进行连接。
问题处理:如果被重定向到了登录页,这可能是因为向Odoo传递了–db-filter选项并且与新数据库名不匹配造成的。注意odoo-bin start会默默地进行这一操作,仅让当前数据库可用。解决这一问题,只需不使用start命令来对Odoo进行重启,在本章中的通过源码轻松安装 Odoo 一节展示过这一做法。如果你有一个配置文件(参见本章后面的在一个文件中存储实例配置一节),那么请检查db_filter未进行设置或设置一个与新数据库名称匹配的值。
复制数据库
通常你已经有一个数据库了,会希望使用它做一存储过程的试验或运行测试,但又不修改已有数据。这里的方案很简单:复制该数据库并在拷贝上运行测试。可以按需重复多次
1、在数据库管理页面,点击Duplicate Database:
2、填写表单如下:
- Master Password:这是Odoo服务的主控密码
- New Name:给予拷贝的名称
3、点击Continue按钮。
4、可以在数据库管理页面点击新创建的数据库名称来访问该数据库的登录页面。
删除数据库
1、在完成测试之后,如想要清理掉所复制的数据库。通过如下步骤来进行清理:
在数据库管理页面,点击想删除的数据库名称旁的Delete Database链接,会出现下图中的对话框:
2、填写表单并输入 Master Password,即Odoo服务的主控密码。
3、点击Delete按钮。
📝小心!数据丢失!
如果你选择了错误的数据库,并且没有备份,则无法恢复损失的数据。
备份数据库
需执行如下步骤来创建备份:
1、在数据库管理页面,点击想备份数据库名称旁的Backup按钮,会弹出下图这样的对话框:
2、填写表单
- Master Password:Odoo服务的主控密码。
- Backup Format:对生产数据库请保持使用zip,因为这是唯一真正的全量备份格式。仅在备份不关心文件存储的开发数据库时使用pg_dump格式。
3、点击Backup。然后浏览器会下载备份文件。
还原数据库备份
如果需要还原一个备份,需要按如下步骤操作:
1、在数据库管理页面,点击页面底部的Restore Database按钮,会弹出如下的对话框:
2、填写表单:
- Master Password:这是Odoo服务的主控密码。
- File:这是之前所下载的Odoo备份
- Database Name:提供你需进行备份还原的数据库名称。该数据库在服务器上一定不能存在。
- 数据库可能进行了迁移或拷贝:如果原数据库在另一台服务器上或是为从当前服务器删除则选择This database was moved。否则选择This database is a copy,这也是安全的默认选项。
3、点击Continue按钮。
📝不能在数据库自身之上还原数据库。这么做会得到一条错误消息(Database restore error: Database already exists)。需要先删除该数据库。
运行原理…
除Change master password以外的这些页面上的功能,是在服务器上运行PostgreSQL运维命令并通过网页界面报告结果。
主控密码是非常重要的信息,仅存储在Odoo服务的配置文件中,从不在数据库中进行存储。曾经有一个admin默认值,但使用这个值是一个广为人知的安全问题。在Odoo v9及之后的版本中,这被识别为一个未设置的主控密码,并在访问数据库管理页面时会敦促你修改密码。虽然这在配置文件中以admin_passwd进行存储,它与admin的密码是不同的,它们是两个不同的密码。主控密码是为Odoo服务进程设置的,进程本身可以处理多个数据库实例,每个实例都有一个独立的admin用户及其自己的密码。
📝安全考虑:记住本章中我们所考虑的是开发环境。Odoo数据库管理界面在我们运行生产服务时是需要进行安全保护的,因为这里给到了过多敏感信息的访问权限,尤其是在服务器托管了多个不同客户端的Odoo实例时。
Odoo使用PostgreSQL的createdb工具来新建数据库,它通过和以空数据库启动Odoo时相同的方式调用内部的Odoo函数来初始化新数据库。
Odoo使用createdb的–template选项传递原数据库作为参数来复制数据库。这基本上使用内部优化的PostgreSQL例行程序在新数据库中复制模板数据库的结构,这比创建备份和还原备份的速度会快很多(尤其是在使用网页界面时,还要求你下载备份文件然后再重新上传)。
备份和还原操作分别使用pg_dump和pg_restore工具。在使用zip格式时,备份还包含文件存储的拷贝,其中为配置Odoo不保存在数据库中的文档的拷贝,这是14.0中的默认选项。如果没做过修改的话,这些文件存放在~/.local/share/Odoo/filestore中。
📝如果备份很大,下载时会失败。这可能是因为Odoo服务本身无法在内存中处理这么大的文件或者是因为服务在反向代理之后运行,而这个代理设置了HTTP响应大小的限制。反过来,出于某些原因,你可能会在还原数据库的操作中遇到问题。在碰到这些问题时,应当投入时间建立更健壮的外部备份方案。
更多内容…
有经验的Odoo开发者通常不使用数据库管理界面,而在命令行执行相关操作。比如使用演示数据初始化新数据库,可以使用如下的一行代码:
$ createdb testdb && odoo-bin -d testdb
命令行的另一个彩蛋是可以在使用时要求安装一些插件,比如 -i sale,purchase,stock。
停止服务并运行如下这些命令来复制数据库:
$ createdb -T dbname newdbname
$ cd ~/.local/share/Odoo/filestore # 如果你修改了data_dir请调整此处
$ cp -r dbname newdbname
$ cd -
注意在开发的上下文中,文件存储通常会被省略。
📝createdb -T 仅在数据库没有活跃会话时方能使用,这表示在通过命令行复制数据库之前你需要关闭Odoo服务。
可运行如下命令来删除一个实例:
$ dropdb dbname
$ rm -rf ~/.local/share/Odoo/filestore/dbname
可运行如下命令来创建一个备份(假设PostgreSQL服务在本地运行):
$ pg_dump -Fc -f dbname.dump dbname
$ tar cjf dbname.tgz dbname.dump ~/.local/share/Odoo/filestore/dbname
可运行如下命令来还原备份:
$ tar xf dbname.tgz
$ pg_restore -C -d dbname dbname.dump
📝当心!
如果你的Odoo实例使用了另一个用户连接数据库,需要传递-U username来使用正确的用户作为还原数据库的所有者。