1#!/bin/sh
2#
3# shell script to create Bacula MySQL tables
4#
5# Copyright (C) 2000-2020 Kern Sibbald
6# License: BSD 2-Clause; see file LICENSE-FOSS
7#
8# Important note:
9#   We cannot provide support for performance issues
10#    if you changed the default schema.  In partcular
11#    if you change any of the indexes.
12#
13# Useful commands:
14#   mysql -u root
15#   show databases;
16#   show tables from <database>;
17#   show columns from <table> from <database>;
18#
19#   use mysql;
20#   select user from user;
21#
22bindir=@MYSQL_BINDIR@
23PATH="$bindir:$PATH"
24db_name=${db_name:-@db_name@}
25
26if mysql $* -f <<END-OF-DATA
27USE ${db_name};
28--
29-- Note, we use BLOB rather than TEXT because in MySQL,
30--  BLOBs are identical to TEXT except that BLOB is case
31--  sensitive in sorts, which is what we want, and TEXT
32--  is case insensitive.
33--
34
35CREATE TABLE TagJob
36(
37   JobId INTEGER UNSIGNED not null,
38   Tag   TINYBLOB    not null,
39   primary key (JobId, Tag(255))
40);
41
42CREATE TABLE TagClient
43(
44   ClientId INTEGER UNSIGNED not null,
45   Tag      TINYBLOB    not null,
46   primary key (ClientId, Tag(255))
47);
48
49CREATE TABLE TagMedia
50(
51   MediaId INTEGER UNSIGNED not null,
52   Tag      TINYBLOB   not null,
53   primary key (MediaId, Tag(255))
54);
55
56CREATE TABLE TagObject
57(
58   ObjectId INTEGER UNSIGNED not null,
59   Tag      TINYBLOB    not null,
60   primary key (ObjectId, Tag(255))
61);
62
63CREATE TABLE Object
64(
65   ObjectId     BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
66
67   JobId        INTEGER UNSIGNED  not null,
68   Path         BLOB NOT NULL,
69   Filename     BLOB NOT NULL,
70   PluginName   TINYBLOB NOT NULL,
71
72   ObjectType   TINYBLOB     NOT NULL,
73   ObjectName   TINYBLOB     NOT NULL,
74   ObjectSource TINYBLOB     NOT NULL,
75   ObjectUUID   TINYBLOB     NOT NULL,
76   ObjectSize   bigint       NOT NULL,
77   primary key (ObjectId)
78);
79
80create index object_jobid_idx on Object (JobId);
81create index object_type_idx on Object  (ObjectType(255));
82create index object_name_idx on Object  (ObjectName(255));
83create index object_source_idx on Object  (ObjectSource(255));
84
85CREATE TABLE Events
86(
87    EventsId          BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
88    EventsCode        TINYBLOB NOT NULL,
89    EventsType        TINYBLOB NOT NULL,
90    EventsTime        DATETIME,
91    EventsInsertTime  DATETIME,
92    EventsDaemon        TINYBLOB NOT NULL,
93    EventsSource      TINYBLOB NOT NULL,
94    EventsRef         TINYBLOB NOT NULL,
95    EventsText        BLOB NOT NULL,
96    primary key (EventsId)
97);
98create index events_time_idx on Events (EventsTime);
99
100CREATE TABLE Path (
101   PathId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
102   Path BLOB NOT NULL,
103   PRIMARY KEY(PathId),
104   INDEX (Path(255))
105   );
106
107-- We strongly recommend to avoid the temptation to add new indexes.
108-- In general, these will cause very significant performance
109-- problems in other areas.  A better approch is to carefully check
110-- that all your memory configuation parameters are
111-- suitable for the size of your installation.	If you backup
112-- millions of files, you need to adapt the database memory
113-- configuration parameters concerning sorting, joining and global
114-- memory.  By default, sort and join parameters are very small
115-- (sometimes 8Kb), and having sufficient memory specified by those
116-- parameters is extremely important to run fast.  
117
118-- In File table
119-- FileIndex can be 0 for FT_DELETED files
120-- FileName can link '' for directories
121CREATE TABLE File (
122   FileId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
123   FileIndex INTEGER DEFAULT 0,
124   JobId INTEGER UNSIGNED NOT NULL,
125   PathId INTEGER UNSIGNED NOT NULL,
126   Filename BLOB NOT NULL,
127   DeltaSeq SMALLINT UNSIGNED DEFAULT 0,
128   MarkId INTEGER UNSIGNED DEFAULT 0,
129   LStat TINYBLOB NOT NULL,
130   MD5 TINYBLOB,
131   PRIMARY KEY(FileId),
132   INDEX (JobId),
133   INDEX (JobId, PathId, Filename(255))
134   );
135
136CREATE TABLE RestoreObject (
137   RestoreObjectId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
138   ObjectName BLOB NOT NULL,
139   RestoreObject LONGBLOB NOT NULL,
140   PluginName TINYBLOB NOT NULL,
141   ObjectLength INTEGER DEFAULT 0,
142   ObjectFullLength INTEGER DEFAULT 0,
143   ObjectIndex INTEGER DEFAULT 0,
144   ObjectType INTEGER DEFAULT 0,
145   FileIndex INTEGER DEFAULT 0,
146   JobId INTEGER UNSIGNED NOT NULL,
147   ObjectCompression INTEGER DEFAULT 0,
148   PRIMARY KEY(RestoreObjectId),
149   INDEX (JobId)
150   );
151
152
153#
154# Possibly add one or more of the following indexes
155#  to the above File table if your Verifies are
156#  too slow, but they can slow down backups.
157#
158#  INDEX (PathId),
159#  INDEX (Filename),
160#
161
162CREATE TABLE MediaType (
163   MediaTypeId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
164   MediaType TINYBLOB NOT NULL,
165   ReadOnly TINYINT DEFAULT 0,
166   PRIMARY KEY(MediaTypeId)
167   );
168
169CREATE TABLE Storage (
170   StorageId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
171   Name TINYBLOB NOT NULL,
172   AutoChanger TINYINT DEFAULT 0,
173   PRIMARY KEY(StorageId)
174   );
175
176CREATE TABLE Device (
177   DeviceId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
178   Name TINYBLOB NOT NULL,
179   MediaTypeId INTEGER UNSIGNED DEFAULT 0,
180   StorageId INTEGER UNSIGNED DEFAULT 0,
181   DevMounts INTEGER UNSIGNED DEFAULT 0,
182   DevReadBytes BIGINT UNSIGNED DEFAULT 0,
183   DevWriteBytes BIGINT UNSIGNED DEFAULT 0,
184   DevReadBytesSinceCleaning BIGINT UNSIGNED DEFAULT 0,
185   DevWriteBytesSinceCleaning BIGINT UNSIGNED DEFAULT 0,
186   DevReadTime BIGINT UNSIGNED DEFAULT 0,
187   DevWriteTime BIGINT UNSIGNED DEFAULT 0,
188   DevReadTimeSinceCleaning BIGINT UNSIGNED DEFAULT 0,
189   DevWriteTimeSinceCleaning BIGINT UNSIGNED DEFAULT 0,
190   CleaningDate DATETIME,
191   CleaningPeriod BIGINT UNSIGNED DEFAULT 0,
192   PRIMARY KEY(DeviceId)
193   );
194
195
196CREATE TABLE Job (
197   JobId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
198   Job TINYBLOB NOT NULL,
199   Name TINYBLOB NOT NULL,
200   Type BINARY(1) NOT NULL,
201   Level BINARY(1) NOT NULL,
202   ClientId INTEGER UNSIGNED DEFAULT 0,
203   JobStatus BINARY(1) NOT NULL,
204   SchedTime DATETIME,
205   StartTime DATETIME,
206   EndTime DATETIME,
207   RealEndTime DATETIME,
208   JobTDate BIGINT UNSIGNED DEFAULT 0,
209   VolSessionId INTEGER UNSIGNED DEFAULT 0,
210   VolSessionTime INTEGER UNSIGNED DEFAULT 0,
211   JobFiles INTEGER UNSIGNED DEFAULT 0,
212   JobBytes BIGINT UNSIGNED DEFAULT 0,
213   ReadBytes BIGINT UNSIGNED DEFAULT 0,
214   JobErrors INTEGER UNSIGNED DEFAULT 0,
215   JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
216   PoolId INTEGER UNSIGNED DEFAULT 0,
217   FileSetId INTEGER UNSIGNED DEFAULT 0,
218   PriorJobId INTEGER UNSIGNED DEFAULT 0,
219   PriorJob TINYBLOB,
220   PurgedFiles TINYINT DEFAULT 0,
221   HasBase TINYINT DEFAULT 0,
222   HasCache TINYINT DEFAULT 0,
223   Reviewed TINYINT DEFAULT 0,
224   Comment BLOB,
225   FileTable CHAR(20) DEFAULT 'File',
226   PRIMARY KEY(JobId),
227   INDEX (Name(128))
228   );
229
230-- Create a table like Job for long term statistics 
231CREATE TABLE JobHisto (
232   JobId INTEGER UNSIGNED NOT NULL,
233   Job TINYBLOB NOT NULL,
234   Name TINYBLOB NOT NULL,
235   Type BINARY(1) NOT NULL,
236   Level BINARY(1) NOT NULL,
237   ClientId INTEGER UNSIGNED DEFAULT 0,
238   JobStatus BINARY(1) NOT NULL,
239   SchedTime DATETIME,
240   StartTime DATETIME,
241   EndTime DATETIME,
242   RealEndTime DATETIME,
243   JobTDate BIGINT UNSIGNED DEFAULT 0,
244   VolSessionId INTEGER UNSIGNED DEFAULT 0,
245   VolSessionTime INTEGER UNSIGNED DEFAULT 0,
246   JobFiles INTEGER UNSIGNED DEFAULT 0,
247   JobBytes BIGINT UNSIGNED DEFAULT 0,
248   ReadBytes BIGINT UNSIGNED DEFAULT 0,
249   JobErrors INTEGER UNSIGNED DEFAULT 0,
250   JobMissingFiles INTEGER UNSIGNED DEFAULT 0,
251   PoolId INTEGER UNSIGNED DEFAULT 0,
252   FileSetId INTEGER UNSIGNED DEFAULT 0,
253   PriorJobId INTEGER UNSIGNED DEFAULT 0,
254   PriorJob TINYBLOB,
255   PurgedFiles TINYINT DEFAULT 0,
256   HasBase TINYINT DEFAULT 0,
257   HasCache TINYINT DEFAULT 0,
258   Reviewed TINYINT DEFAULT 0,
259   Comment BLOB,
260   FileTable CHAR(20) DEFAULT 'File',
261   INDEX (JobId),
262   INDEX (StartTime),
263   INDEX (JobTDate)
264   );
265
266CREATE TABLE Location (
267   LocationId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
268   Location TINYBLOB NOT NULL,
269   Cost INTEGER DEFAULT 0,
270   Enabled TINYINT,
271   PRIMARY KEY(LocationId)
272   );
273
274CREATE TABLE LocationLog (
275   LocLogId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
276   Date DATETIME,
277   Comment BLOB NOT NULL,
278   MediaId INTEGER UNSIGNED DEFAULT 0,
279   LocationId INTEGER UNSIGNED DEFAULT 0,
280   NewVolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged',
281    'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL,
282   NewEnabled TINYINT,
283   PRIMARY KEY(LocLogId)
284);
285
286
287# 
288CREATE TABLE FileSet (
289   FileSetId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
290   FileSet TINYBLOB NOT NULL,
291   MD5 TINYBLOB,
292   CreateTime DATETIME,
293   PRIMARY KEY(FileSetId)
294   );
295
296CREATE TABLE JobMedia (
297   JobMediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
298   JobId INTEGER UNSIGNED NOT NULL,
299   MediaId INTEGER UNSIGNED NOT NULL,
300   FirstIndex INTEGER UNSIGNED DEFAULT 0,
301   LastIndex INTEGER UNSIGNED DEFAULT 0,
302   StartFile INTEGER UNSIGNED DEFAULT 0,
303   EndFile INTEGER UNSIGNED DEFAULT 0,
304   StartBlock INTEGER UNSIGNED DEFAULT 0,
305   EndBlock INTEGER UNSIGNED DEFAULT 0,
306   VolIndex INTEGER UNSIGNED DEFAULT 0,
307   PRIMARY KEY(JobMediaId),
308   INDEX (JobId, MediaId)
309   );
310
311CREATE TABLE FileMedia
312(
313    JobId	      integer	UNSIGNED  not null,
314    FileIndex	      integer	UNSIGNED  not null,
315    MediaId	      integer	UNSIGNED  not null,
316    BlockAddress      bigint	UNSIGNED  default 0,
317    RecordNo	      integer	UNSIGNED  default 0,
318    FileOffset	      bigint	UNSIGNED  default 0,
319    INDEX (JobId, FileIndex)
320);
321
322CREATE TABLE Media (
323   MediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
324   VolumeName TINYBLOB NOT NULL,
325   Slot INTEGER DEFAULT 0,
326   PoolId INTEGER UNSIGNED DEFAULT 0,
327   MediaType TINYBLOB NOT NULL,
328   MediaTypeId INTEGER UNSIGNED DEFAULT 0,
329   LabelType TINYINT DEFAULT 0,
330   FirstWritten DATETIME,
331   LastWritten DATETIME,
332   LabelDate DATETIME,
333   VolJobs INTEGER UNSIGNED DEFAULT 0,
334   VolFiles INTEGER UNSIGNED DEFAULT 0,
335   VolBlocks INTEGER UNSIGNED DEFAULT 0,
336   VolParts INTEGER UNSIGNED DEFAULT 0,
337   VolCloudParts INTEGER UNSIGNED DEFAULT 0,
338   VolMounts INTEGER UNSIGNED DEFAULT 0,
339   VolBytes BIGINT UNSIGNED DEFAULT 0,
340   VolABytes BIGINT UNSIGNED DEFAULT 0,
341   VolAPadding BIGINT UNSIGNED DEFAULT 0,
342   VolHoleBytes BIGINT UNSIGNED DEFAULT 0,
343   VolHoles INTEGER UNSIGNED DEFAULT 0,
344   LastPartBytes BIGINT UNSIGNED DEFAULT 0,
345   VolType INTEGER UNSIGNED DEFAULT 0,
346   VolErrors INTEGER UNSIGNED DEFAULT 0,
347   VolWrites BIGINT UNSIGNED DEFAULT 0,
348   VolCapacityBytes BIGINT UNSIGNED DEFAULT 0,
349   VolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged',
350    'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL,
351   Enabled TINYINT DEFAULT 1,
352   Recycle TINYINT DEFAULT 0,
353   ActionOnPurge     TINYINT	DEFAULT 0,
354   CacheRetention BIGINT UNSIGNED DEFAULT 0,
355   VolRetention BIGINT UNSIGNED DEFAULT 0,
356   VolUseDuration BIGINT UNSIGNED DEFAULT 0,
357   MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
358   MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
359   MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
360   InChanger TINYINT DEFAULT 0,
361   StorageId INTEGER UNSIGNED DEFAULT 0,
362   DeviceId INTEGER UNSIGNED DEFAULT 0,
363   MediaAddressing TINYINT DEFAULT 0,
364   VolReadTime BIGINT UNSIGNED DEFAULT 0,
365   VolWriteTime BIGINT UNSIGNED DEFAULT 0,
366   EndFile INTEGER UNSIGNED DEFAULT 0,
367   EndBlock INTEGER UNSIGNED DEFAULT 0,
368   LocationId INTEGER UNSIGNED DEFAULT 0,
369   RecycleCount INTEGER UNSIGNED DEFAULT 0,
370   InitialWrite DATETIME,
371   ScratchPoolId INTEGER UNSIGNED DEFAULT 0,
372   RecyclePoolId INTEGER UNSIGNED DEFAULT 0,
373   Comment BLOB,
374   PRIMARY KEY(MediaId),
375   UNIQUE (VolumeName(128)),
376   INDEX (PoolId),
377   INDEX (StorageId)
378   );
379
380CREATE TABLE Pool (
381   PoolId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
382   Name TINYBLOB NOT NULL,
383   NumVols INTEGER UNSIGNED DEFAULT 0,
384   MaxVols INTEGER UNSIGNED DEFAULT 0,
385   UseOnce TINYINT DEFAULT 0,
386   UseCatalog TINYINT DEFAULT 0,
387   AcceptAnyVolume TINYINT DEFAULT 0,
388   VolRetention BIGINT UNSIGNED DEFAULT 0,
389   CacheRetention BIGINT UNSIGNED DEFAULT 0,
390   VolUseDuration BIGINT UNSIGNED DEFAULT 0,
391   MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
392   MaxVolFiles INTEGER UNSIGNED DEFAULT 0,
393   MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
394   MaxPoolBytes BIGINT UNSIGNED DEFAULT 0,
395   AutoPrune TINYINT DEFAULT 0,
396   Recycle TINYINT DEFAULT 0,
397   ActionOnPurge     TINYINT	DEFAULT 0,
398   PoolType ENUM('Backup', 'Copy', 'Cloned', 'Archive', 'Migration', 'Scratch') NOT NULL,
399   LabelType TINYINT DEFAULT 0,
400   LabelFormat TINYBLOB,
401   Enabled TINYINT DEFAULT 1,
402   ScratchPoolId INTEGER UNSIGNED DEFAULT 0,
403   RecyclePoolId INTEGER UNSIGNED DEFAULT 0,
404   NextPoolId INTEGER UNSIGNED DEFAULT 0,
405   MigrationHighBytes BIGINT UNSIGNED DEFAULT 0,
406   MigrationLowBytes BIGINT UNSIGNED DEFAULT 0,
407   MigrationTime BIGINT UNSIGNED DEFAULT 0,
408   UNIQUE (Name(128)),
409   PRIMARY KEY (PoolId)
410   );
411
412
413CREATE TABLE Client (
414   ClientId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
415   Name TINYBLOB NOT NULL,
416   Uname TINYBLOB NOT NULL,	  /* full uname -a of client */
417   AutoPrune TINYINT DEFAULT 0,
418   FileRetention BIGINT UNSIGNED DEFAULT 0,
419   JobRetention  BIGINT UNSIGNED DEFAULT 0,
420   UNIQUE (Name(128)),
421   PRIMARY KEY(ClientId)
422   );
423
424CREATE TABLE Log (
425   LogId INTEGER UNSIGNED AUTO_INCREMENT,
426   JobId INTEGER UNSIGNED DEFAULT 0,
427   Time DATETIME,
428   LogText BLOB NOT NULL,
429   PRIMARY KEY(LogId),
430   INDEX (JobId)
431   );
432
433
434CREATE TABLE BaseFiles (
435   BaseId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
436   BaseJobId INTEGER UNSIGNED NOT NULL,
437   JobId INTEGER UNSIGNED NOT NULL,
438   FileId BIGINT UNSIGNED NOT NULL,
439   FileIndex INTEGER DEFAULT 0,
440   PRIMARY KEY(BaseId)
441   );
442
443CREATE INDEX basefiles_jobid_idx ON BaseFiles ( JobId );
444
445CREATE TABLE UnsavedFiles (
446   UnsavedId INTEGER UNSIGNED AUTO_INCREMENT,
447   JobId INTEGER UNSIGNED NOT NULL,
448   PathId INTEGER UNSIGNED NOT NULL,
449   Filename BLOB NOT NULL,
450   PRIMARY KEY (UnsavedId)
451   );
452
453
454
455CREATE TABLE Counters (
456   Counter TINYBLOB NOT NULL,
457   \`MinValue\` INTEGER DEFAULT 0,
458   \`MaxValue\` INTEGER DEFAULT 0,
459   CurrentValue INTEGER DEFAULT 0,
460   WrapCounter TINYBLOB NOT NULL,
461   PRIMARY KEY (Counter(128))
462   );
463
464CREATE TABLE CDImages (
465   MediaId INTEGER UNSIGNED NOT NULL,
466   LastBurn DATETIME,
467   PRIMARY KEY (MediaId)
468   );
469
470CREATE TABLE Status (
471   JobStatus CHAR(1) BINARY NOT NULL,
472   JobStatusLong BLOB,
473   Severity INT,
474   PRIMARY KEY (JobStatus)
475   );
476
477INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
478   ('C', 'Created, not yet running',15),
479   ('R', 'Running',15),
480   ('B', 'Blocked',15),
481   ('T', 'Completed successfully',10),
482   ('E', 'Terminated with errors',25),
483   ('e', 'Non-fatal error',20),
484   ('f', 'Fatal error',100),
485   ('D', 'Verify found differences',15),
486   ('A', 'Canceled by user',90),
487   ('F', 'Waiting for Client',15),
488   ('S', 'Waiting for Storage daemon',15),
489   ('m', 'Waiting for new media',15),
490   ('M', 'Waiting for media mount',15),
491   ('s', 'Waiting for storage resource',15),
492   ('j', 'Waiting for job resource',15),
493   ('c', 'Waiting for client resource',15),
494   ('d', 'Waiting on maximum jobs',15),
495   ('t', 'Waiting on start time',15),
496   ('p', 'Waiting on higher priority jobs',15),
497   ('i', 'Doing batch insert file records',15),
498   ('I', 'Incomplete Job',25),
499   ('a', 'SD despooling attributes',15);
500
501CREATE TABLE PathHierarchy
502(
503     PathId INTEGER UNSIGNED NOT NULL,
504     PPathId INTEGER UNSIGNED NOT NULL,
505     CONSTRAINT pathhierarchy_pkey PRIMARY KEY (PathId)
506);
507
508CREATE INDEX pathhierarchy_ppathid 
509	  ON PathHierarchy (PPathId);
510
511CREATE TABLE PathVisibility
512(
513      PathId INTEGER UNSIGNED NOT NULL,
514      JobId INTEGER UNSIGNED NOT NULL,
515      Size int8 DEFAULT 0,
516      Files int4 DEFAULT 0,
517      CONSTRAINT pathvisibility_pkey PRIMARY KEY (JobId, PathId)
518);
519CREATE INDEX pathvisibility_jobid
520	     ON PathVisibility (JobId);
521
522
523CREATE TABLE Snapshot (
524  SnapshotId	  INTEGER UNSIGNED AUTO_INCREMENT,
525  Name		  TINYBLOB NOT NULL,
526  JobId 	  INTEGER  DEFAULT 0,
527  FileSetId	  INTEGER DEFAULT 0,
528  CreateTDate	  BIGINT   NOT NULL,
529  CreateDate	  DATETIME NOT NULL,
530  ClientId	  INTEGER DEFAULT 0,
531  Volume	  TINYBLOB NOT NULL,
532  Device	  TINYBLOB NOT NULL,
533  Type		  TINYBLOB NOT NULL,
534  Retention	  INTEGER DEFAULT 0,
535  Comment	  BLOB,
536  primary key (SnapshotId)
537);
538
539CREATE UNIQUE INDEX snapshot_idx ON Snapshot (Device(255), 
540					      Volume(255),
541					      Name(255));
542
543
544
545CREATE TABLE Version (
546   VersionId INTEGER UNSIGNED NOT NULL 
547   );
548
549-- Initialize Version
550INSERT INTO Version (VersionId) VALUES (1022);
551
552END-OF-DATA
553then
554   echo "Creation of Bacula MySQL tables succeeded."
555else
556   echo "Creation of Bacula MySQL tables failed."
557fi
558exit 0
559