Skip to content

Instantly share code, notes, and snippets.

@mattrude
Last active February 28, 2025 03:05
Show Gist options
  • Save mattrude/8417d5df7b9f587704bbfdc0ac6a09ce to your computer and use it in GitHub Desktop.
Save mattrude/8417d5df7b9f587704bbfdc0ac6a09ce to your computer and use it in GitHub Desktop.

MediaWiki Backup Script

curl -Ls https://gist.githubusercontent.com/mattrude/8417d5df7b9f587704bbfdc0ac6a09ce/raw/install.sh |sh

List timers

systemctl list-timers --all
#!/bin/sh
curl -Ls 'https://gist.githubusercontent.com/mattrude/8417d5df7b9f587704bbfdc0ac6a09ce/raw/mediawiki-backup.sh' \
-o /usr/local/bin/mediawiki-backup.sh
curl -Ls 'https://gist.githubusercontent.com/mattrude/8417d5df7b9f587704bbfdc0ac6a09ce/raw/mediawiki-backup.service' \
-o /etc/systemd/system/mediawiki-backup.service
curl -Ls 'https://gist.githubusercontent.com/mattrude/8417d5df7b9f587704bbfdc0ac6a09ce/raw/mediawiki-backup.timer' \
-o /etc/systemd/system/mediawiki-backup.timer
chmod 750 /usr/local/bin/mediawiki-backup.sh
systemctl daemon-reload
systemctl enable mediawiki-backup.timer
systemctl start mediawiki-backup.timer
[Unit]
Description=Run the mediawiki-backup.sh service once a day
Documentation=https://gist.github.com/mattrude/8417d5df7b9f587704bbfdc0ac6a09ce
[Service]
Type=oneshot
User=root
ExecStart=/usr/local/bin/mediawiki-backup.sh
#!/bin/bash
echo ""
echo "MediaWiki Backup Starting at `date`."
echo " -------------------------------"
BackupLOC='/backup'
BKDATE=`date +%w-%Y%m%d`
mkdir -p ${BackupLOC}
cd /var/www/
for SITE in `ls */LocalSettings.php |sed 's/\/LocalSettings.php//g'`
do
echo " Starting on site ${SITE} @ `date`"
DBTYPE=`grep '$wgDBtype' ${SITE}/LocalSettings.php |awk '{ print $3 }' |sed 's/"//g' |sed 's/;//g'`
DBNAME=`grep '$wgDBname' ${SITE}/LocalSettings.php |awk '{ print $3 }' |sed 's/"//g' |sed 's/;//g'`
DBUSER=`grep '$wgDBuser' ${SITE}/LocalSettings.php |awk '{ print $3 }' |sed 's/"//g' |sed 's/;//g'`
DBPASS=`grep '$wgDBpassword' ${SITE}/LocalSettings.php |awk '{ print $3 }' |sed 's/"//g' |sed 's/;//g'`
BKDIR=/tmp/mediawiki-backup/${SITE}
mkdir -p ${BKDIR}/
####################################################################################
echo -n " ${SITE}: Starting Database Repair..."
if MYSQL_PWD="${DBPASS}" \
mysqlcheck ${DBNAME} --auto-repair --user=${DBUSER} 1>/dev/null;
then
echo "Done!"
else
echo "Failed to repair wiki database!!!!"
echo " ${SITE}: Continuing anyways"
fi
####################################################################################
echo -n " ${SITE}: Creating SQL Database Backup..."
mysqldump ${DBNAME} |gzip > /var/www/${DBNAME}-${BKDATE}.sql.gz
echo "Done!"
####################################################################################
cd ${BKDIR}/
echo -n " ${SITE}: Removing old backups..."
rm -f ${BackupLOC}/${DBNAME}-`date +%w`-*.tgz
echo "Done!"
echo -n " ${SITE}: Creating new backup (tar file)..."
tar -czPf ${BackupLOC}/${DBNAME}-${BKDATE}.tgz \
/var/www/${DBNAME}-${BKDATE}.sql.gz \
/var/www/${SITE}/LocalSettings.php \
/var/www/${SITE}/images \
/etc/nginx/mediawiki.conf \
/etc/nginx/sites-enabled/${DBNAME}.conf
echo "Done!"
####################################################################################
echo -n " ${SITE}: Removing temporary files..."
rm /var/www/${DBNAME}-${BKDATE}.sql.gz
echo "Done!"
####################################################################################
echo " -------------------------------"
done
echo "MediaWiki Backup Complete."
[Unit]
Description=Run the mediawiki-backup.sh service once a day
Documentation=https://gist.github.com/mattrude/8417d5df7b9f587704bbfdc0ac6a09ce
[Timer]
OnCalendar=*-*-* 05:10:00
RandomizedDelaySec=600
Persistent=true
[Install]
WantedBy=timers.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment