source: n4d-mysql/trunk/fuentes/install-files/usr/share/n4d/python-plugins/MysqlManager.py

Last change on this file was 5235, checked in by Juanma, 2 years ago

Change field "version" in Pmb tables according to the version of the backup

File size: 3.4 KB
Line 
1
2import tempfile
3import shutil
4import os
5import subprocess
6import time
7
8class MysqlManager:
9       
10       
11        def __init__(self):
12               
13                pass
14               
15        #def init
16       
17        def get_time(self):
18               
19                return get_backup_name("MysqlManager")
20               
21        #def get_time
22       
23       
24        def backup(self,dir="/backup/"):
25               
26                try:
27               
28                        file_path=dir+"/"+self.get_time()
29                        tmp_dir=tempfile.mkdtemp()
30                       
31                        ret=os.system("mysql_root_passwd -g")
32                       
33                        if ret!=0:
34                                os.system("mysql_root_passwd -i")
35                       
36                        cmd="mysqldump -u root -p$(mysql_root_passwd -g) --routines --all-databases --flush-privileges > %s/backup.sql"%(tmp_dir)
37                        os.system(cmd)
38                       
39                        if os.path.exists(tmp_dir+"/backup.sql"):
40                                tar=tarfile.open(file_path,"w:gz")
41                                tar.add(tmp_dir+"/backup.sql",arcname="backup.sql")
42                                if os.path.exists("/root/.my.cnf"):
43                                        tar.add("/root/.my.cnf",arcname="my.cnf")
44                                tar.close()
45                               
46                                os.system("chmod 600 %s"%file_path)
47                               
48                                return [True,file_path]
49                       
50                except Exception as e:
51                        return [False,str(e)]
52                       
53                return [False,"Mysqldump failed"]
54               
55        #def test
56       
57        def restore(self,file_path=None):
58
59                if file_path==None:
60                        for f in sorted(os.listdir("/backup"),reverse=True):
61                                if "MysqlManager" in f:
62                                        file_path="/backup/"+f
63                                        break
64
65                if file_path==None:
66                        return [False,"No backup file found"]
67                       
68                try:
69
70                        if os.path.exists(file_path):
71                               
72                                tmp_dir=tempfile.mkdtemp()
73                                tar=tarfile.open(file_path,"r")
74                                tar.extractall(tmp_dir)
75                                tar.close()
76                                #os.system("chmod 600 %s"%file_path)
77                               
78                                if os.path.exists(tmp_dir+"/my.cnf"):
79                                        shutil.copy(tmp_dir+"/my.cnf","/root/.my.cnf")
80                                        os.system("chmod 600 /root/.my.cnf")
81                                        os.system("mysql_root_passwd -i")
82                                       
83                                if os.path.exists(tmp_dir+"/backup.sql"):
84                                        cmd="mysql -u root -p$(mysql_root_passwd -g) < %s"%(tmp_dir+"/backup.sql")
85                                        os.system(cmd)
86                                       
87                                #Upgrade db if backup is from version <=5.5 (Trusty)
88                                version=objects["ServerBackupManager"].restoring_version
89                                majorBackupVersion=int(version[0:version.find('.')])
90                                if majorBackupVersion<=15:
91                                        print "Upgrading from an ancient version..."
92                                        cmd="mysql_upgrade -p$(mysql_root_passwd -g)"
93                                        os.system(cmd)
94
95                                #Fix pwd for moodle and pmb
96                                apps=['lliurex-moodle','lliurex-pmb']
97                                for app in apps:
98                                        cmd='lliurex-sgbd --upgrade '+app
99                                        os.system(cmd)
100                               
101                                #Fix for pmb imports
102                                self.change_pmb_version()
103
104                                return [True,""]
105                               
106                except Exception as e:
107                        print e
108                        return [False,file_path + ": " + str(e)]
109               
110        #def test
111
112        def change_pmb_version(self):
113
114                mysql_command='mysql -uroot -p$(sudo mysql_root_passwd -g) -e '
115                #Get bdd_version value from parametres table
116                sql='"select valeur_param from pmb.parametres where type_param=\'pmb\' and sstype_param=\'bdd_version\'"'
117                cmd=mysql_command + sql
118                p=subprocess.check_output(cmd,shell=True)
119                version=p.split("\n")[1]
120               
121                if version=="v4.47":
122                        sql='"update pmb.parametres set valeur_param=\'vLlxNemo\' where type_param=\'pmb\' and sstype_param=\'bdd_version\'"'
123                        cmd=mysql_command + sql
124                        os.system(cmd)
125                elif    version=="v5.10":
126                        sql='"update pmb.parametres set valeur_param=\'vLlxPandora\' where type_param=\'pmb\' and sstype_param=\'bdd_version\'"'
127                        cmd=mysql_command + sql
128                        os.system(cmd)
129       
130                elif version=="v5.14":
131                        sql='"update pmb.parametres set valeur_param=\'vLlxTrusty\' where type_param=\'pmb\' and sstype_param=\'bdd_version\'"'
132                        cmd=mysql_command + sql
133                        os.system(cmd)
134
135        #def change_pmb_version
136       
137#class CupsManager
138
139if __name__=="__main__":
140       
141        m=MysqlManager()
142               
143        m.backup()
144
145       
146
Note: See TracBrowser for help on using the repository browser.