Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ngvannguyen/5688e548132054a454e35e5abd694f95 to your computer and use it in GitHub Desktop.
Save ngvannguyen/5688e548132054a454e35e5abd694f95 to your computer and use it in GitHub Desktop.
Restore Zimbra's ldap, mysql and config from backup, as well as the store
#!/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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment