备份策略:阶段性备份+特定事件备份。周期性自动备份+手动检查+自动通知。
官方参考:https://www.odoo.com/forum/help-1/question/how-to-setup-a-regular-postgresql-database-backup-4728
1、odoo备份数据库
http://ip/web/data/manager
选择backup,输入密码admin
提示:Database backup error: Access denied
处理:登陆odoo服务器,修改/etc/openerp_server.conf更改数据库维护的Master password
; 管理员主控密码(用于创建、还原和备份数据库等操作)
admin_passwd = admin
保存文件后运行:service odoo restart 重启动odoo配置生效
重试备份数据库 http://ip/web/data/manager
backup数据库,输入Mastrer password:admin
提示: Database backup error: Command `pg_dump` not found.
尝试:在odoo服务器centos上安装postgresql/pg_dump,在终端中:yum -install postgresql
安装了pg_dump执行备份结果提示:Database backup error: Postgres subprocess (‘/usr/bin/pg_dump‘, ‘--no-owner‘, ‘--file=/tmp/tmpGs8RYD/dump.sql‘, u‘gsola‘) error 1
2、odoo数据库duplicate操作:odoo数据库管理的duplicate数据库,是将所选数据库在同一个服务器上复制一份不同名称的克隆,用于测试或者联系等用途。
http://ip/web/data/manager
选择duplicate,输入密码admin,新数据库名称例如:lianxi,完成后会多出一个数据库“lianxi”共登陆或者操作室选择,表示duplicate成功。
3、odoo数据库的restore操作
http://ip/web/data/manager
选择restore
4、登陆freebsd+postgresql服务器,用pg_dump 备份,用pg_restore 恢复,这两个命令是postgresql系统自带的。备份前停止odoo服务器:
# Stop OpenERP Server
/etc/init.d/openerp-server stop
# start OpenERP Server
/etc/init.d/openerp-server start
使用tar格式备份和恢复:
pg_dump -U username -Ft TestDb1>TestDb1.tar
没有testDb2则需要先创建:createdb testDb2,或者使用-C --create选项
pg_restore -U username -c -d TestDb2 TestDb1.tar
对odoo来说需要先记住原来的数据库名和拥有者的用户名,然后删除之,再建同名同拥有者的数据库,然后恢复。或者-c --clean使用此选项,恢复对象前先删除。(此选项会出现错误提示,但是经过先备份后删除几个项目然后恢复,证明删除项正确恢复了)
5、在客户端pgAdminIII可以备份数据库
6、客户端pgAdmin带的pg_dump 备份,psql恢复,程序在pgadmin的安装目录。
备份:pg_dump -h 192.168.12.40 -U uhml gsola > e:\gsola.bak
指令解释:
pg_dump 是备份数据库指令,
192.168.12.40是数据库的ip地址(必须保证数据库允许外部访问的权限,如果是本地可以用localhost)
uhml是数据库的用户名
gsola是数据库名。
> 意思是导出到e:\gsola.bak文件里,如果没有写路径,单单写gsola.bak文件名,那么备份文件会保存在
当前目录
恢复:psql -h 192.168.12.40 -c -U uhml -d gsola < e:\gsola.bak
指令解释:
psql是恢复数据库命令
192.168.12.40 是数据库的ip地址(必须保证数据库允许外部访问的权限,如果是本地可以用localhost)
uhml是数据库的用户名
gsola是要恢复到哪个数据库
< 的意思是把e:\gsola.bak文件导入到指定的数据库里
-c --clean 选项恢复对象前先删除。
以上所有的是针对windows,在linux里依然有效。
7、
8、备份策略:多级异地异种备份
保证系统的数据的备份存在3个以上不同位置不同介质的备份
选择一个异地一个本地备份点,自动备份
移动备份/磁带备份:定期备份
9、pg_rman备份
10、barman备份
异常处理:
1、删除有活动链接的数据库:
如果数据库尚有活动连接,则drop数据库时会失败并有错误提示。
postgres=# DROP DATABASE testdb;
ERROR: database "testdb" is being accessed by other users
DETAIL: There are 3 other sessions using the database.
可以先用下面的语句把testdb的活动连接中止,然后再DROP数据库就可以了。
postgres=# SELECT pg_terminate_backend(pid)
postgres-# FROM pg_stat_activity
postgres-# WHERE datname=‘testdb‘ AND pid<>pg_backend_pid();
pg_terminate_backend
----------------------
t
t
t
(3 rows)
pg_stat_activity是一个系统视图,表中的每一行代表一个服务进程的属性和状态。
boolean pg_terminate_backend(pid int)是一个系统函数,用于终止一个后端服务进程。
int pg_backend_pid()系统函数用于获取附加到当前会话的服务器进程的ID
使用的数据库版本PostgreSQL 9.3