Backup-wiki-locally
Jump to navigation
Jump to search
#!/bin/bash # # cron-drivable script that perfroms a full backup of the wiki instance (database content, # content files, configuration) # backup_dir=/root/wiki-backup-directory database_host=localhost database_user=... database_password=... database_name=... document_root=/var/www/kb.novaordis.com function timestamp() { date +'%y.%m.%d-%H.%M.%S' } function backup-database() { local backup_timestamp=$1 local database_host=$2 local database_user=$3 local database_password=$4 local database_name=$5 local backup_dir=$6 [ "${backup_timestamp}" = "" ] && { echo "'backup_timestamp' not specified" 1>&2; exit 1; } [ "${database_host}" = "" ] && { echo "'database_host' not specified" 1>&2; exit 1; } [ "${database_user}" = "" ] && { echo "'database_user' not specified" 1>&2; exit 1; } [ "${database_password}" = "" ] && { echo "'database_password' not specified" 1>&2; exit 1; } [ "${database_name}" = "" ] && { echo "'database_name' not specified" 1>&2; exit 1; } [ "${backup_dir}" = "" ] && { echo "'backup_dir' not specified" 1>&2; exit 1; } [ -d ${backup_dir} ] || { echo "invalid backup directory ${backup_dir}" 1>&2; exit 1; } local backup_file=${backup_dir}/novaordis_wiki-database-${backup_timestamp}.sql echo -n "backing up the wiki database as ${backup_file} ... " if mysqldump -h ${database_host} -u ${database_user} --password=${database_password} --default-character-set=binary ${database_name} > ${backup_file}; then echo "ok" else echo "failed to back up the database" 1>&2; exit 1 fi } function backup-files() { local backup_timestamp=$1 local document_root=$2 local backup_dir=$3 [ "${backup_timestamp}" = "" ] && { echo "'backup_timestamp' not specified" 1>&2; exit 1; } [ "${document_root}" = "" ] && { echo "'document_root' not specified" 1>&2; exit 1; } [ -d ${document_root} ] || { echo "invalid document root ${document_root}" 1>&2; exit 1; } [ "${backup_dir}" = "" ] && { echo "'backup_dir' not specified" 1>&2; exit 1; } [ -d ${backup_dir} ] || { echo "invalid backup directory ${backup_dir}" 1>&2; exit 1; } local backup_file=${backup_dir}/novaordis_wiki-files-${backup_timestamp}.zip echo -n "backing up the wiki files as ${backup_file} ... " if zip -r -q ${backup_file} ${document_root}; then echo "ok" else echo "failed to back up the document root" 1>&2; exit 1 fi } function create-top-level-backup-file() { local this_backup_dir=$1 [ "${this_backup_dir}" = "" ] && { echo "'this_backup_dir' not specified" 1>&2; exit 1; } [ -d ${this_backup_dir} ] || { echo "invalid top level backup directory ${this_backup_dir}" 1>&2; exit 1; } local parent_dir=$(dirname ${this_backup_dir}) local dir_name=$(basename ${this_backup_dir}) local file_name=${dir_name}.zip echo -n "creating top level backup file ${parent_dir}/${file_name} ... " if (cd ${parent_dir}; zip -r -q ${file_name} ${dir_name}); then echo "ok" else echo "failed to create top level backup file" 1>&2; exit 1 fi # delete the intermediate directory rm -r ${this_backup_dir} || { echo "failed to remove the intermediate directory ${this_backup_dir}" 1>&2; exit 1; } } function main() { local backup_timestamp=$(timestamp) local this_backup_dir=${backup_dir}/wiki.novaordis.com-backup-$(timestamp) [ -d ${this_backup_dir} ] && { echo "backup directory ${this_backup_dir} already exists, meaning that another backup started just in the last second. Wait a bit and try again ..." 1>&2; exit 1; } mkdir ${this_backup_dir} || { echo "failed to create backup directory ${this_backup_dir}" 1>&2; exit 1; } backup-database \ ${backup_timestamp} \ ${database_host} \ ${database_user} \ ${database_password} \ ${database_name} \ ${this_backup_dir} backup-files \ ${backup_timestamp} \ ${document_root} \ ${this_backup_dir} create-top-level-backup-file ${this_backup_dir} } main;