Creating a useful backup for a a web app like MediaWIki is somewhat more complicated process than backing up somebody's home directory.
While there is no warranty, I have tested this script on the Debian GNU/LINUX Wheezy release. Tonight I used it for reals to move a MedaiWiki on dead Wheezy server to a living Squeeze server.
Assuming you have a
working, somewhat standard MediaWiki setup on Debian Wheezy (and probably squeeze), the script below creates a complete tarball backup of your Debian Wheezy MediaWiki install, including:
- Database
- MediaWiki configuration
- PHP configuration
- Apache configuraiton
- README.restore , containing complete instructions on restoring your MediaWiki
By default, the script deletes backups older than 90 days, Edit the script and change the variable:
delete_after_days if you don't like this.
To install / test install:
- copy the script below to /etc/cron.daily/backup_media
- edit the script to change the config variables (probably just mysqlopt to set mysql root password)
- make the script executable
- make the script readable only by root
- run the script.
- untar the tarball in /var/backups/mediawiki/
- examine the tarball contents, in particular README.restore
#!/bin/sh
# based on http://www.mediawiki.org/wiki/User:Megam0rf/WikiBackup
########### start configuration variables#########
# You need to change this:
mysqlopt="--user=root --password=your-mysql-db-root-password" # user/password to run mysql dump as
# you might want to change this:
delete_after_days=90 # how long to keep the backups
# you probably don't need to change these:
now=`date +%Y-%m-%d-%H_%M-%a` # used to give you timestamped backup files,
backupdir=/var/backups/mediawiki # the directory to write the backup tar file to
dump_dir="$backupdir/mediawiki_backup.d/" # directory to hold backed up files
db_dumpfile="$dump_dir/mediawiki-restore.sql" # database dump to this file
tarfile="$backupdir/mediawiki-backup-$now.tgz";
########### no more configuration variables below #########
mkdir -p $dump_dir || exit $?
# dump the database
mysqldump $mysqlopt wikidb | gzip > "$db_dumpfile.gz" || exit $?
cp -ar /etc/mediawiki $dump_dir/etc-mediawiki || exit $?
cp -ar /var/www/mediawiki_images $dump_dir/var-www-mediawiki_images || exit $?
cp -ar /etc/cron.daily/backup_mediawiki $dump_dir/ || exit $?
cat << 'EOF' > "$dump_dir/mediawiki-setup.sql"
-- ################# start HEREDOC for mediawiki-setup.sql" #################
START TRANSACTION;
CREATE DATABASE wikidb;
USE wikidb;
CREATE USER 'wiki'@'localhost';
GRANT DELETE ON wikidb.* TO wiki;
GRANT SELECT ON wikidb.* TO wiki;
GRANT UPDATE ON wikidb.* TO wiki;
GRANT INSERT ON wikidb.* TO wiki;
-- CHANGE mysql 'password' (below) to password you configured
-- Mediawiki to connect to database with see:
-- grep wgDBpassword etc-mediawiki/LocalSettings.php
SET PASSWORD FOR wiki = password('password');
COMMIT;
-- ################# end HEREDOC for mediawiki-setup.sql" #################
EOF
cat << 'EOF' > "$dump_dir/README.restore"
################# start HEREDOC for README.restore #################
# To restore on Debian wheezy run commands below
# Assumptions are that you:
# use mysql / apache
# will handle Dns on your own.
# know what the root mysql password is on your system
sudo apt-get install php5-mysql mysql-server mediawiki mediawiki-extensions-base mediawiki-math
sudo apt-get install mediawiki-extensions-confirmedit mediawiki-extensions-openid
# follow comment about changing password
# re-discover password configured mediawiki to connect to mysql with
grep wgDBpassword etc-mediawiki/LocalSettings.php
# change script to use that password for the mysql user 'wiki'
sudo $EDITOR mediawiki-setup.sql
# unzip the database backup
gunzip mediawiki-restore.sql.gz
# create the dataase and database user
mysql -u root --password=the-password-for-wikiuser < mediawiki-setup.sql
# restore the database
mysql -u root --password=your-mysql-root-password wikidb < mediawiki-restore.sql
# copy the files
sudo mv /etc/mediawiki /etc/mediawiki.original
sudo mv etc-mediawiki /etc/mediawiki
sudo mv var-www-mediawiki_images /var/www/mediawiki_images
sudo mv backup_mediawiki /etc/cron.daily/
# replace the default apache conf file for mediawiki with yours
sudo rm /etc/apache2/conf.d/mediawiki.conf
sudo ln -s /etc/mediawiki/apache.conf /etc/apache2/sites-enabled/wiki.conf
# set the mysql root password and other parameters you care to change
sudo $EDITOR /etc/cro.daily/backup_mediawiki
################# Stop HEREDOC for README.restore #################
EOF
cd $backupdir
tar -zcf $tarfile mediawiki_backup.d/ || exit $?
rm -rf mediawiki_backup.d/ || exit $?
/usr/bin/find $backupdir -type f -mtime +$delete_after_days -exec rm {} \;
############ END of backup script ###############