Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save hoangclinh/f0e3f1d102e898f4ecd9edbc67d4e5c2 to your computer and use it in GitHub Desktop.
Save hoangclinh/f0e3f1d102e898f4ecd9edbc67d4e5c2 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
# sources
# https://wiki.zimbra.com/wiki/LDAP_data_import_export
# http://wiki.zimbra.com/wiki/Mysql_Crash_Recovery
# http://wiki.zimbra.com/wiki/CLI_zmvolume
set -e
# set limits as per zmslapadd
ulimit -n 32768
ulimit -c unlimited
ulimit -v unlimited
# 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
index_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 jdk-1.7.0_45/jre/lib/security/cacerts jetty-distribution-7.6.12.v20130726/etc/keystore )
# Parse options...
case $1 in
-v|--verbose|--debug) verbose=--verbose
esac
cp="rsync ${verbose} -HaS"
### step one, stop the world.
/etc/init.d/zimbra stop
## restore mysql
mkdir -p ~zimbra/backup/mysql_binlog/
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/{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 ~zimbra/data/ldap/accesslog/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}/${item}
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} ${zimbra_path}/.
${cp} ${index_backup} ${zimbra_path}/.
zmfixperms ${verbose} --extended
## start
/etc/init.d/zimbra restart
# make sure compression is on
for id in $( run_as_zimbra zmvolume -l | awk '/Volume id:/{print $3}' ) ; do
run_as_zimbra zmvolume -e -id "${id}" -c true
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment