[mythtv-commits] Ticket #4760: Use a script for the database backup
MythTV
mythtv at cvs.mythtv.org
Sun Feb 24 02:36:07 UTC 2008
#4760: Use a script for the database backup
----------------------------------------------+-----------------------------
Reporter: sphery <mtdean at thirdcontact.com> | Owner: ijr
Type: patch | Status: new
Priority: minor | Milestone: unknown
Component: mythtv | Version: head
Severity: medium | Mlocked: 0
----------------------------------------------+-----------------------------
The attached patch, mythtv-database_backup_using_script.patch , modifies
the new automatic database backup functionality to invoke a script
(potentially a distro-specific script) to create the database backup.
It's primary purpose is to allow packagers to customize the database
backup procedure and to remove the code in myth calling the externally-
provided binaries, mysqldump and gzip. It also has the additional
advantage of allowing users to perform database backups whenever desired
(i.e. in startup/shutdown scripts, in a cron job, ...) in such a way that
the automatically-created database backups are no different from the
manually-created backups.
The script path can be specified with the "undocumented" setting
"DatabaseBackupScript" (default value gContext->GetShareDir() +
"database_mythconverg_backup.sh"). A matching script
(gContext->GetShareDir() + "database_mythconverg_restore.sh") can be used
by the user to restore the database from a backup created by
database_mythconverg_backup.sh. If either script is customized by the
packager, the other script should be tested to verify it works with the
other. This way, any distribution-specific backup/restore
parameters/techniques can be hidden within the scripts, yet the MythTV
HOWTO can provide generic guidance on backing up and restoring the
database.
To prevent the user from having to configure the database within MythTV
and within the database backup script, a temporary database information
file is created with name=value pairs specifying dbHostName, dbPort,
dbUserName, dbPassword, dbName, dbSchemaVer, dbBackupDirectory, and
dbBackupFilename. The information file is written with only read by owner
filesystem permissions and is deleted immediately after execution of the
backup script.
The database information file provides the dbBackupDirectory to ensure
that the script can place the backup in the appropriate directory, i.e. as
specified in the DB Backups storage group. The dbBackupFilename
"suggested" filename is also provided for use by the script. Since it is
impossible to force the script to use these values, Myth will check for
the existence of a file in the dbBackupDirectory whose name begins with
dbBackupFilename, perhaps with additional extensions--such as ".gz". If
any files matching the pattern are found, the filename will be returned to
be used for the GUI messages; if the script uses some other directory or
filename, the returned filename will be "", thus preventing GUI messages
specifying the name of the backup file. To ensure this works, the script
must provide a proper exit code.
The backup script is executed with a single command-line argument
providing the name of the temporary database information file. The
restore script will provide "--help" output to help the user determine the
appropriate command-line arguments to pass the script.
Example scripts will be provided in the new programs/scripts directory (an
initial backup script is in the separate patch, mythtv-
database_backup_scripts.patch ) and will be installed to the sharedir.
Packagers who customize the scripts are encouraged to create restore
scripts using similar command-line arguments to those specified in the
programs/scripts/database_mythconverg_restore.sh script to make usage of
scripts easier. If you would like the scripts placed in a different
location within the source distribution or at install, please let me know.
Currently, only the database_mythconverg_backup.sh script is provided. I
began it as a shell script thinking it would be relatively quick and
simple, but the script grew ever more complex as I tried to make a
relatively-secure script that could also be used for "manual" backups.
The script has already grown large enough that it may make sense to
rewrite it in Perl. Please let me know whether a sh-based or Perl-based
script would be preferable.
I plan to add code to allow rotation of backups and to allow the user to
specify default values/configuration in a separate configuration file
(especially useful for manual execution). The
database_mythconverg_restore.sh script will provide full getopts support
as well as attempt to parse configuration files to determine database
configuration information. However, not knowing whether the devs would
prefer a sh-based approach or a complete rewrite to Perl, I decided to
upload what I had for review rather than write a bunch more code only to
have to reimplement it later in another language. Once the appropriate
script language is decided, I can finish both scripts rather quickly
(though I won't have a chance to do much work on them until next weekend--
around Mar 1).
Most all of the ideas in here came from Daniel K., Rob S., and Stuart M.
on IRC. I'll take responsibility for all the errors, oversights, and bad
ideas, though.
--
Ticket URL: <http://svn.mythtv.org/trac/ticket/4760>
MythTV <http://svn.mythtv.org/trac>
MythTV
More information about the mythtv-commits
mailing list