Parcourir la source

concierge-backup: MySQL/MariaDB dump support

root il y a 7 ans
Parent
commit
3ba1ac8ed8
2 fichiers modifiés avec 22 ajouts et 1 suppressions
  1. 5 1
      README.md
  2. 17 0
      src/concierge-backup

+ 5 - 1
README.md

@@ -10,7 +10,11 @@ Notify upon issues. Keep noise to a minimum. Keep configuration to a minimum.
 
 ### concierge-backup
 
-Create local and remote backups of directories and PostgreSQL databases. 
+Create local and remote backups of directories, and databases. 
+
+By default, the backup include:
+* Directories: /etc, /var/mail
+* Databases: ejabberd, MySQL/MariaDB, and PostgreSQL
 
 Configuration: /etc/concierge/backup.cfg
 

+ 17 - 0
src/concierge-backup

@@ -29,6 +29,22 @@ class EjabberdTask:
     else:
       os.remove(tempfname)
 
+class MysqlDumpTask:
+  def __init__(self, outputPath):
+    self.outputPath = outputPath
+  def is_supported(self):
+    return shutil.which('mysqldump') != None
+  def run(self):
+    query = 'show databases'
+    comOut = subprocess.check_output(['mysql','-e',query])
+    dbs = comOut.decode('utf-8').strip("\n ").split("\n")[1:]
+    # Exclude schema related databases
+    dbs = set(dbs) - {'information_schema', 'performance_schema'}
+    for dbname in dbs:
+      tempfname = os.path.join(self.outputPath, 'mysql_%s.sql' % dbname)
+      tempfh = open(tempfname, mode='w')
+      subprocess.call(['mysqldump','--databases',dbname], stdout=tempfh)
+
 class PgDumpTask:
   def __init__(self, outputPath, excludeDatname):
     self.outputPath = outputPath
@@ -101,6 +117,7 @@ else:
 # Run software-specific backup tasks
 tasks = []
 tasks.append(EjabberdTask(backupTemp))
+tasks.append(MysqlDumpTask(backupTemp))
 tasks.append(PgDumpTask(backupTemp, pgsqlExcludeDatname))
 
 for task in tasks: