def _backup(self): """Real backup method. May raise BackupError exceptions""" config = self.config['mysqldump'] # setup defaults_file with ignore-table exclusions defaults_file = os.path.join(self.target_directory, 'my.cnf') write_options(self.mysql_config, defaults_file) if config['exclude-invalid-views']: LOG.info("* Finding and excluding invalid views...") definitions_path = os.path.join(self.target_directory, 'invalid_views.sql') exclude_invalid_views(self.schema, self.client, definitions_path) add_exclusions(self.schema, defaults_file) # find the path to the mysqldump command mysqldump_bin = find_mysqldump(path=config['mysql-binpath']) LOG.info("Using mysqldump executable: %s", mysqldump_bin) # setup the mysqldump environment extra_defaults = config['extra-defaults'] try: mysqldump = MySQLDump(defaults_file, mysqldump_bin, extra_defaults=extra_defaults) except MySQLDumpError, exc: raise BackupError(str(exc))
def _backup(self): """Real backup method. May raise BackupError exceptions""" config = self.config['mysqldump'] # setup defaults_file with ignore-table exclusions defaults_file = os.path.join(self.target_directory, 'my.cnf') write_options(self.mysql_config, defaults_file) if config['exclude-invalid-views']: LOG.info("* Finding and excluding invalid views...") definitions_path = os.path.join(self.target_directory, 'invalid_views.sql') exclude_invalid_views(self.schema, self.client, definitions_path) add_exclusions(self.schema, defaults_file) # find the path to the mysqldump command mysqldump_bin = find_mysqldump(path=config['mysql-binpath']) LOG.info("Using mysqldump executable: %s", mysqldump_bin) # setup the mysqldump environment extra_defaults = config['extra-defaults'] try: mysqldump = MySQLDump(defaults_file, mysqldump_bin, extra_defaults=extra_defaults) except MySQLDumpError as exc: raise BackupError(str(exc)) except Exception as ex: LOG.warning(ex) LOG.info("mysqldump version %s", '.'.join([str(digit) for digit in mysqldump.version])) options = collect_mysqldump_options(config, mysqldump, self.client) validate_mysqldump_options(mysqldump, options) os.mkdir(os.path.join(self.target_directory, 'backup_data')) if self.config['compression']['method'] != 'none' and \ self.config['compression']['level'] > 0: try: cmd, ext = lookup_compression( self.config['compression']['method']) except OSError as exc: raise BackupError( "Unable to load compression method '%s': %s" % (self.config['compression']['method'], exc)) LOG.info("Using %s compression level %d with args %s", self.config['compression']['method'], self.config['compression']['level'], self.config['compression']['options']) else: LOG.info("Not compressing mysqldump output") cmd = '' ext = '' try: start(mysqldump=mysqldump, schema=self.schema, lock_method=config['lock-method'], file_per_database=config['file-per-database'], open_stream=self._open_stream, compression_ext=ext, arg_per_database=config['arg-per-database']) except MySQLDumpError as exc: raise BackupError(str(exc))
def backup(self): """Run a database backup with xtrabackup""" defaults_file = os.path.join(self.target_directory, 'my.xtrabackup.cnf') args = [ self.config['xtrabackup']['innobackupex'], '--defaults-file=%s' % defaults_file, '--stream=tar4ibd', tempfile.gettempdir(), ] if self.config['xtrabackup']['slave-info']: args.insert(3, '--slave-info') if self.config['xtrabackup']['no-lock']: args.insert(2, '--no-lock') LOG.info("%s", list2cmdline(args)) if self.dry_run: return config = build_mysql_config(self.config['mysql:client']) write_options(config, defaults_file) shutil.copyfileobj( open(self.config['xtrabackup']['global-defaults'], 'r'), open(defaults_file, 'a')) backup_path = os.path.join(self.target_directory, 'backup.tar') compression_stream = open_stream(backup_path, 'w', **self.config['compression']) error_log_path = os.path.join(self.target_directory, 'xtrabackup.log') error_log = open(error_log_path, 'wb') try: try: check_call(args, stdout=compression_stream, stderr=error_log, close_fds=True) except OSError, exc: LOG.info("Command not found: %s", args[0]) raise BackupError("%s not found. Is xtrabackup installed?" % args[0]) except CalledProcessError, exc: LOG.info("%s failed", list2cmdline(exc.cmd)) for line in open(error_log_path, 'r'): if line.startswith('>>'): continue LOG.info("%s", line.rstrip()) raise BackupError("%s failed" % exc.cmd[0])
def backup(self): """Run a database backup with xtrabackup""" defaults_file = os.path.join(self.target_directory, 'my.xtrabackup.cnf') args = [ self.config['xtrabackup']['innobackupex'], '--defaults-file=%s' % defaults_file, '--stream=tar4ibd', tempfile.gettempdir(), ] if self.config['xtrabackup']['slave-info']: args.insert(3, '--slave-info') if self.config['xtrabackup']['no-lock']: args.insert(2, '--no-lock') LOG.info("%s", list2cmdline(args)) if self.dry_run: return config = build_mysql_config(self.config['mysql:client']) write_options(config, defaults_file) shutil.copyfileobj(open(self.config['xtrabackup']['global-defaults'], 'r'), open(defaults_file, 'a')) backup_path = os.path.join(self.target_directory, 'backup.tar') compression_stream = open_stream(backup_path, 'w', **self.config['compression']) error_log_path = os.path.join(self.target_directory, 'xtrabackup.log') error_log = open(error_log_path, 'wb') try: try: check_call(args, stdout=compression_stream, stderr=error_log, close_fds=True) except OSError, exc: LOG.info("Command not found: %s", args[0]) raise BackupError("%s not found. Is xtrabackup installed?" % args[0]) except CalledProcessError, exc: LOG.info("%s failed", list2cmdline(exc.cmd)) for line in open(error_log_path, 'r'): if line.startswith('>>'): continue LOG.info("%s", line.rstrip()) raise BackupError("%s failed" % exc.cmd[0])
def _backup(self): """Real backup method. May raise BackupError exceptions""" config = self.config["mysqldump"] # setup defaults_file with ignore-table exclusions defaults_file = os.path.join(self.target_directory, "my.cnf") write_options(self.mysql_config, defaults_file) add_exclusions(self.schema, defaults_file) # find the path to the mysqldump command mysqldump_bin = find_mysqldump(path=config["mysql-binpath"]) LOG.info("Using mysqldump executable: %s", mysqldump_bin) # setup the mysqldump environment extra_defaults = config["extra-defaults"] try: mysqldump = MySQLDump(defaults_file, mysqldump_bin, extra_defaults=extra_defaults) except MySQLDumpError, exc: raise BackupError(str(exc))
def _backup(self): """Real backup method. May raise BackupError exceptions""" config = self.config["mysqldump"] # setup defaults_file with ignore-table exclusions defaults_file = os.path.join(self.target_directory, "my.cnf") write_options(self.mysql_config, defaults_file) if config["exclude-invalid-views"]: LOG.info("* Finding and excluding invalid views...") definitions_path = os.path.join(self.target_directory, "invalid_views.sql") exclude_invalid_views(self.schema, self.client, definitions_path) add_exclusions(self.schema, defaults_file) # find the path to the mysqldump command mysqldump_bin = find_mysqldump(path=config["mysql-binpath"]) LOG.info("Using mysqldump executable: %s", mysqldump_bin) # setup the mysqldump environment extra_defaults = config["extra-defaults"] try: mysqldump = MySQLDump(defaults_file, mysqldump_bin, extra_defaults=extra_defaults, mock_env=self.mock_env) except MySQLDumpError as exc: raise BackupError(str(exc)) except Exception as ex: # pylint: disable=W0703 LOG.warning(ex) mysqldump_version = ".".join( [str(digit) for digit in mysqldump.version]) LOG.info("mysqldump version %s", mysqldump_version) options = collect_mysqldump_options(config, mysqldump, self.client) validate_mysqldump_options(mysqldump, options) os.mkdir(os.path.join(self.target_directory, "backup_data")) if (self.config["compression"]["method"] != "none" and self.config["compression"]["level"] > 0): try: _, ext = lookup_compression( self.config["compression"]["method"]) except OSError as exc: raise BackupError( "Unable to load compression method '%s': %s" % (self.config["compression"]["method"], exc)) LOG.info( "Using %s compression level %d with args %s", self.config["compression"]["method"], self.config["compression"]["level"], self.config["compression"]["options"], ) else: LOG.info("Not compressing mysqldump output") ext = "" try: start( mysqldump=mysqldump, schema=self.schema, lock_method=config["lock-method"], file_per_database=config["file-per-database"], open_stream=self._open_stream, compression_ext=ext, arg_per_database=config["arg-per-database"], ) except MySQLDumpError as exc: raise BackupError(str(exc))
def _backup(self): """Real backup method. May raise BackupError exceptions""" config = self.config["mysqldump"] # setup defaults_file with ignore-table exclusions defaults_file = os.path.join(self.target_directory, "my.cnf") write_options(self.mysql_config, defaults_file) if config["exclude-invalid-views"]: LOG.info("* Finding and excluding invalid views...") definitions_path = os.path.join(self.target_directory, "invalid_views.sql") exclude_invalid_views(self.schema, self.client, definitions_path) add_exclusions(self.schema, defaults_file) # find the path to the mysqldump command mysqldump_bin = find_mysqldump(path=config["mysql-binpath"]) LOG.info("Using mysqldump executable: %s", mysqldump_bin) # setup the mysqldump environment extra_defaults = config["extra-defaults"] try: mysqldump = MySQLDump( defaults_file, mysqldump_bin, extra_defaults=extra_defaults, mock_env=self.mock_env ) except MySQLDumpError as exc: raise BackupError(str(exc)) except Exception as ex: # pylint: disable=W0703 LOG.warning(ex) mysqldump_version = ".".join([str(digit) for digit in mysqldump.version]) LOG.info("mysqldump version %s", mysqldump_version) options = collect_mysqldump_options(config, mysqldump, self.client) validate_mysqldump_options(mysqldump, options) os.mkdir(os.path.join(self.target_directory, "backup_data")) if ( self.config["compression"]["method"] != "none" and self.config["compression"]["level"] > 0 ): try: _, ext = lookup_compression(self.config["compression"]["method"]) except OSError as exc: raise BackupError( "Unable to load compression method '%s': %s" % (self.config["compression"]["method"], exc) ) LOG.info( "Using %s compression level %d with args %s", self.config["compression"]["method"], self.config["compression"]["level"], self.config["compression"]["options"], ) else: LOG.info("Not compressing mysqldump output") ext = "" try: start( mysqldump=mysqldump, schema=self.schema, lock_method=config["lock-method"], file_per_database=config["file-per-database"], open_stream=self._open_stream, compression_ext=ext, arg_per_database=config["arg-per-database"], ) except MySQLDumpError as exc: raise BackupError(str(exc))