def backup(self): """Run a backup by running through a LVM snapshot against the device the MySQL datadir resides on """ # connect to mysql and lookup what we're supposed to snapshot try: self.client.connect() datadir = os.path.realpath(self.client.show_variable("datadir")) except MySQLError as exc: raise BackupError("[%d] %s" % exc.args) LOG.info("Backing up %s via snapshot", datadir) # lookup the logical volume mysql's datadir sits on try: volume = LogicalVolume.lookup_from_fspath(datadir) except LookupError as exc: raise BackupError("Failed to lookup logical volume for %s: %s" % (datadir, str(exc))) except Exception as ex: raise BackupError("Failed to lookup logical volume for %s: %s" % (datadir, str(ex))) # create a snapshot manager snapshot = build_snapshot(self.config["mysql-lvm"], volume, suppress_tmpdir=self.dry_run) # calculate where the datadirectory on the snapshot will be located rpath = relpath(datadir, getmount(datadir)) snap_datadir = os.path.abspath(os.path.join(snapshot.mountpoint, rpath)) # setup actions to perform at each step of the snapshot process setup_actions( snapshot=snapshot, config=self.config, client=self.client, snap_datadir=snap_datadir, spooldir=self.target_directory, ) if self.dry_run: return _dry_run(self.target_directory, volume, snapshot, datadir) try: snapshot.start(volume) except CallbackFailuresError as exc: for callback, error in exc.errors: LOG.error("%s: %s", callback, error) raise BackupError( "Error occurred during snapshot process. Aborting.") except LVMCommandError as exc: # Something failed in the snapshot process raise BackupError(str(exc)) except BaseException as ex: LOG.debug(ex) return None
def backup(self): """Run a backup by running through a LVM snapshot against the device the MySQL datadir resides on """ # connect to mysql and lookup what we're supposed to snapshot try: self.client.connect() datadir = os.path.realpath(self.client.show_variable("datadir")) except MySQLError as exc: raise BackupError("[%d] %s" % exc.args) LOG.info("Backing up %s via snapshot", datadir) # lookup the logical volume mysql's datadir sits on try: volume = LogicalVolume.lookup_from_fspath(datadir) except LookupError as exc: raise BackupError("Failed to lookup logical volume for %s: %s" % (datadir, str(exc))) except Exception as ex: raise BackupError("Failed to lookup logical volume for %s: %s" % (datadir, str(ex))) # create a snapshot manager snapshot = build_snapshot(self.config["mysql-lvm"], volume, suppress_tmpdir=self.dry_run) # calculate where the datadirectory on the snapshot will be located rpath = relpath(datadir, getmount(datadir)) snap_datadir = os.path.abspath(os.path.join(snapshot.mountpoint, rpath)) # setup actions to perform at each step of the snapshot process setup_actions( snapshot=snapshot, config=self.config, client=self.client, snap_datadir=snap_datadir, spooldir=self.target_directory, ) if self.dry_run: return _dry_run(self.target_directory, volume, snapshot, datadir) try: snapshot.start(volume) except CallbackFailuresError as exc: for callback, error in exc.errors: LOG.error("%s: %s", callback, error) raise BackupError("Error occurred during snapshot process. Aborting.") except LVMCommandError as exc: # Something failed in the snapshot process raise BackupError(str(exc)) except BaseException as ex: LOG.debug(ex) return None
volume = LogicalVolume.lookup_from_fspath(datadir) except LookupError, exc: raise BackupError("Failed to lookup logical volume for %s: %s" % (datadir, str(exc))) # create a snapshot manager snapshot = build_snapshot(self.config['mysql-lvm'], volume, suppress_tmpdir=self.dry_run) # calculate where the datadirectory on the snapshot will be located rpath = relpath(datadir, getmount(datadir)) snap_datadir = os.path.abspath(os.path.join(snapshot.mountpoint, rpath)) # setup actions to perform at each step of the snapshot process setup_actions(snapshot=snapshot, config=self.config, client=self.client, snap_datadir=snap_datadir, spooldir=self.target_directory) if self.dry_run: return self._dry_run(volume, snapshot, datadir) try: snapshot.start(volume) except CallbackFailuresError, exc: # XXX: one of our actions failed. Log this better for callback, error in exc.errors: LOG.error("%s", error) raise BackupError("Error occurred during snapshot process. Aborting.") except LVMCommandError, exc: # Something failed in the snapshot process
except LookupError, exc: raise BackupError("Failed to lookup logical volume for %s: %s" % (datadir, str(exc))) # create a snapshot manager snapshot = build_snapshot(self.config['mysql-lvm'], volume, suppress_tmpdir=self.dry_run) # calculate where the datadirectory on the snapshot will be located rpath = relpath(datadir, getmount(datadir)) snap_datadir = os.path.abspath(os.path.join(snapshot.mountpoint, rpath)) # setup actions to perform at each step of the snapshot process setup_actions(snapshot=snapshot, config=self.config, client=self.client, snap_datadir=snap_datadir, spooldir=self.target_directory) if self.dry_run: return self._dry_run(volume, snapshot, datadir) try: snapshot.start(volume) except CallbackFailuresError, exc: # XXX: one of our actions failed. Log this better for callback, error in exc.errors: LOG.error("%s", error) raise BackupError( "Error occurred during snapshot process. Aborting.") except LVMCommandError, exc: