]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Enhance the update_mysql_tables script
authorEric Bollengier <eric@baculasystems.com>
Fri, 21 May 2021 07:25:57 +0000 (09:25 +0200)
committerEric Bollengier <eric@baculasystems.com>
Fri, 21 May 2021 07:25:58 +0000 (09:25 +0200)
Thanks to Phil, these changes allow the script to
be retried (after making corrections) if it fails
for any reason.

bacula/src/cats/update_mysql_tables.in

index 31c73a2e03eac36d29f4071576499eae014ce305..a929fdd066930c3385f724a590b6c480cbaf9d99 100644 (file)
@@ -154,6 +154,12 @@ if [ "$DBVERSION" -eq 15 -o "$DBVERSION" -eq 16 ]; then
         SKIP1018=1
     fi
 
+# If running on a Galera cluster, YOU MUST BRING THE CLUSTER DOWN TO A
+# SINGLE NODE before performing this migration (and preferably also
+# disable Galera temporarily) because the schema rewrites will almost
+# certainly exceed the hard limits on Galera writeset size (128K maximum
+# rows or 4GB total writeset size, whichever comes first).
+
     if mysql --skip-reconnect $* <<END-OF-DATA
 USE ${db_name};
 
@@ -163,8 +169,9 @@ ALTER TABLE RestoreObject
 ALTER TABLE BaseFiles
    MODIFY FileIndex INTEGER UNSIGNED DEFAULT 0;
 
-DROP INDEX JobId on File;
-DROP INDEX JobId_2 on File;
+DROP INDEX IF EXISTS JobId on File;
+DROP INDEX IF EXISTS JobId_2 on File;
+DROP TABLE IF EXISTS file_temp;
 
 CREATE TABLE file_temp (
    FileId BIGINT UNSIGNED NOT NULL,
@@ -184,10 +191,12 @@ INSERT INTO file_temp (FileId, FileIndex, JobId, PathId, Filename, DeltaSeq,
          MarkId, LStat, Md5
     FROM File JOIN Filename USING (FilenameId);
 
+SELECT 'DO NOT BREAK THE SCRIPT AFTER THIS POINT';
+
 DROP TABLE Filename;
 DROP TABLE File;
-
 ALTER TABLE file_temp RENAME TO File;
+
 ALTER TABLE File ADD PRIMARY KEY (FileId);
 ALTER TABLE File MODIFY COLUMN FileId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;
 CREATE INDEX JobId on File (JobId);
@@ -213,8 +222,10 @@ if [ "$STOP1015" = "" -a "$DBVERSION" -eq 1015 ]; then
     if mysql --skip-reconnect $* <<END-OF-DATA
 USE ${db_name};
 
-DROP INDEX JobId on File;
-DROP INDEX JobId_2 on File;
+DROP INDEX IF EXISTS JobId on File;
+DROP INDEX IF EXISTS JobId_2 on File;
+
+DROP TABLE IF EXISTS file_temp;
 
 CREATE TABLE file_temp (
    FileId BIGINT UNSIGNED NOT NULL,
@@ -234,6 +245,8 @@ INSERT INTO file_temp (FileId, FileIndex, JobId, PathId, Filename, DeltaSeq,
          MarkId, LStat, Md5
     FROM File JOIN Filename USING (FilenameId);
 
+SELECT 'DO NOT BREAK THE SCRIPT AFTER THIS POINT';
+
 DROP TABLE Filename;
 DROP TABLE File;