User Manual:Periodic Maintenance

From MythTV Official Wiki
Revision as of 07:34, 26 January 2009 by Contrivance (Talk | contribs)

Jump to: navigation, search
Previous Up Next
Go-prev.png User Manual:Regression Testing Go-up.png User Manual:Index User_Manual:Technical_Details Go-next.png


This page is up-to-date to MythTV version 0.20


Maintaining your MythTV

Your MythTV system can continue to run for weeks, months or even years. Of course, hardware fails, techies fiddle, and power-outages, tornadoes, and alien takeovers happen. But, if you are interested in keeping your MythTV alive for as long as possible, here's a few suggestions.

Backup

Your system is only as good as your backup. What? No Backup? You can't be serious... Well, now is the time to start backing it up. Why? Although you had fun building it and are confident you can rebuild quickly so you don't miss your favorite shows, there are two parts of MythTV that aren't easily replaceable: the database, and your media content (TV recordings, videos, photos, music, etc.)

The database

The database stores a whole lot of stuff you will only miss when it's gone. For example, it keeps a history of every show you've recorded, which is very nice when you don't want to re-record the same show over again. It keeps all the settings of your backends and frontends, it keeps metadata of all your videos (titles, director, parental levels, etc.), it keeps all the commercial flaggings, and more.

You can take a backup of your database with the mysqldump command

$ mysqldump -u mythtv -pmythtv mythconverg -c > mythtv_backup.sql

To restore: (assuming that you've dropped the database)

$ mysql -u root
  mysql>create database mythconverg;
  mysql>exit
$ mysql -u mythtv -pmythtv mythconverg < mythtv_backup.sql

Probably the easiest way to backup the database is to create a cron job that will dump the data out to a file. Here's a sample script that I put in /etc/cron.daily/

#!/bin/sh
#Dumps the mythconverg database - daily backup
#Keeps the last 7 days
DAY=`/bin/date +%u`
DUMPFILE="mythdb_$DAY.sql.gz"
/usr/bin/mysqldump -u mythtv -pmythtv mythconverg -c \
      > /mnt/foo/sqldump/$DUMPFILE
exit 0

This will keep a rotating backup of the last 7 days. In this example, I've used a link (/mnt/foo/sqldump/) to a location on a remote server for storing the dump, for added protection.

As dump files of the MythTV database tend to be pretty big, it is probably a good idea to compress these files (especially if you transfer the backup to a remote server). To do this using bzip2, just modify lines 5 & 6 as follows:

DUMPFILE="mythdb_$DAY.sql.bz2"
/usr/bin/mysqldump -u mythtv -pmythtv mythconverg -c |\
      /usr/bin/bzip2 -cq9 > /mnt/foo/sqldump/$DUMPFILE

Backing up to a remote server

Using rsync along with a trusted ssh connection is a way to move backup files from the current machine (your MythTV server) to an alternate machine you may have set up for backup. rsync supports many protocols, including rsh and ssh. This example demonstrates ssh.

#!/bin/bash
# In this example, the source machine is "startrek", and the remote backup server is "stargate".

# Requires ssh tools to make connection to remote host.
# (If you use Debian/Ubuntu, apt-get install keychain).
source /root/.keychain/startrek-sh

# Store knowledge of all currently installed packages. Restore with dpkg --set-selections
# (This is good for Debian/Ubuntu users, along with any other distro based on apt/dpkg pkg mgt).
dpkg --get-selections > /startrek_pkgs.txt

# Backup up all databases. To restore, shutdown the database, move the ib_* files somewhere else,
# startup the database, and the mysql -u root < /mysql_backup.txt.
# (P.S. This is a good place to put in the example listed above!)
mysqldump -A -u root > /mysql_backup.sql

# Push all the files to the backup disk using rsync. This preserves file permissions,
# and also deletes old files on the receiving end not found on the sending end.
#
# This example pushes everything from the listed folders out to destination "stargate",
# stored in a folder designated for this local machine "startrek". It backs up a wiki site,
# all the kernels built as "deb's", the /home partition, the /etc files, and all the 
# /usr/local/src packages (like MythTV SVN!)
rsync -avq --delete --stats --progress
         /startrek_pkgs.txt /mysql_backup.sql /var/www/mediawiki/images
         /var/www/mediawiki/LocalSettings.php /usr/src/*.deb /home* /usr/local/src
         /etc** 
         stargate:/mnt/backup/startrek

Optimize the Database

Myth interacts with its database all the time. Without optimization, some of the queries will run slower and slower. For example, the scheduler query evaluates all of the recording rules against every upcoming listing and against all previously recorded shows. This is a complicated query that takes a noticeable amount of time to run on an optimized database. It can easily take 5 times longer on a fragmented database.

In the contrib directory there is a Perl script, optimize_mythdb.pl to run MYSQL utilities Repair and Optimize on each table in your MythTV database. It is recommended to run it regularly from a cron job. It uses the perl bindings to connect to the database and therefore should run with no further configuration.

Note that each table in the database is locked while the repair and optimize is performed. Therefore, the script should only be run when Myth is otherwise idle. Monthly execution may be sufficient. Daily may be overkill but ought to be harmless if the system would not otherwise be busy. Be sure that you have an appropriate backup strategy in place, as well.

First make sure it is executable:

   chmod 755 /usr/share/doc/mythtv-docs-0.21/contrib/optimize_mythdb.pl

Create a shell script to run the job:

###### optimize_mythdb.sh
#!/bin/sh

OPT_MYTHDB='/usr/share/doc/mythtv-docs-0.21/contrib/optimize_mythdb.pl'
LOG='/var/log/mythtv/optimize_mythdb.log'

echo "Started ${OPT_MYTHDB} on `date`" >> ${LOG}
${OPT_MYTHDB} >> ${LOG}
echo "Finished ${OPT_MYTHDB} on `date`" >> ${LOG} 

run with your (daily|weekly|monthly) cron jobs

The media

TODO: media backup

You can backup recordings with a command line program called nuvexport. When run, you will be given an option to export a chosen recording to a location of your choice, giving a new .nuv file along with a .sql file containing information on the recording. This can also be used to import the recording into another mythtv system.

mythrename.pl

There is a utility written by Chris Peterson (of mythweb fame), which will create human readable filenames of your recordings. This allows you to archive them away and know what they are by reading the filename. It can optionally create symlinks instead of renaming the files.

For more info, see the output of mythrename.pl --help

If you can't locate the mythrename.pl script, try looking in /usr/share/doc/mythtv-0.20/contrib (insert actual mythtv version as appropriate).

OS and software maintenance

I'll start by saying: If it ain't broke, don't fix it! This is more difficult to follow if your MythTV serves other purposes besides Myth. I might add that if you have non-technical people using Myth for their daily TV watching, they will appreciate you keeping your hands off. If you must mess with Myth, please be sure to backup before you do. Expect that fixing one thing will break another.