2016-08-24 33 views
0

我對db_backup openerp 7模塊進行了特定開發,以在版本8 Odoo上運行。備份Odoo 8 Windows erreur零大小文件

所以它是正確的安裝和它的備份 的問題是,SQL文件大小爲零KB

這是代碼backup_scheduler.py

import xmlrpclib 
import socket 
import os 
import time 
import base64 
from openerp.osv import fields,osv,orm 
from openerp import tools, netsvc 
from openerp.tools.translate import _ 
import logging 
_logger = logging.getLogger(__name__) 


def execute(connector, method, *args): 
    res = False 
    try:   
     res = getattr(connector,method)(*args) 
    except socket.error,e:   
      raise e 
    return res 

addons_path = tools.config['addons_path'] + '/auto_backup/DBbackups' 

class db_backup(osv.Model): 
    _name = 'db.backup' 

    def get_db_list(self, cr, user, ids, host='localhost', port='8069', context={}): 
     uri = 'http://' + host + ':' + port 
     conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db') 
     db_list = execute(conn, 'list') 
     return db_list 

    _columns = { 
        'host' : fields.char('Host', size=100, required='True'), 
        'port' : fields.char('Port', size=10, required='True'), 
        'name' : fields.char('Database', size=100, required='True',help='Database you want to schedule backups for'), 
        'bkp_dir' : fields.char('Backup Directory', size=100, help='Absolute path for storing the backups', required='True') 
       } 

    _defaults = { 
        'bkp_dir' : lambda *a : addons_path, 
        'host' : lambda *a : 'localhost', 
        'port' : lambda *a : '8069' 
       } 

    def _check_db_exist(self, cr, user, ids): 
     for rec in self.browse(cr,user,ids): 
      db_list = self.get_db_list(cr, user, ids, rec.host, rec.port) 
      if rec.name in db_list: 
       return True 
     return False 

    _constraints = [ 
        (_check_db_exist, _('Error ! No such database exists!'), []) 
        ] 

    def schedule_backup(self, cr, user, context={}): 
     conf_ids= self.search(cr, user, []) 
     confs = self.browse(cr,user,conf_ids) 
     for rec in confs: 
      db_list = self.get_db_list(cr, user, [], rec.host, rec.port) 
      if rec.name in db_list: 
       try: 
        if not os.path.isdir(rec.bkp_dir): 
         os.makedirs(rec.bkp_dir) 
       except: 
        raise 
       bkp_file='%s_%s.sql' % (rec.name, time.strftime('%Y%m%d_%H_%M_%S')) 
       file_path = os.path.join(rec.bkp_dir,bkp_file) 
       fp = open(file_path,'wb') 
       uri = 'http://' + rec.host + ':' + rec.port 
       conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db') 
       bkp='' 
       try: 
        bkp = execute(conn, 'dump', tools.config['admin_passwd'], rec.name) 
       except: 
        logger.notifyChannel('backup', netsvc.LOG_INFO, "Could'nt backup database %s. Bad database administrator password for server running at http://%s:%s" %(rec.name, rec.host, rec.port)) 
        continue 
       bkp = base64.decodestring(bkp) 
       fp.write(bkp) 
       fp.close() 
      else: 
       logger.notifyChannel('backup', netsvc.LOG_INFO, "database %s doesn't exist on http://%s:%s" %(rec.name, rec.host, rec.port)) 

db_backup() 

回答

0

這可能是因爲發生了錯誤在後端不會傳播回客戶端。如果您在進行備份時檢查服務器日誌,則可能會看到問題。

注意如果你需要一個腳本,用來獲取備份或恢復數據庫的V7,V8或V9服務器看看https://github.com/daramousk/odoo_remote_backup

我開發了一個腳本,這個具體的原因,你可以使用或更改以解決您的問題。