mysql plugin needed some work
This commit is contained in:
parent
118e1355bc
commit
68669a7fd5
@ -7,6 +7,8 @@ import warnings
|
|||||||
_mysql_ssl_re = re.compile('^ssl-(.*)$')
|
_mysql_ssl_re = re.compile('^ssl-(.*)$')
|
||||||
|
|
||||||
# TODO: is it possible to do a pure-python dump via PyMySQL?
|
# TODO: is it possible to do a pure-python dump via PyMySQL?
|
||||||
|
# TODO: add compression support? Not *that* necessary since borg has its own.
|
||||||
|
# in fact, it's better to not do it on the dumps directly so borg can diff/delta better.
|
||||||
|
|
||||||
class Backup(object):
|
class Backup(object):
|
||||||
def __init__(self, dbs = None,
|
def __init__(self, dbs = None,
|
||||||
@ -17,7 +19,7 @@ class Backup(object):
|
|||||||
mysqlbin = 'mysql',
|
mysqlbin = 'mysql',
|
||||||
mysqldumpbin = 'mysqldump',
|
mysqldumpbin = 'mysqldump',
|
||||||
outdir = '~/.cache/backup/mysql'):
|
outdir = '~/.cache/backup/mysql'):
|
||||||
# If dbs is None, we dump ALL databases.
|
# If dbs is None, we dump ALL databases (that the user has access to).
|
||||||
self.dbs = dbs
|
self.dbs = dbs
|
||||||
self.cfgsuffix = cfgsuffix
|
self.cfgsuffix = cfgsuffix
|
||||||
self.splitdumps = splitdumps
|
self.splitdumps = splitdumps
|
||||||
@ -54,20 +56,41 @@ class Backup(object):
|
|||||||
return()
|
return()
|
||||||
|
|
||||||
def dump(self):
|
def dump(self):
|
||||||
for db in self.dbs:
|
if self.splitdumps:
|
||||||
|
for db in self.dbs:
|
||||||
|
args = copy.deepcopy(self.dumpopts)
|
||||||
|
outfile = os.path.join(self.outdir, '{0}.sql'.format(db))
|
||||||
|
if db in ('information_schema', 'performance_schema'):
|
||||||
|
args.append('--skip-lock-tables')
|
||||||
|
elif db == 'mysql':
|
||||||
|
args.append('--flush-privileges')
|
||||||
|
cmd = [self.mysqldumpbin,
|
||||||
|
'--result-file={0}'.format(outfile)]
|
||||||
|
cmd.extend(args)
|
||||||
|
cmd.append(db)
|
||||||
|
out = subprocess.run(cmd,
|
||||||
|
stdout = subprocess.PIPE,
|
||||||
|
stderr = subprocess.PIPE)
|
||||||
|
if out.returncode != 0:
|
||||||
|
warn = ('Error dumping {0}: {1}').format(db, out.stderr.decode('utf-8').strip())
|
||||||
|
warnings.warn(warn)
|
||||||
|
else:
|
||||||
|
outfile = os.path.join(self.outdir, 'all.databases.sql')
|
||||||
args = copy.deepcopy(self.dumpopts)
|
args = copy.deepcopy(self.dumpopts)
|
||||||
outfile = os.path.join(self.outdir, '{0}.sql'.format(db))
|
args.append('--result-file={0}'.format(outfile))
|
||||||
if db in ('information_schema', 'performance_schema'):
|
if 'information_schema' in self.dbs:
|
||||||
args.append('--skip-lock-tables')
|
args.append('--skip-lock-tables')
|
||||||
elif db == 'mysql':
|
if 'mysql' in self.dbs:
|
||||||
args.append('--flush-privileges')
|
args.append('--flush-privileges')
|
||||||
out = subprocess.run([self.mysqldumpbin,
|
args.append(['--databases'])
|
||||||
'--result-file={0}'.format(outfile),
|
cmd = [self.mysqldumpbin]
|
||||||
args,
|
cmd.extend(args)
|
||||||
db],
|
cmd.extend(self.dbs)
|
||||||
|
out = subprocess.run(cmd,
|
||||||
stdout = subprocess.PIPE,
|
stdout = subprocess.PIPE,
|
||||||
stderr = subprocess.PIPE)
|
stderr = subprocess.PIPE)
|
||||||
if out.returncode != 0:
|
if out.returncode != 0:
|
||||||
warn = ('Error dumping {0}: {1}').format(db, out.stderr.decode('utf-8').strip())
|
warn = ('Error dumping {0}: {1}').format(','.join(self.dbs),
|
||||||
|
out.stderr.decode('utf-8').strip())
|
||||||
warnings.warn(warn)
|
warnings.warn(warn)
|
||||||
return()
|
return()
|
||||||
|
Loading…
Reference in New Issue
Block a user