46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from dbbackup import utils
|
|
|
|
from .base import BaseCommandDBConnector
|
|
|
|
|
|
class MysqlDumpConnector(BaseCommandDBConnector):
|
|
"""
|
|
MySQL connector, creates dump with ``mysqldump`` and restore with
|
|
``mysql``.
|
|
"""
|
|
|
|
dump_cmd = "mysqldump"
|
|
restore_cmd = "mysql"
|
|
|
|
def _create_dump(self):
|
|
cmd = f"{self.dump_cmd} {self.settings['NAME']} --quick"
|
|
if self.settings.get("HOST"):
|
|
cmd += f" --host={self.settings['HOST']}"
|
|
if self.settings.get("PORT"):
|
|
cmd += f" --port={self.settings['PORT']}"
|
|
if self.settings.get("USER"):
|
|
cmd += f" --user={self.settings['USER']}"
|
|
if self.settings.get("PASSWORD"):
|
|
cmd += f" --password={utils.get_escaped_command_arg(self.settings['PASSWORD'])}"
|
|
|
|
for table in self.exclude:
|
|
cmd += f" --ignore-table={self.settings['NAME']}.{table}"
|
|
cmd = f"{self.dump_prefix} {cmd} {self.dump_suffix}"
|
|
stdout, stderr = self.run_command(cmd, env=self.dump_env)
|
|
return stdout
|
|
|
|
def _restore_dump(self, dump):
|
|
cmd = f"{self.restore_cmd} {self.settings['NAME']}"
|
|
if self.settings.get("HOST"):
|
|
cmd += f" --host={self.settings['HOST']}"
|
|
if self.settings.get("PORT"):
|
|
cmd += f" --port={self.settings['PORT']}"
|
|
if self.settings.get("USER"):
|
|
cmd += f" --user={self.settings['USER']}"
|
|
if self.settings.get("PASSWORD"):
|
|
cmd += f" --password={utils.get_escaped_command_arg(self.settings['PASSWORD'])}"
|
|
|
|
cmd = f"{self.restore_prefix} {cmd} {self.restore_suffix}"
|
|
stdout, stderr = self.run_command(cmd, stdin=dump, env=self.restore_env)
|
|
return stdout, stderr
|