]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/cats/make_mysql_tables.in
This commit was manufactured by cvs2svn to create tag
[bacula/bacula] / bacula / src / cats / make_mysql_tables.in
1 #!/bin/sh
2 #
3 # shell script to create Bacula MySQL tables
4 #
5 bindir=@SQL_BINDIR@
6
7 if $bindir/mysql $* -f <<END-OF-DATA
8 USE bacula;
9 --
10 -- Note, we use BLOB rather than TEXT because in MySQL,
11 --  BLOBs are identical to TEXT except that BLOB is case
12 --  sensitive in sorts, which is what we want, and TEXT
13 --  is case insensitive.
14 --
15 CREATE TABLE Filename (
16   FilenameId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
17   Name BLOB NOT NULL,
18   PRIMARY KEY(FilenameId),
19   INDEX (Name(255))
20   );
21
22 CREATE TABLE Path (
23    PathId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
24    Path BLOB NOT NULL,
25    PRIMARY KEY(PathId),
26    INDEX (Path(255))
27    );
28
29
30 CREATE TABLE File (
31    FileId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
32    FileIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
33    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
34    PathId INTEGER UNSIGNED NOT NULL REFERENCES Path,
35    FilenameId INTEGER UNSIGNED NOT NULL REFERENCES Filename,
36    MarkId INTEGER UNSIGNED NOT NULL DEFAULT 0,
37    LStat TINYBLOB NOT NULL,
38    MD5 TINYBLOB NOT NULL,
39    PRIMARY KEY(FileId),
40    INDEX (JobId),
41    INDEX (JobId, PathId, FilenameId)
42    );
43
44 #
45 # Possibly add one or more of the following indexes
46 #  to the above File table if your Verifies are
47 #  too slow.
48 #
49 #  INDEX (PathId),
50 #  INDEX (FilenameId),
51 #  INDEX (FilenameId, PathId)
52 #  INDEX (JobId),
53 #
54
55 CREATE TABLE MediaType (
56    MediaTypeId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
57    MediaType TINYBLOB NOT NULL,
58    ReadOnly TINYINT DEFAULT 0,
59    PRIMARY KEY(MediaTypeId)
60    );
61
62 CREATE TABLE Storage (
63    StorageId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
64    Name TINYBLOB NOT NULL,
65    AutoChanger TINYINT DEFAULT 0,
66    PRIMARY KEY(StorageId)
67    );
68
69 CREATE TABLE Device (
70    DeviceId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
71    Name TINYBLOB NOT NULL,
72    MediaTypeId INTEGER UNSIGNED NOT NULL REFERENCES MediaType,
73    StorageId INTEGER UNSIGNED NOT NULL REFERENCES Storage,
74    DevMounts INTEGER UNSIGNED DEFAULT 0,
75    DevReadBytes BIGINT UNSIGNED DEFAULT 0,
76    DevWriteBytes BIGINT UNSIGNED DEFAULT 0,
77    DevReadBytesSinceCleaning BIGINT UNSIGNED DEFAULT 0,
78    DevWriteBytesSinceCleaning BIGINT UNSIGNED DEFAULT 0,
79    DevReadTime BIGINT UNSIGNED DEFAULT 0,
80    DevWriteTime BIGINT UNSIGNED DEFAULT 0,
81    DevReadTimeSinceCleaning BIGINT UNSIGNED DEFAULT 0,
82    DevWriteTimeSinceCleaning BIGINT UNSIGNED DEFAULT 0,
83    CleaningDate DATETIME DEFAULT 0,
84    CleaningPeriod BIGINT UNSIGNED DEFAULT 0,
85    PRIMARY KEY(DeviceId)
86    );
87
88
89 CREATE TABLE Job (
90    JobId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
91    Job TINYBLOB NOT NULL,
92    Name TINYBLOB NOT NULL,
93    Type BINARY(1) NOT NULL,
94    Level BINARY(1) NOT NULL,
95    ClientId INTEGER NOT NULL REFERENCES Client,
96    JobStatus BINARY(1) NOT NULL,
97    SchedTime DATETIME NOT NULL,
98    StartTime DATETIME NOT NULL,
99    EndTime DATETIME NOT NULL,
100    JobTDate BIGINT UNSIGNED NOT NULL,
101    VolSessionId INTEGER UNSIGNED NOT NULL DEFAULT 0,
102    VolSessionTime INTEGER UNSIGNED NOT NULL DEFAULT 0,
103    JobFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
104    JobBytes BIGINT UNSIGNED NOT NULL,
105    JobErrors INTEGER UNSIGNED NOT NULL DEFAULT 0,
106    JobMissingFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
107    PoolId INTEGER UNSIGNED NOT NULL REFERENCES Pool,
108    FileSetId INTEGER UNSIGNED NOT NULL REFERENCES FileSet,
109    PurgedFiles TINYINT NOT NULL DEFAULT 0,
110    HasBase TINYINT NOT NULL DEFAULT 0,
111    PRIMARY KEY(JobId),
112    INDEX (Name(128))
113    );
114
115
116 CREATE TABLE FileSet (
117    FileSetId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
118    FileSet TINYBLOB NOT NULL,
119    MD5 TINYBLOB NOT NULL,
120    CreateTime DATETIME NOT NULL,
121    PRIMARY KEY(FileSetId)
122    );
123
124 CREATE TABLE JobMedia (
125    JobMediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
126    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
127    MediaId INTEGER UNSIGNED NOT NULL REFERENCES Media,
128    FirstIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
129    LastIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
130    StartFile INTEGER UNSIGNED NOT NULL DEFAULT 0,
131    EndFile INTEGER UNSIGNED NOT NULL DEFAULT 0,
132    StartBlock INTEGER UNSIGNED NOT NULL DEFAULT 0,
133    EndBlock INTEGER UNSIGNED NOT NULL DEFAULT 0,
134    VolIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
135    Copy INTEGER UNSIGNED NOT NULL DEFAULT 0,
136    Stripe INTEGER UNSIGNED NOT NULL DEFAULT 0,
137    PRIMARY KEY(JobMediaId),
138    INDEX (JobId, MediaId)
139    );
140
141
142 CREATE TABLE Media (
143    MediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
144    VolumeName TINYBLOB NOT NULL,
145    Slot INTEGER NOT NULL DEFAULT 0,
146    PoolId INTEGER UNSIGNED NOT NULL REFERENCES Pool,
147    MediaType TINYBLOB NOT NULL,
148    LabelType TINYINT NOT NULL DEFAULT 0,
149    FirstWritten DATETIME NOT NULL,
150    LastWritten DATETIME NOT NULL,
151    LabelDate DATETIME NOT NULL,
152    VolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0,
153    VolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
154    VolBlocks INTEGER UNSIGNED NOT NULL DEFAULT 0,
155    VolMounts INTEGER UNSIGNED NOT NULL DEFAULT 0,
156    VolBytes BIGINT UNSIGNED NOT NULL DEFAULT 0,
157    VolParts INTEGER UNSIGNED NOT NULL DEFAULT 0,
158    VolErrors INTEGER UNSIGNED NOT NULL DEFAULT 0,
159    VolWrites INTEGER UNSIGNED NOT NULL DEFAULT 0,
160    VolCapacityBytes BIGINT UNSIGNED NOT NULL,
161    VolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged',
162     'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL,
163    Recycle TINYINT NOT NULL DEFAULT 0,
164    VolRetention BIGINT UNSIGNED NOT NULL DEFAULT 0,
165    VolUseDuration BIGINT UNSIGNED NOT NULL DEFAULT 0,
166    MaxVolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0,
167    MaxVolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
168    MaxVolBytes BIGINT UNSIGNED NOT NULL DEFAULT 0,
169    InChanger TINYINT NOT NULL DEFAULT 0,
170    StorageId INTEGER UNSIGNED NOT NULL REFERENCES Storage,
171    MediaAddressing TINYINT NOT NULL DEFAULT 0,
172    VolReadTime BIGINT UNSIGNED NOT NULL DEFAULT 0,
173    VolWriteTime BIGINT UNSIGNED NOT NULL DEFAULT 0,
174    EndFile INTEGER UNSIGNED NOT NULL DEFAULT 0,
175    EndBlock INTEGER UNSIGNED NOT NULL DEFAULT 0,
176    PRIMARY KEY(MediaId),
177    INDEX (PoolId)
178    );
179
180 CREATE INDEX inx8 ON Media (PoolId);
181
182
183
184 CREATE TABLE Pool (
185    PoolId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
186    Name TINYBLOB NOT NULL,
187    NumVols INTEGER UNSIGNED NOT NULL DEFAULT 0,
188    MaxVols INTEGER UNSIGNED NOT NULL DEFAULT 0,
189    UseOnce TINYINT NOT NULL,
190    UseCatalog TINYINT NOT NULL,
191    AcceptAnyVolume TINYINT DEFAULT 0,
192    VolRetention BIGINT UNSIGNED NOT NULL,
193    VolUseDuration BIGINT UNSIGNED NOT NULL,
194    MaxVolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0,
195    MaxVolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
196    MaxVolBytes BIGINT UNSIGNED NOT NULL,
197    AutoPrune TINYINT DEFAULT 0,
198    Recycle TINYINT DEFAULT 0,
199    PoolType ENUM('Backup', 'Copy', 'Cloned', 'Archive', 'Migration', 'Scratch') NOT NULL,
200    LabelType TINYINT NOT NULL DEFAULT 0,
201    LabelFormat TINYBLOB,
202    Enabled TINYINT DEFAULT 1,
203    ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
204    RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
205    NextPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
206    MigrationHighBytes BIGINT UNSIGNED DEFAULT 0,
207    MigrationLowBytes BIGINT UNSIGNED DEFAULT 0,
208    MigrationTime BIGINT UNSIGNED DEFAULT 0,
209    UNIQUE (Name(128)),
210    PRIMARY KEY (PoolId)
211    );
212
213
214 CREATE TABLE Client (
215    ClientId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
216    Name TINYBLOB NOT NULL,
217    Uname TINYBLOB NOT NULL,       /* full uname -a of client */
218    AutoPrune TINYINT DEFAULT 0,
219    FileRetention BIGINT UNSIGNED NOT NULL,
220    JobRetention  BIGINT UNSIGNED NOT NULL,
221    UNIQUE (Name(128)),
222    PRIMARY KEY(ClientId)
223    );
224
225 CREATE TABLE BaseFiles (
226    BaseId INTEGER UNSIGNED AUTO_INCREMENT,
227    BaseJobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
228    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
229    FileId INTEGER UNSIGNED NOT NULL REFERENCES File,
230    FileIndex INTEGER UNSIGNED,
231    PRIMARY KEY(BaseId)
232    );
233
234 CREATE TABLE UnsavedFiles (
235    UnsavedId INTEGER UNSIGNED AUTO_INCREMENT,
236    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
237    PathId INTEGER UNSIGNED NOT NULL REFERENCES Path,
238    FilenameId INTEGER UNSIGNED NOT NULL REFERENCES Filename,
239    PRIMARY KEY (UnsavedId)
240    );
241
242
243
244 CREATE TABLE Counters (
245    Counter TINYBLOB NOT NULL,
246    MinValue INTEGER,
247    MaxValue INTEGER,
248    CurrentValue INTEGER,
249    WrapCounter TINYBLOB NOT NULL,
250    PRIMARY KEY (Counter(128))
251    );
252
253 CREATE TABLE CDImages (
254    MediaId INTEGER UNSIGNED NOT NULL,
255    LastBurn DATETIME NOT NULL,
256    PRIMARY KEY (MediaId)
257    );
258
259 CREATE TABLE Status (
260    JobStatus CHAR(1) BINARY NOT NULL,
261    JobStatusLong BLOB, 
262    PRIMARY KEY (JobStatus)
263    );
264
265 INSERT INTO Status (JobStatus,JobStatusLong) VALUES
266    ('C', 'Created, not yet running'),
267    ('R', 'Running'),
268    ('B', 'Blocked'),
269    ('T', 'Completed successfully'),
270    ('E', 'Terminated with errors'),
271    ('e', 'Non-fatal error'),
272    ('f', 'Fatal error'),
273    ('D', 'Verify found differences'),
274    ('A', 'Canceled by user'),
275    ('F', 'Waiting for Client'),
276    ('S', 'Waiting for Storage daemon'),
277    ('m', 'Waiting for new media'),
278    ('M', 'Waiting for media mount'),
279    ('s', 'Waiting for storage resource'),
280    ('j', 'Waiting for job resource'),
281    ('c', 'Waiting for client resource'),
282    ('d', 'Waiting on maximum jobs'),
283    ('t', 'Waiting on start time'),
284    ('p', 'Waiting on higher priority jobs');
285
286 CREATE TABLE Version (
287    VersionId INTEGER UNSIGNED NOT NULL 
288    );
289
290 -- Initialize Version            
291 INSERT INTO Version (VersionId) VALUES (9);
292
293 END-OF-DATA
294 then
295    echo "Creation of Bacula MySQL tables succeeded."
296 else
297    echo "Creation of Bacula MySQL tables failed."
298 fi
299 exit 0