CedarBackup2.extend.mysql

Package CedarBackup2 :: 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/cback.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.getLogger("CedarBackup2.log.extend.mysql")`
| MYSQLDUMP_COMMAND = ``[``'``mysqldump``'``]``
| __package__ = ``'``CedarBackup2.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)

### 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.