mythfilldatabase fills the Myth database program table with upcoming shows. It downloads data from schedule providers and loads channel names and program details into the MythTV database.
There are two data formats supported.
- Data Direct format is an older format that is supported but not recommended. Only one provider of schedules information, Schedules Direct supports this format and only for USA TV programs. Since Schedules Direct now also supports XMLTV format, and provides better data that way, that is to be preferred.
- XMLTV format is supported by many providers for many countries.
When running mythtv-setup, the Setup Video Sources section will configure information necessary for running mythfilldatabase. The Program Schedule Downloading Options section of Setup General tells the mythtv backend whether to run mythfilldatabase, when to run it and what parameters to use.
If you set up the mythfilldatabase options in MythTV setup, the backend will run it once a day, based on your settings. When you are using XMLTV, mythfilldatabase internally invokes the XMLTV grabber you have selected, downloads that data into a temporary file, then reads that data and processes it into the database.
If you prefer, you can uncheck Automatically update program listings in setup, and use any method you prefer to run mythfilldatabase once a day (e.g. cron, anacron). You can also do a manual run, even if you already ran it that day, at any time. For example if your daily run failed, or you just added some new channels, you can run it manually to get the latest schedules updated.
When using XMLTV, mythfilldatabase can use a lot of main memory. If you have 200 or more channels and you are processing 21 days of schedules it can use 5 GB of resident memory. If your backend only has 4 GB of memory this will start swapping, causing mythfilldatabase to take a very long time and possibly causing recordings to fail. You should do a manual run of mythfilldatabase and watch the memory usage using top to determine if you have a problem. This is particularly true if you previously used the Data Direct format, which does not have this problem.
To reduce the memory usage, you can run a few days of data at a time. I have found that running 3 days of data at a time uses around 500 MB of main memory. To achieve this you will need to set up a script that calls the xmltv grabber and mythfilldatabase repeatedly. Instead of having mythfilldatabase call the grabber internally you will do that in the script. You can name this script in the backend setup so that the backend calls it automatically every day. See the following example. It is very important to get the correct SOURCEID. See #Find out the source id of your card.
#!/bin/bash SOURCEID=2 grabber="tv_grab_zz_sdjson_sqlite" rm -f /tmp/tv_grab_off*.xml for (( offset = 0; offset < 20; offset += 3 )) ; do "$grabber" --days 3 --offset $offset > /tmp/tv_grab_off$offset.xml mythfilldatabase --file --sourceid $SOURCEID --xmlfile /tmp/tv_grab_off$offset.xml done
By default, mythfilldatabase will add or update channels that are included in the input file if the tuner type supports it. That is any tuner that does not scan for channels. If you have previously added channels from a different grabber or manually, this may create duplicate channels. In many cases having it add the channels for you is convenient and avoids a lot of manual work. If you find it has duplicated channels you can use Delete All from Setup Channel Editor to delete all the channels and allow mythfilldatabase to add them. You can override this behavior in mythfilldatabase with the --only-update-guide option, in which case you will have to set up your channels manually.
If you have a tuner that scans for channels or you use the --only-update-guide option, you will have to set up your channels manually using Setup Channel Editor and/or the channel editor in mythweb. The channel editor in mythweb is easier to use but does not allow adding channels. You need to enter the xmltv id for each channel in a format that corresponds with the xmltv id in the download file.
Command line options
~$ mythfilldatabase -h mythfilldatabase version: mythtv-fixes/0.28 [v0.28-42-g63477ef] www.mythtv.org Misc. Options: --dd-file Bypass grabber, and read SD data from file --lineupid DataDirect lineup of input xml file --offset Day offset of input xml file --xmlfile XML file to import manually --dd-grab-all refresh full data using DataDirect --file Bypass grabbers and define sourceid and file --xmlfile XML file to import manually --manual Run interactive configuration --no-mark-repeats do not mark repeats --preset Use channel preset values instead of numbers -h OR --help OR --usage Display this help printout, or give detailed information of selected option. --version Display version information. --sourceid Operate on single source Channel List Handling Options: --do-channel-updates update channels using datadirect --do-not-filter-new-channels don't filter ATSC channels for addition --only-update-channels only update channel lineup --remove-new-channels disable new channels on datadirect web interface Filtering Options: --dont-refresh-tba don't refresh "To be announced" programs --max-days force number of days to update --refresh Provide a day or range of days to refresh. Can be used repeatedly. Logging Options: --enable-dblog Enable logging to database. --loglevel Set the logging level. All log messages at lower levels will be discarded. In descending order: emerg, alert, crit, err, warning, notice, info, debug defaults to info --logpath Writes logging messages to a file in the directory logpath with filenames in the format: applicationName.date.pid.log. This is typically used in combination with --daemon, and if used in combination with --pidfile, this can be used with log rotators, using the HUP call to inform MythTV to reload the file -q OR --quiet Don't log to the console (-q). Don't log anywhere (-q -q) --syslog Set the syslog logging facility. Set to "none" to disable, defaults to none. -v OR --verbose Specify log filtering. Use '-v help' for level info. Guide Data Handling Options: --only-update-guide Only update guide data
If you are using a non-compliant XMLTV grabber where mythfilldatabase will not automatically work in the normal way you will need to use the --file flag.
Obtain xml file of tv guide
Here in Belgium, I use pytvgrab to get my tv guide and output to an xml file:
$ tv_grab_be_tvb --configure (you only need this the first time) $ tv_grab_be_tvb -o belgium.xml
Find out the source id of your card
This is normally '1' if you have only one input card, but it is best to check it out because I have found if I have run mythtv setup more than once it can end up being something other than 1. To check, you need to look at the database:
$ mysql -u root mythconverg mysql> select * from videosource; +----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+ | sourceid | name | xmltvgrabber | userid | freqtable | lineupid | password | useeit | configpath | dvb_nit_id | +----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+ | 2 | SD | tv_grab_na_sd | | default | MA20453:X | NULL | 0 | NULL | -1 | +----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+ 1 row in set (0.00 sec)
This shows all of your sources and the id's. Remember the source id.
You may need to do multiple runs, e.g. one run with --sourceid 1, and then second run with --sourceid 2.
If you have run with an invalid source id, you will need to go into mythtv-setup and delete all of the incorrect channels that were created.
Run mythfilldatabase as follows:
mythfilldatabase --file --sourceid <sourceid> --xmlfile belgium.xml
Before you run it the first time you will need to setup the grabber. This is explained on the XMLTV page.
mythfilldatabase causes the system to hang
This is probably an I/O saturation issue. mythfilldatabase and MySQL can cause hard disk or ATA bus saturation, causing Mythbackend to starve. Older versions of MySQL would cause disk thrashing because of the use of write barriers. That could be solved by adding nobarrier to the /etc/fstab entry for the file system that holds your database (normally the root filesystem):
UUID=900c3f88-ce0c-4a92-8e28-9ac04fdd1b09 / ext4 nobarrier,errors=remount-ro 0 1
Note that this could cause file system corruption if you have power failures or system crashes. If that is a concern you should move the databse to a separate file system. With recent versions of Linux and MySQL barriers no longer cause this problem.
This also be caused by excessive memory usage. See Memory Usage above.