ODOO数据库的备份和还原有两种方法,一种是利用ODOO自带的自动化备份工具Database auto-backup 进行备份,并在WEB页面进行数据库还原,另一种是GB级别以上的备份方法,本文先描述第二种备份方法,然后下篇发布第一种利用ODOO自带自动化工具进行备份方法。
一、备份数据库
1.编写备份数据库shell脚本
自动化备份PG数据库,并按日期进行命名,备份完成后,将备份文件上传到远程FTP服务器。
- #!/bin/bash
- #postgesql-10 db bakup
- #shell name:auto_pg_bak.sh
- #by:moonrong
- #2021-01-06
- #定义PG数据库基本信息
- time_date="`date %Y%m%d_%H%M%S`"
- db_user="postgres"
- db_password="postgres"
- db_host="127.0.0.1"
- db_name="testdb"
- db_port="5432"
- src_dir="/opt/odoo/mybackup"
- #定义FTP服务器基本信息
- ftp_user="myodoo"
- ftp_password="myodoo"
- ftp_host="192.168.150.121"
- ftp_dir="/home/pg_bak"
- file_name="${db_name}_${time_date}.sql"
- cd "$src_dir"
- pg_dump -h "$db_host" -p "$db_port" -U "$db_user" -c -f "$file_name" "$db_name"
- find "$src_dir" -mtime 0 -exec scp {} ftp_user@"$ftp_host":"$ftp_dir" ;
2.编写定时任务
指定每天 1点45分
,将PG数据库备份,并执行相关动作。
- [root@moonyun ~]# crontab -e
- no crontab for root - using an empty one
- crontab: installing new crontab
- [root@moonyun ~]# crontab -l
- */2 * * * * /usr/sbin/ntpdate 58.220.207.226 &> /dev/null
- 45 01 * * * sh /bin/auto_pg_bak.sh &> /dev/null
- [root@moonyun ~]# cd
二、恢复数据库
1.登录数据库
- [root@mytest mybackup]# psql -h 127.0.0.1 -U postgres
- psql (10.14)
- 输入 "help" 来获取帮助信息.
- postgres=#
2.psql命令行创建数据库
在还原数据库之前,先创建一个testdb2的数据库,校对规则指定为C。
- postgres=# create database testdb2 with encoding 'UTF8'
- postgres-# template template0
- postgres-# owner=odoo
- postgres-# lc_collate='C'
- postgres-# lc_ctype='zh_CN.UTF-8';
- CREATE DATABASE
- postgres=#
3.查看创建结果
- postgres=# l
- 数据库列表
- 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限
- -------------- ---------- ---------- ------------- ------------- -----------------------
- tqdb2021 | odoo | UTF8 | C | zh_CN.UTF-8 |
- b_tqdb3 | odoo | UTF8 | C | zh_CN.UTF-8 |
- tqdb20201108 | odoo | UTF8 | C | zh_CN.UTF-8 |
- postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
- template0 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres
- | | | | | postgres=CTc/postgres
- template1 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres
- | | | | | postgres=CTc/postgres
- testdb2 | odoo | UTF8 | C | zh_CN.UTF-8 |
- (7 行记录)
- postgres=#
4.检查备份文件
- [root@mytest backups]# ll -h
- 总用量 230M
- -rw-r--r-- 1 root root 230M 1月 8 01:45 testdb_20210108_014501.sql
- [root@mytest backups]#
5.停掉odoo12服务
- [root@mytest backups]# systemctl stop odoo12
6.导入sql文件
将上面的testdb20210108014501.sql数据库文件导入到testdb2
- [root@mytest backups]# psql -d testdb2 -U odoo <test1214_20210108_014501.sql
7.重启odoo服务
- [root@mytest backups]# systemctl start odoo12
8.处理2个问题
用数据库管理工具清除登录样式表丢失的问题
- DELETE FROM ir_attachment WHERE url LIKE '/web/content/%';
然后再处理模块图标丢失的问题。
注:上面只是测试,数据库恢复自动化脚本以后再更新吧。