#!/bin/bash # utility functions run_as_zimbra() { chroot --userspec zimbra:zimbra / "${@}" } export PATH=/opt/zimbra/bin:$PATH:/opt/zimbra/libexec source ~zimbra/bin/zmshutil ; zmsetvars # global variables we'll use... store_backup=/opt/zimbra.restorable/store config_backup=/opt/zimbra.restorable/ mysql_backup=/opt/zldapbackup/ ldap_backup=/opt/zldapbackup/ zimbra_path=/opt/zimbra/ configs=( conf .saveconfig java/jre/lib/security/cacerts mailboxd/etc/keystore ) cp=rsync ${verbose} -HaS # Parse options... case $1 in -v|--verbose|--debug) verbose=--verbose esac ## step one, stop the world. run_as_zimbra zmcontrol stop # restore mysql run_as_zimbra mysql.server restart databases=( $( run_as_zimbra mysql --batch --skip-column-names -u root --password=${mysql_root_password} -e "show databases" \ | awk '!/(information|performance)_schema|mysql/{print $1}' ) ) for db in "${databases[@]}" ; do run_as_zimbra mysql ${verbose} --batch --skip-column-names -u root --password=${mysql_root_password} -e "drop database ${db};" sleep 0.1; done run_as_zimbra mysql ${verbose} --batch -u root --password=${mysql_root_password} < "${mysql_backup}/mysql_dbs.sql" run_as_zimbra mysql.server stop # restore ldap.. rm ${verbose} -rf ~zimbra/data/ldap/config rm ${verbose} -rf ~zimbra/data/ldap/mdb run_as_zimbra mkdir -p ~zimbra/data/ldap/config ~zimbra/data/ldap/mdb/db run_as_zimbra zmslapadd -c ${ldap_backup}/ldap-config.bak run_as_zimbra zmslapadd ${ldap_backup}/ldap.bak # Restore configurations.. for item in ${configs[@]} ; do rm ${verbose} -rf ${zimbra_path}/${item} ${cp} ${config_backup}/${item} ${zimbra_path}/ done zmlocalconfig -e zimbra_uid=$( id -u zimbra) zmlocalconfig -e mailboxd_keystore_password=1sGyXAm3j # Restore mail store rm ${verbose} -rf ${zimbra_path}/store ${cp} ${store_backup}/store ${zimbra_path}/ ${cp} ${store_backup}/index ${zimbra_path}/ zmfixperms ${verbose} --extended ## start run_as_zimbra zmcontrol start # make sure compression is on... zmvolume -e -id 0 -c true zmvolume -e -id 1 -c true