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.

Revisions

  1. @igalic igalic revised this gist Mar 22, 2014. 1 changed file with 23 additions and 20 deletions.
    43 changes: 23 additions & 20 deletions restore-zimbra-config+mails.sh
    Original file line number Diff line number Diff line change
    @@ -15,19 +15,17 @@ run_as_zimbra() {
    chroot --userspec zimbra:zimbra / "${@}"
    }

    export PATH=/opt/zimbra/bin:$PATH:/opt/zimbra/libexec

    source ~zimbra/bin/zmshutil ; zmsetvars
    export PATH=${zimbra_home}/bin:$PATH:${zimbra_home}/libexec

    # 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 )
    # global variables we'll use...
    store_backup=/opt/zbackup/store
    index_backup=/opt/zbackup/index
    config_backup=/opt/zbackup/config
    keystore_backup=/opt/zbackup/keystore
    mysql_backup=/opt/zbackup/mysql/mysql_dbs.sql.gz
    ldap_backup=/opt/zbackup/ldap

    # Parse options...
    case $1 in
    @@ -37,21 +35,21 @@ esac
    cp="rsync ${verbose} -HaS"


    ### step one, stop the world.
    ## 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}' ) )
    | 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"
    gunzip < ${mysql_backup} | run_as_zimbra mysql ${verbose} --quick --batch -u root --password=${mysql_root_password}
    run_as_zimbra mysql.server stop

    # restore ldap..
    @@ -62,18 +60,23 @@ 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
    rm ${verbose} -rf ${zimbra_home}/conf
    rm ${verbose} -rf ${zimbra_home}/.saveconfig
    ${cp} ${config_backup}/conf ${zimbra_home}/.
    # the following / after saveconfig is important
    ${cp} ${config_backup}/saveconfig/ ${zimbra_home}/.saveconfig

    # restore keystores
    ${cp} ${keystore_backup}/keystore ${zimbra_home}/mailboxd/etc/.
    ${cp} ${keystore_backup}/cacerts ${zimbra_home}/java/jre/lib/security/.

    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}/.
    # --delete delete extraneous files from dest dirs
    ${cp} --delete ${store_backup} ${zimbra_home}/.
    ${cp} --delete ${index_backup} ${zimbra_home}/.


    zmfixperms ${verbose} --extended
  2. @igalic igalic revised this gist Mar 21, 2014. 1 changed file with 32 additions and 19 deletions.
    51 changes: 32 additions & 19 deletions restore-zimbra-config+mails.sh
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,15 @@
    #!/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 / "${@}"
    @@ -11,29 +21,31 @@ 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/
    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 java/jre/lib/security/cacerts mailboxd/etc/keystore )

    cp="rsync ${verbose} -HaS"
    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.
    run_as_zimbra zmcontrol stop
    ### step one, stop the world.
    /etc/init.d/zimbra stop


    # restore mysql
    ## 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|mysql/{print $1}' ) )
    | 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;
    @@ -45,31 +57,32 @@ 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 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}/
    ${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}/store ${zimbra_path}/
    ${cp} ${store_backup}/index ${zimbra_path}/
    ${cp} ${store_backup} ${zimbra_path}/.
    ${cp} ${index_backup} ${zimbra_path}/.


    zmfixperms ${verbose} --extended


    ## start
    run_as_zimbra zmcontrol start
    /etc/init.d/zimbra restart

    # make sure compression is on...
    zmvolume -e -id 0 -c true
    zmvolume -e -id 1 -c true
    # 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
  3. @igalic igalic revised this gist Mar 21, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions restore-zimbra-config+mails.sh
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    #!/bin/bash

    set -e
    # utility functions
    run_as_zimbra() {
    chroot --userspec zimbra:zimbra / "${@}"
    @@ -18,7 +18,7 @@ zimbra_path=/opt/zimbra/

    configs=( conf .saveconfig java/jre/lib/security/cacerts mailboxd/etc/keystore )

    cp=rsync ${verbose} -HaS
    cp="rsync ${verbose} -HaS"

    # Parse options...
    case $1 in
  4. @igalic igalic revised this gist Mar 21, 2014. 1 changed file with 10 additions and 1 deletion.
    11 changes: 10 additions & 1 deletion restore-zimbra-config+mails.sh
    Original file line number Diff line number Diff line change
    @@ -16,7 +16,7 @@ mysql_backup=/opt/zldapbackup/
    ldap_backup=/opt/zldapbackup/
    zimbra_path=/opt/zimbra/

    configs=( conf .saveconfig java/jre/lib/security/cacerts )
    configs=( conf .saveconfig java/jre/lib/security/cacerts mailboxd/etc/keystore )

    cp=rsync ${verbose} -HaS

    @@ -61,6 +61,15 @@ 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
  5. @igalic igalic created this gist Mar 21, 2014.
    66 changes: 66 additions & 0 deletions restore-zimbra-config+mails.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    #!/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 )

    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}/

    zmfixperms ${verbose} --extended