]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/cats/make_mysql_tables.in
- Update some very old licenses in src/cats.
[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    RealEndTime DATETIME NOT NULL,
101    JobTDate BIGINT UNSIGNED NOT NULL,
102    VolSessionId INTEGER UNSIGNED NOT NULL DEFAULT 0,
103    VolSessionTime INTEGER UNSIGNED NOT NULL DEFAULT 0,
104    JobFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
105    JobBytes BIGINT UNSIGNED NOT NULL,
106    JobErrors INTEGER UNSIGNED NOT NULL DEFAULT 0,
107    JobMissingFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
108    PoolId INTEGER UNSIGNED NOT NULL REFERENCES Pool,
109    FileSetId INTEGER UNSIGNED NOT NULL REFERENCES FileSet,
110    PriorJobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job,
111    PurgedFiles TINYINT NOT NULL DEFAULT 0,
112    HasBase TINYINT NOT NULL DEFAULT 0,
113    PRIMARY KEY(JobId),
114    INDEX (Name(128))
115    );
116
117
118 CREATE TABLE Location (
119    LocationId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
120    Location TINYBLOB NOT NULL,
121    Cost INTEGER NOT NULL DEFAULT 0,
122    PRIMARY KEY(LocationId)
123    );
124
125
126 CREATE TABLE FileSet (
127    FileSetId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
128    FileSet TINYBLOB NOT NULL,
129    MD5 TINYBLOB NOT NULL,
130    CreateTime DATETIME NOT NULL,
131    PRIMARY KEY(FileSetId)
132    );
133
134 CREATE TABLE JobMedia (
135    JobMediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
136    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
137    MediaId INTEGER UNSIGNED NOT NULL REFERENCES Media,
138    FirstIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
139    LastIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
140    StartFile INTEGER UNSIGNED NOT NULL DEFAULT 0,
141    EndFile INTEGER UNSIGNED NOT NULL DEFAULT 0,
142    StartBlock INTEGER UNSIGNED NOT NULL DEFAULT 0,
143    EndBlock INTEGER UNSIGNED NOT NULL DEFAULT 0,
144    VolIndex INTEGER UNSIGNED NOT NULL DEFAULT 0,
145    Copy INTEGER UNSIGNED NOT NULL DEFAULT 0,
146    Stripe INTEGER UNSIGNED NOT NULL DEFAULT 0,
147    PRIMARY KEY(JobMediaId),
148    INDEX (JobId, MediaId)
149    );
150
151
152 CREATE TABLE Media (
153    MediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
154    VolumeName TINYBLOB NOT NULL,
155    Slot INTEGER NOT NULL DEFAULT 0,
156    PoolId INTEGER UNSIGNED NOT NULL REFERENCES Pool,
157    MediaType TINYBLOB NOT NULL,
158    MediaTypeId INTEGER UNSIGNED NOT NULL REFERENCES MediaType,
159    LabelType TINYINT NOT NULL DEFAULT 0,
160    FirstWritten DATETIME NOT NULL,
161    LastWritten DATETIME NOT NULL,
162    LabelDate DATETIME NOT NULL,
163    VolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0,
164    VolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
165    VolBlocks INTEGER UNSIGNED NOT NULL DEFAULT 0,
166    VolMounts INTEGER UNSIGNED NOT NULL DEFAULT 0,
167    VolBytes BIGINT UNSIGNED NOT NULL DEFAULT 0,
168    VolParts INTEGER UNSIGNED NOT NULL DEFAULT 0,
169    VolErrors INTEGER UNSIGNED NOT NULL DEFAULT 0,
170    VolWrites INTEGER UNSIGNED NOT NULL DEFAULT 0,
171    VolCapacityBytes BIGINT UNSIGNED NOT NULL,
172    VolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged',
173     'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL,
174    Enabled TINYINT DEFAULT 1,
175    Recycle TINYINT NOT NULL DEFAULT 0,
176    VolRetention BIGINT UNSIGNED NOT NULL DEFAULT 0,
177    VolUseDuration BIGINT UNSIGNED NOT NULL DEFAULT 0,
178    MaxVolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0,
179    MaxVolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
180    MaxVolBytes BIGINT UNSIGNED NOT NULL DEFAULT 0,
181    InChanger TINYINT NOT NULL DEFAULT 0,
182    StorageId INTEGER UNSIGNED DEFAULT 0 REFERENCES Storage,
183    DeviceId INTEGER UNSIGNED DEFAULT 0 REFERENCES Device,
184    MediaAddressing TINYINT NOT NULL DEFAULT 0,
185    VolReadTime BIGINT UNSIGNED NOT NULL DEFAULT 0,
186    VolWriteTime BIGINT UNSIGNED NOT NULL DEFAULT 0,
187    EndFile INTEGER UNSIGNED NOT NULL DEFAULT 0,
188    EndBlock INTEGER UNSIGNED NOT NULL DEFAULT 0,
189    LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location,
190    RecycleCount INTEGER UNSIGNED DEFAULT 0,
191    InitialWrite DATETIME NOT NULL,
192    ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
193    RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
194    PRIMARY KEY(MediaId),
195    INDEX (PoolId)
196    );
197
198 CREATE INDEX inx8 ON Media (PoolId);
199
200
201
202 CREATE TABLE Pool (
203    PoolId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
204    Name TINYBLOB NOT NULL,
205    NumVols INTEGER UNSIGNED NOT NULL DEFAULT 0,
206    MaxVols INTEGER UNSIGNED NOT NULL DEFAULT 0,
207    UseOnce TINYINT NOT NULL,
208    UseCatalog TINYINT NOT NULL,
209    AcceptAnyVolume TINYINT DEFAULT 0,
210    VolRetention BIGINT UNSIGNED NOT NULL,
211    VolUseDuration BIGINT UNSIGNED NOT NULL,
212    MaxVolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0,
213    MaxVolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0,
214    MaxVolBytes BIGINT UNSIGNED NOT NULL,
215    AutoPrune TINYINT DEFAULT 0,
216    Recycle TINYINT DEFAULT 0,
217    PoolType ENUM('Backup', 'Copy', 'Cloned', 'Archive', 'Migration', 'Scratch') NOT NULL,
218    LabelType TINYINT NOT NULL DEFAULT 0,
219    LabelFormat TINYBLOB,
220    Enabled TINYINT DEFAULT 1,
221    ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
222    RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
223    NextPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool,
224    MigrationHighBytes BIGINT UNSIGNED DEFAULT 0,
225    MigrationLowBytes BIGINT UNSIGNED DEFAULT 0,
226    MigrationTime BIGINT UNSIGNED DEFAULT 0,
227    UNIQUE (Name(128)),
228    PRIMARY KEY (PoolId)
229    );
230
231
232 CREATE TABLE Client (
233    ClientId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
234    Name TINYBLOB NOT NULL,
235    Uname TINYBLOB NOT NULL,       /* full uname -a of client */
236    AutoPrune TINYINT DEFAULT 0,
237    FileRetention BIGINT UNSIGNED NOT NULL,
238    JobRetention  BIGINT UNSIGNED NOT NULL,
239    UNIQUE (Name(128)),
240    PRIMARY KEY(ClientId)
241    );
242
243 CREATE TABLE BaseFiles (
244    BaseId INTEGER UNSIGNED AUTO_INCREMENT,
245    BaseJobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
246    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
247    FileId INTEGER UNSIGNED NOT NULL REFERENCES File,
248    FileIndex INTEGER UNSIGNED,
249    PRIMARY KEY(BaseId)
250    );
251
252 CREATE TABLE UnsavedFiles (
253    UnsavedId INTEGER UNSIGNED AUTO_INCREMENT,
254    JobId INTEGER UNSIGNED NOT NULL REFERENCES Job,
255    PathId INTEGER UNSIGNED NOT NULL REFERENCES Path,
256    FilenameId INTEGER UNSIGNED NOT NULL REFERENCES Filename,
257    PRIMARY KEY (UnsavedId)
258    );
259
260
261
262 CREATE TABLE Counters (
263    Counter TINYBLOB NOT NULL,
264    MinValue INTEGER,
265    MaxValue INTEGER,
266    CurrentValue INTEGER,
267    WrapCounter TINYBLOB NOT NULL,
268    PRIMARY KEY (Counter(128))
269    );
270
271 CREATE TABLE CDImages (
272    MediaId INTEGER UNSIGNED NOT NULL,
273    LastBurn DATETIME NOT NULL,
274    PRIMARY KEY (MediaId)
275    );
276
277 CREATE TABLE Status (
278    JobStatus CHAR(1) BINARY NOT NULL,
279    JobStatusLong BLOB, 
280    PRIMARY KEY (JobStatus)
281    );
282
283 INSERT INTO Status (JobStatus,JobStatusLong) VALUES
284    ('C', 'Created, not yet running'),
285    ('R', 'Running'),
286    ('B', 'Blocked'),
287    ('T', 'Completed successfully'),
288    ('E', 'Terminated with errors'),
289    ('e', 'Non-fatal error'),
290    ('f', 'Fatal error'),
291    ('D', 'Verify found differences'),
292    ('A', 'Canceled by user'),
293    ('F', 'Waiting for Client'),
294    ('S', 'Waiting for Storage daemon'),
295    ('m', 'Waiting for new media'),
296    ('M', 'Waiting for media mount'),
297    ('s', 'Waiting for storage resource'),
298    ('j', 'Waiting for job resource'),
299    ('c', 'Waiting for client resource'),
300    ('d', 'Waiting on maximum jobs'),
301    ('t', 'Waiting on start time'),
302    ('p', 'Waiting on higher priority jobs');
303
304 CREATE TABLE Version (
305    VersionId INTEGER UNSIGNED NOT NULL 
306    );
307
308 -- Initialize Version            
309 INSERT INTO Version (VersionId) VALUES (9);
310
311 END-OF-DATA
312 then
313    echo "Creation of Bacula MySQL tables succeeded."
314 else
315    echo "Creation of Bacula MySQL tables failed."
316 fi
317 exit 0