]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/cats/update_mysql_tables.in
08df0d88b305876e4155ff3ec357db9ab25f1b40
[bacula/bacula] / bacula / src / cats / update_mysql_tables.in
1 #!/bin/sh
2 #
3 # Copyright (C) 2000-2015 Kern Sibbald
4 # License: BSD 2-Clause; see file LICENSE-FOSS
5 #
6 # Shell script to update MySQL tables from Bacula Community version 
7 #  5.0.x, 5.2.x, 7.0.x
8 #
9 echo " "
10 echo "This script will update a Bacula MySQL database from version 12-14 to 15"
11 echo " "
12 echo "Depending on the current version of your catalog,"
13 echo "you may have to run this script multiple times."
14 echo " "
15
16 bindir=@MYSQL_BINDIR@
17 PATH="$bindir:$PATH"
18 db_name=@db_name@
19
20 ARGS=$*
21
22 getVersion()
23 {
24     mysql $ARGS -D ${db_name} -e "select VersionId from Version LIMIT 1\G" >/tmp/$$
25     DBVERSION=`sed -n -e 's/^VersionId: \(.*\)$/\1/p' /tmp/$$`
26 }
27
28 getVersion
29
30 if [ "x$DBVERSION" = x ]; then
31     echo
32     echo "Unable to detect database version, you can specify connection information"
33     echo "on the command line."
34     echo "Error. Cannot upgrade this database."
35     exit 1
36 fi
37
38 if [ "$DBVERSION" -lt 12 -o "$DBVERSION" -gt 14 ] ; then
39     echo " "
40     echo "The existing database is version $DBVERSION !!"
41     echo "This script can only update an existing version 12-14 version 15."
42     echo "Error. Cannot upgrade this database."
43     echo " "
44     exit 1
45 fi
46
47 # For all versions, we need to create the Index on Media(StorageId)
48 # It may fail, but it's not a big problem
49 # mysql $* -f <<END-OF-DATA >/dev/null 2> /dev/null
50 # CREATE INDEX media_storageid_idx ON Media (StorageId);
51 # END-OF-DATA
52
53 if [ "$DBVERSION" -eq 12 ] ; then
54     if mysql $* -f <<END-OF-DATA
55 USE ${db_name};
56
57 CREATE TABLE RestoreObject (
58    RestoreObjectId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
59    ObjectName BLOB NOT NULL,
60    RestoreObject LONGBLOB NOT NULL,
61    PluginName TINYBLOB NOT NULL,
62    ObjectLength INTEGER DEFAULT 0,
63    ObjectFullLength INTEGER DEFAULT 0,
64    ObjectIndex INTEGER DEFAULT 0,
65    ObjectType INTEGER DEFAULT 0,
66    FileIndex INTEGER UNSIGNED DEFAULT 0,
67    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
68    ObjectCompression INTEGER DEFAULT 0,
69    PRIMARY KEY(RestoreObjectId),
70    INDEX (JobId)
71 );
72
73 CREATE INDEX jobhisto_jobid_idx ON JobHisto (JobId);
74 UPDATE Version SET VersionId=13;
75
76 END-OF-DATA
77     then
78         echo "Update of Bacula MySQL tables from 12 to 13 succeeded."
79         getVersion
80     else
81         echo "Update of Bacula MySQL tables from 12 to 13 failed."
82         exit 1
83     fi
84 fi
85
86 if [ "$DBVERSION" -eq 13 ] ; then
87     if mysql $* -f <<END-OF-DATA
88 USE ${db_name};
89
90 ALTER TABLE File ADD COLUMN DeltaSeq smallint default 0;
91 UPDATE Version SET VersionId=14;
92
93 END-OF-DATA
94     then
95         echo "Update of Bacula MySQL tables from 13 to 14 succeeded."
96         getVersion
97     else
98         echo "Update of Bacula MySQL tables from 13 to 14 failed."
99         exit 1
100     fi
101 fi
102
103 if [ "$DBVERSION" -eq 14 ] ; then
104     if mysql $* -f <<END-OF-DATA
105 USE ${db_name};
106
107 INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
108    ('I', 'Incomplete Job',25);
109 ALTER TABLE Media ADD COLUMN VolABytes BIGINT UNSIGNED DEFAULT 0;
110 ALTER TABLE Media ADD COLUMN VolAPadding BIGINT UNSIGNED DEFAULT 0;
111 ALTER TABLE Media ADD COLUMN VolHoleBytes BIGINT UNSIGNED DEFAULT 0;
112 ALTER TABLE Media ADD COLUMN VolHoles INTEGER UNSIGNED DEFAULT 0;
113 ALTER TABLE Media CHANGE VolWrites VolWrites BIGINT UNSIGNED;
114
115 CREATE TABLE Snapshot (
116   SnapshotId      INTEGER UNSIGNED AUTO_INCREMENT,
117   Name            TINYBLOB NOT NULL,
118   JobId           INTEGER UNSIGNED DEFAULT 0,
119   FileSetId       INTEGER UNSIGNED DEFAULT 0,
120   CreateTDate     BIGINT   NOT NULL,
121   CreateDate      DATETIME NOT NULL,
122   ClientId        INTEGER UNSIGNED DEFAULT 0,
123   Volume          TINYBLOB NOT NULL,
124   Device          TINYBLOB NOT NULL,
125   Type            TINYBLOB NOT NULL,
126   Retention       INTEGER DEFAULT 0,
127   Comment         BLOB,
128   primary key (SnapshotId)
129 );
130
131 CREATE UNIQUE INDEX snapshot_idx ON Snapshot (Device(255), Volume(255), Name(255));
132
133 CREATE INDEX jobtdate_idx on JobHisto (JobTDate);
134
135 UPDATE Version SET VersionId=15;
136 END-OF-DATA
137     then
138         echo "Update of Bacula MySQL tables from 14 to 15 succeeded."
139         getVersion
140     else
141         echo "Update of Bacula MySQL tables from 14 to 15 failed."
142         exit 1
143     fi
144 fi
145
146 exit 0