Package CedarBackup3 :: Package extend :: Module mysql
[hide private]
[frames] | no frames]

Module mysql

source code

Provides an extension to back up MySQL databases.

This is a Cedar Backup extension used to back up MySQL databases via the Cedar Backup command line. It requires a new configuration section <mysql> and is intended to be run either immediately before or immediately after the standard collect action. Aside from its own configuration, it requires the options and collect configuration sections in the standard Cedar Backup configuration file.

The backup is done via the mysqldump command included with the MySQL product. Output can be compressed using gzip or bzip2. Administrators can configure the extension either to back up all databases or to back up only specific databases. Note that this code always produces a full backup. There is currently no facility for making incremental backups. If/when someone has a need for this and can describe how to do it, I'll update this extension or provide another.

The extension assumes that all configured databases can be backed up by a single user. Often, the "root" database user will be used. An alternative is to create a separate MySQL "backup" user and grant that user rights to read (but not write) various databases as needed. This second option is probably the best choice.

The extension accepts a username and password in configuration. However, you probably do not want to provide those values in Cedar Backup configuration. This is because Cedar Backup will provide these values to mysqldump via the command-line --user and --password switches, which will be visible to other users in the process listing.

Instead, you should configure the username and password in one of MySQL's configuration files. Typically, that would be done by putting a stanza like this in /root/.my.cnf:

  [mysqldump]
  user     = root
  password = <secret>

Regardless of whether you are using ~/.my.cnf or /etc/cback3.conf to store database login and password information, you should be careful about who is allowed to view that information. Typically, this means locking down permissions so that only the file owner can read the file contents (i.e. use mode 0600).


Author: Kenneth J. Pronovici <pronovic@ieee.org>

Classes [hide private]
  MysqlConfig
Class representing MySQL configuration.
  LocalConfig
Class representing this extension's configuration document.
Functions [hide private]
 
executeAction(configPath, options, config)
Executes the MySQL backup action.
source code
 
_backupDatabase(targetDir, compressMode, user, password, backupUser, backupGroup, database=None)
Backs up an individual MySQL database, or all databases.
source code
 
_getOutputFile(targetDir, database, compressMode)
Opens the output file used for saving the MySQL dump.
source code
 
backupDatabase(user, password, backupFile, database=None)
Backs up an individual MySQL database, or all databases.
source code
Variables [hide private]
  logger = <logging.Logger object>
  MYSQLDUMP_COMMAND = ['mysqldump']
  __package__ = 'CedarBackup3.extend'
Function Details [hide private]

executeAction(configPath, options, config)

source code 

Executes the MySQL backup action.

Parameters:
  • configPath (String representing a path on disk.) - Path to configuration file on disk.
  • options (Options object.) - Program command-line options.
  • config (Config object.) - Program configuration.
Raises:
  • ValueError - Under many generic error conditions
  • IOError - If a backup could not be written for some reason.

_backupDatabase(targetDir, compressMode, user, password, backupUser, backupGroup, database=None)

source code 

Backs up an individual MySQL database, or all databases.

This internal method wraps the public method and adds some functionality, like figuring out a filename, etc.

Parameters:
  • targetDir - Directory into which backups should be written.
  • compressMode - Compress mode to be used for backed-up files.
  • user - User to use for connecting to the database (if any).
  • password - Password associated with user (if any).
  • backupUser - User to own resulting file.
  • backupGroup - Group to own resulting file.
  • database - Name of database, or None for all databases.
Returns:
Name of the generated backup file.
Raises:
  • ValueError - If some value is missing or invalid.
  • IOError - If there is a problem executing the MySQL dump.

_getOutputFile(targetDir, database, compressMode)

source code 

Opens the output file used for saving the MySQL dump.

The filename is either "mysqldump.txt" or "mysqldump-<database>.txt". The ".bz2" extension is added if compress is True.

Parameters:
  • targetDir - Target directory to write file in.
  • database - Name of the database (if any)
  • compressMode - Compress mode to be used for backed-up files.
Returns:
Tuple of (Output file object, filename), file opened in binary mode for use with executeCommand()

backupDatabase(user, password, backupFile, database=None)

source code 

Backs up an individual MySQL database, or all databases.

This function backs up either a named local MySQL database or all local MySQL databases, using the passed-in user and password (if provided) for connectivity. This function call always results a full backup. There is no facility for incremental backups.

The backup data will be written into the passed-in backup file. Normally, this would be an object as returned from open(), but it is possible to use something like a GzipFile to write compressed output. The caller is responsible for closing the passed-in backup file.

Often, the "root" database user will be used when backing up all databases. An alternative is to create a separate MySQL "backup" user and grant that user rights to read (but not write) all of the databases that will be backed up.

This function accepts a username and password. However, you probably do not want to pass those values in. This is because they will be provided to mysqldump via the command-line --user and --password switches, which will be visible to other users in the process listing.

Instead, you should configure the username and password in one of MySQL's configuration files. Typically, this would be done by putting a stanza like this in /root/.my.cnf, to provide mysqldump with the root database username and its password:

  [mysqldump]
  user     = root
  password = <secret>

If you are executing this function as some system user other than root, then the .my.cnf file would be placed in the home directory of that user. In either case, make sure to set restrictive permissions (typically, mode 0600) on .my.cnf to make sure that other users cannot read the file.

Parameters:
  • user (String representing MySQL username, or None) - User to use for connecting to the database (if any)
  • password (String representing MySQL password, or None) - Password associated with user (if any)
  • backupFile (Python file object as from open() or file().) - File use for writing backup.
  • database (String representing database name, or None for all databases.) - Name of the database to be backed up.
Raises:
  • ValueError - If some value is missing or invalid.
  • IOError - If there is a problem executing the MySQL dump.