Browse Source

Add MySQL dump metadata.

Dan Helfman 15 hours ago
parent
commit
d40f728410
2 changed files with 26 additions and 5 deletions
  1. 1 1
      borgmatic/actions/restore.py
  2. 25 4
      borgmatic/hooks/data_source/mysql.py

+ 1 - 1
borgmatic/actions/restore.py

@@ -311,7 +311,7 @@ def collect_dumps_from_archive(
 
 
     # No dumps metadata files were found, so for backwards compatibility, fall back to parsing the
     # No dumps metadata files were found, so for backwards compatibility, fall back to parsing the
     # paths of dumps found in the archive to get their respective dump metadata.
     # paths of dumps found in the archive to get their respective dump metadata.
-    logger.debug(f'Collecting database dumps from archive data source dump paths')
+    logger.debug(f'Collecting database dumps from archive data source dump paths (fallback)')
     borgmatic_source_directory = str(
     borgmatic_source_directory = str(
         pathlib.Path(borgmatic.config.paths.get_borgmatic_source_directory(config)),
         pathlib.Path(borgmatic.config.paths.get_borgmatic_source_directory(config)),
     )
     )

+ 25 - 4
borgmatic/hooks/data_source/mysql.py

@@ -188,11 +188,12 @@ def dump_data_sources(
     '''
     '''
     dry_run_label = ' (dry run; not actually dumping anything)' if dry_run else ''
     dry_run_label = ' (dry run; not actually dumping anything)' if dry_run else ''
     processes = []
     processes = []
+    dumps_metadata = []
 
 
     logger.info(f'Dumping MySQL databases{dry_run_label}')
     logger.info(f'Dumping MySQL databases{dry_run_label}')
+    dump_path = make_dump_path(borgmatic_runtime_directory)
 
 
     for database in databases:
     for database in databases:
-        dump_path = make_dump_path(borgmatic_runtime_directory)
         username = borgmatic.hooks.credential.parse.resolve_credential(
         username = borgmatic.hooks.credential.parse.resolve_credential(
             database.get('username'),
             database.get('username'),
             config,
             config,
@@ -224,10 +225,19 @@ def dump_data_sources(
 
 
             raise ValueError('Cannot find any MySQL databases to dump.')
             raise ValueError('Cannot find any MySQL databases to dump.')
 
 
+
         if database['name'] == 'all' and database.get('format'):
         if database['name'] == 'all' and database.get('format'):
-            for dump_name in dump_database_names:
+            for database_name in dump_database_names:
+                dumps_metadata.append(
+                    borgmatic.actions.restore.Dump(
+                        'mysql_databases',
+                        database_name,
+                        database.get('hostname'),
+                        database.get('port'),
+                    )
+                )
                 renamed_database = copy.copy(database)
                 renamed_database = copy.copy(database)
-                renamed_database['name'] = dump_name
+                renamed_database['name'] = database_name
                 processes.append(
                 processes.append(
                     execute_dump_command(
                     execute_dump_command(
                         renamed_database,
                         renamed_database,
@@ -235,13 +245,21 @@ def dump_data_sources(
                         username,
                         username,
                         password,
                         password,
                         dump_path,
                         dump_path,
-                        (dump_name,),
+                        (database_name,),
                         environment,
                         environment,
                         dry_run,
                         dry_run,
                         dry_run_label,
                         dry_run_label,
                     ),
                     ),
                 )
                 )
         else:
         else:
+            dumps_metadata.append(
+                borgmatic.actions.restore.Dump(
+                    'mysql_databases',
+                    database['name'],
+                    database.get('hostname'),
+                    database.get('port'),
+                )
+            )
             processes.append(
             processes.append(
                 execute_dump_command(
                 execute_dump_command(
                     database,
                     database,
@@ -257,6 +275,9 @@ def dump_data_sources(
             )
             )
 
 
     if not dry_run:
     if not dry_run:
+        dump.write_data_source_dumps_metadata(
+            borgmatic_runtime_directory, 'mysql_databases', dumps_metadata
+        )
         patterns.append(
         patterns.append(
             borgmatic.borg.pattern.Pattern(
             borgmatic.borg.pattern.Pattern(
                 os.path.join(borgmatic_runtime_directory, 'mysql_databases'),
                 os.path.join(borgmatic_runtime_directory, 'mysql_databases'),