<![CDATA[Latest posts for the topic "Backup database của zimbra mail chạy trên RedHat 5?"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net Backup database của zimbra mail chạy trên RedHat 5? Code:
#!/bin/sh

mySqlPassword="password"
mySqlUser="root"

#Start service mySQL if it is not running
mySQLStatus=`su - zimbra -c "mysql.server status" |gawk '{print $3}'`
if [ "$mySQLStatus" != "running" ]; then
su - zimbra -c 'mysql.server start --socket=/opt/zimbra/db/mysql.sock'
fi

#Backup zimbra mail's database
su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=$mySqlUser --password=$mySqlPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
Với script này, việc backup không thành công do mysqldump không hiểu tham số $mySqlUser và $mySqlPassword. Nếu tớ hardcode: Code:
su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=root --password=password --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
Thi việc backup diễn ra thành công. Cậu có thể gọi ý cho tớ chỉnh sửa lại script để thực thi việc backup mà không cần hardcode được không? ]]>
/hvaonline/posts/list/36780.html#225915 /hvaonline/posts/list/36780.html#225915 GMT
Backup database của zimbra mail chạy trên RedHat 5?

neverwon wrote:
Với script này, việc backup không thành công do mysqldump không hiểu tham số $mySqlUser và $mySqlPassword.  
Nguyên văn câu thông báo thế nào? User, password của bạn có ký tự gì đặc biệt không? Debug thử với sh -x sẽ thấy rõ hơn đấy.]]>
/hvaonline/posts/list/36780.html#225922 /hvaonline/posts/list/36780.html#225922 GMT
Backup database của zimbra mail chạy trên RedHat 5?

quanta wrote:

neverwon wrote:
Với script này, việc backup không thành công do mysqldump không hiểu tham số $mySqlUser và $mySqlPassword.  
Nguyên văn câu thông báo thế nào? User, password của bạn có ký tự gì đặc biệt không? Debug thử với sh -x sẽ thấy rõ hơn đấy. 
Khi truyền tham số theo cách này: Code:
#Backup zimbra mail's database
 su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=$mySqlUser --password=$mySqlPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
thực thi script thì nhận được báo lỗi:
[root@mail backup]# ./exportDB.sh mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect  
Lỗi này tương đuơng với việc thực thi
[root@mail backup]# su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql' mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect  
Theo tớ hiểu, khi thực thi script exportDB.sh, tham số "--user=$mySqlUser" và "--password=$mySqlPassword" đã bị bỏ qua. Tớ modify: Code:
su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=root --password=$mySqlPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
[root@mail backup]# ./exportDB.sh mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect  
Tham số "--password=$mySqlPassword" đã bị bỏ qua khi thực thi script!!! Khi hardcode: Code:
su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=root --password=password --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
Script thực thi thành công, dữ liệu được backup đầy đủ:
[root@mail backup]# ./exportDB.sh [root@mail backup]# ll total 1212 -rwxr-x--- 1 zimbra zimbra 1422 Nov 30 16:06 autoBackupZimbra.sh -rw-r--r-- 1 root root 34 Nov 30 10:46 domain_list.txt -rwxr-x--- 1 zimbra zimbra 4314 Nov 30 14:20 export-acc-zcs.sh -rwxr-x--- 1 root root 500 Dec 1 09:15 exportDB.sh -rwxr-x--- 1 zimbra zimbra 2017 Nov 30 09:53 import-acc-zcs.sh -rwxr-x--- 1 root root 72 Nov 30 14:47 ldapStatus.sh -rwxr-x--- 1 root root 98 Nov 30 15:27 mySQLStatus.sh -rw-r----- 1 zimbra zimbra 15270 Nov 30 16:32 mysqldump.help.txt -rwxr-x--- 1 root root 223 Nov 30 11:07 test.sh -rwxr-x--- 1 zimbra zimbra 404 Nov 30 09:53 uninstall.sh -rw-r----- 1 zimbra zimbra 584606 Dec 1 09:16 zimbraBackup01122010_091648.sql -rw-r----- 1 zimbra zimbra 584606 Nov 30 16:58 zimbraBackup30112010_165829.sql -rwxr-x--- 1 zimbra zimbra 63 Nov 30 09:53 zimbraStatus.sh  
[root@mail backup]# more zimbraBackup01122010_091648.sql -- MySQL dump 10.11 -- -- Host: localhost Database: -- ------------------------------------------------------ -- Server version 5.0.90-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Current Database: `mboxgroup1` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mboxgroup1` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `mboxgroup1`; -- -- Table structure for table `appointment` -- DROP TABLE IF EXISTS `appointment`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `appointment` ( `mailbox_id` int(10) unsigned NOT NULL, `uid` varchar(255) NOT NULL, `item_id` int(10) unsigned NOT NULL, `start_time` datetime NOT NULL, `end_time` datetime default NULL, PRIMARY KEY (`mailbox_id`,`uid`), UNIQUE KEY `i_item_id` (`mailbox_id`,`item_id`), CONSTRAINT `fk_appointment_item_id` FOREIGN KEY (`mailbox_id`, `item_id`) REFERENCES `mail_item` (`mailbox_id`, `id`) ON DELETE CASCADE, CONSTRAINT `fk_appointment_mailbox_id` FOREIGN KEY (`mailbox_id`) REFERENCES `zimbra`.`mailbox` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
]]>
/hvaonline/posts/list/36780.html#225994 /hvaonline/posts/list/36780.html#225994 GMT
Backup database của zimbra mail chạy trên RedHat 5? password của bạn có ký tự gì đặc biệt không?  Chèn thêm một dòng `echo $mySqlPassword` trước mysqldump rồi chạy `sh -x ./exportDB.sh` sẽ rõ hơn đấy.]]> /hvaonline/posts/list/36780.html#225999 /hvaonline/posts/list/36780.html#225999 GMT Backup database của zimbra mail chạy trên RedHat 5?

quanta wrote:
Bạn vẫn chưa trả lời câu hỏi:
password của bạn có ký tự gì đặc biệt không? 
Chèn thêm một dòng `echo $mySqlPassword` trước mysqldump rồi chạy `sh -x ./exportDB.sh` sẽ rõ hơn đấy. 
Code:
[root@mail backup]# sh -x ./exportDB.sh
+ mySqlPassword=password
+ mySqlUser=root
++ su - zimbra -c 'mysql.server status'
++ gawk '{print $3}'
+ mySQLStatus=running
+ '[' running '!=' running ']'
+ echo 'mySQL password: ' password
mySQL password:  password
+ su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=$mySqlUser --password=$mySqlPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
password của user root chỉ bao gồm các ký tự thông thường (chữ cái và chữ số), không có ký tự đặc biệt nào (kiểu như #, % hay &...) Tuy nhiên, tình huống này, theo như tớ hiểu, câu truy vấn đã được thực thi ở chế độ mặc định (user mặc định là root, không sử dụng password). Phân biệt với tình huống có nhập password nhưng password không đúng: Code:
[root@mail backup]# su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=root --password=aaa --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
]]>
/hvaonline/posts/list/36780.html#226008 /hvaonline/posts/list/36780.html#226008 GMT
Backup database của zimbra mail chạy trên RedHat 5? /hvaonline/posts/list/36780.html#226021 /hvaonline/posts/list/36780.html#226021 GMT Backup database của zimbra mail chạy trên RedHat 5?

quanta wrote:
Bạn thêm tiếp -v (verbose) vào mysqldump rồi chạy lại sh -x xem nó bắn ra những gì. 
Để kiểu tham biến: Code:
[root@mail backup]# sh -x ./exportDB.sh
+ mySqlPassword=password
+ mySqlUser=root
++ su - zimbra -c 'mysql.server status'
++ gawk '{print $3}'
+ mySQLStatus=running
+ '[' running '!=' running ']'
+ echo 'mySQL password: ' password
mySQL password:  password
+ su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump -v --user=$mySqlUser --password=$mySqlPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'
-- Connecting to localhost...
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
Không tạo được kết nối tới DB Hardcode: Code:
[root@mail backup]# sh -x ./exportDB.sh
+ mySqlPassword=password
+ mySqlUser=root
++ su - zimbra -c 'mysql.server status'
++ gawk '{print $3}'
+ mySQLStatus=running
+ '[' running '!=' running ']'
+ echo 'mySQL password: ' password
mySQL password:  password
+ su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump -v --user=root --password=password --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql'

-- Retrieving table structure for table jiveExtComponentConf...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table jiveGroupProp...
-- Sending SELECT query...
-- Retrieving rows...
Kết nối, truy xuất dữ liệu thành công.]]>
/hvaonline/posts/list/36780.html#226025 /hvaonline/posts/list/36780.html#226025 GMT
Backup database của zimbra mail chạy trên RedHat 5? --user=$mySqlUser --password=$mySqlPassword thành: --user='$mySqlUser' --password='$mySqlPassword' ]]> /hvaonline/posts/list/36780.html#226030 /hvaonline/posts/list/36780.html#226030 GMT Backup database của zimbra mail chạy trên RedHat 5?

quanta wrote:
vim có tính năng syntax highlighting, viết script nên chú ý là khi gọi biến sẽ có màu riêng thay vì màu của string bình thường. Sửa: --user=$mySqlUser --password=$mySqlPassword thành: --user='$mySqlUser' --password='$mySqlPassword'  
Tớ switch sang user zimbra và thực thi script: Code:
#!/bin/sh
mySQLUser="root"
mySQLPassword="password"

/opt/zimbra/mysql/bin/mysqldump --user=$mySQLUser --password=$mySQLPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup.sql
Quá trình backup diễn ra thành công!!! Trong khi đứng ở user root để thực thi script: Code:
#!/bin/sh
mySQLUser="root"
mySQLPassword="password"

su - zimbra -c '/opt/zimbra/mysql/bin/mysqldump --user=$mySQLUser --password=$mySQLPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > /opt/backup/zimbraBackup.sql'
--user=$mySQLUser--password=$mySQLPassword bị bỏ qua!!! Tớ nghĩ, vấn đề nằm ở trong cặp 'single quote'. Khi đứng từ root, thực thi câu truy vấn gián tiếp thông qua su - zimbra -c 'command', tham biến kiểu --user=$mySQLUser bị bỏ qua. ]]>
/hvaonline/posts/list/36780.html#226051 /hvaonline/posts/list/36780.html#226051 GMT
Backup database của zimbra mail chạy trên RedHat 5?

neverwon wrote:
Tớ nghĩ, vấn đề nằm ở trong cặp 'single quote'.  
Đúng rồi. Có 2 cách: 1 là enclose tên biến với single quotes, 2 là dùng double quotes cho -c (--command) trong lệnh su.]]>
/hvaonline/posts/list/36780.html#226052 /hvaonline/posts/list/36780.html#226052 GMT
Backup database của zimbra mail chạy trên RedHat 5? autoBackupZimbra.sh của tớ: Code:
#!/bin/sh
#Stop zimbra service before backup (if it is running)
STATUS=`su - zimbra -c 'zmcontrol status |grep -i "mailbox"' | gawk '{print $2}'`
if [ "$STATUS" == "Running" ]; then
echo "Stopping Zimbra service...."
su - zimbra -c 'zmcontrol stop'
fi
echo ".... Service Zimbra has been stopped"

SCRIPT_FOLDER="/opt/backup"
BACKUP_FOLDER="/opt/backup"

mySqlPassword=`su - zimbra -c 'zmlocalconfig -s | grep "mysql_root_password"' | gawk '{print $3}'`
mySqlUser="root"

#Start service LDAP if it is not running
ldapStatus=`su - zimbra -c "ldap status | grep slapd" |gawk '{print $2}'`
if [ "$ldapStatus" != "running" ]; then
echo "Starting LDAP service..........."
su - zimbra -c 'ldap start'
fi
echo "..... Service LDAP has been started"

#Export LDAP users
$SCRIPT_FOLDER/export-acc-zcs.sh

#Stop service LDAP
su - zimbra -c 'ldap stop'

#Start service mySQL if it is not running
mySQLStatus=`su - zimbra -c "mysql.server status" |gawk '{print $3}'`
if [ "$mySQLStatus" != "running" ]; then
echo "Starting mysql service......"
su - zimbra -c 'mysql.server start --socket=/opt/zimbra/db/mysql.sock'
fi
echo "Service mysql has been started"

#Backup zimbra mail's database
echo "Starting backup database of Zimbra mail...."
/opt/zimbra/mysql/bin/mysqldump --user=$mySqlUser --password=$mySqlPassword --socket=/opt/zimbra/db/mysql.sock --all-databases > $BACKUP_FOLDER/zimbraBackup$(date +"%d%m%Y_%H%M%S").sql
echo "backup completed"

#Stop mysql service
su - zimbra -c 'mysql.server stop --socket=/opt/zimbra/db/mysql.sock'

#Backup index and store
echo "Starting backup index and store...."
tar -cvf $BACKUP_FOLDER/backupZimbraStore$(date +"%d%m%Y_%H%M%S").tar /opt/zimbra/store /opt/zimbra/index
echo "... Backup completed"

#Start zimbra service
START=`su - zimbra -c 'zmcontrol status |grep -i "mailbox"' |  gawk '{print $2}'`
if [ "$START" != "Running" ]; then
su - zimbra -c 'zmcontrol start'
fi
echo "Completed tasks"
Còn đây là script export-acc-zcs.sh tớ lấy từ http://www.vavai.com, có sửa đổi một chút để lấy toàn bộ accounts: Code:
#!/bin/sh

#Hapus Layar
clear

echo -e "###################################################################################"
echo -e "# Zimbra export-acc-zcs.sh ver 0.0.2                                              #"
echo -e "# Skrip untuk export account Zimbra berikut profile dan password                  #"
echo -e "# Masim 'Vavai' Sugianto - vavai@vavai.com - http://www.vavai.com                 #"
echo -e "# Untuk saran dan pertanyaan silakan menggunakan Milis Komunitas Zimbra Indonesia #"
echo -e "# Link Komunitas : http://www.zimbra.web.id - http://www.opensuse.or.id           #"
echo -e "###################################################################################"

# /* Variable untuk bold */
ibold="\033[1m""\n===> "
ebold="\033[0m"

FOLDER="/opt/backup"

# /* Parameter */
#echo ""
#echo -n "Enter Domain Name (ex : vavai.com) : "
#read NAME_DOMAIN
#echo -n "Enter path folder for exported account (ex : /home/vavai/) : "
#read FOLDER

# /*export ldap user */
NAME_FILE="$FOLDER/zcs-acc-add$(date +"%d%m%Y_%H%M%S").zmp"
LDIF_FILE="$FOLDER/zcs-acc-mod$(date +"%d%m%Y_%H%M%S").ldif"

rm -f $NAME_FILE
rm -f $LDIF_FILE

touch $NAME_FILE
touch $LDIF_FILE

#echo "createDomain $NAME_DOMAIN" >> $NAME_FILE

# /* Check Zimbra version */
VERSION=`su - zimbra -c 'zmcontrol -v'`;
ZCS_VER="/tmp/zcsver.txt"
# get Zimbra LDAP password
ZIMBRA_LDAP_PASSWORD=`su - zimbra -c "zmlocalconfig -s zimbra_ldap_password | cut -d ' ' -f3"`

touch $ZCS_VER
echo $VERSION > $ZCS_VER

echo -e $ibold"Retrieve Zimbra User.............................."$ebold

grep "Release 5." $ZCS_VER
if [ $? = 0 ]; then
USERS=`su - zimbra -c 'zmprov gaa'`;
LDAP_MASTER_URL=`su - zimbra -c "zmlocalconfig -s ldap_master_url | cut -d ' ' -f3"`
fi

grep "Release 6." $ZCS_VER
if [ $? = 0 ]; then
USERS=`su - zimbra -c 'zmprov -l gaa'`;
LDAP_MASTER_URL="ldapi:///"
fi

echo -e $ibold"Processing account, please wait.............................."$ebold
# /* Proses insert account kedalam file hasil export */
for ACCOUNT in $USERS; do
NAME=`echo $ACCOUNT`;
DOMAIN=`echo $ACCOUNT | awk -F@ '{print $2}'`;
ACCOUNT=`echo $ACCOUNT | awk -F@ '{print $1}'`;
ACC=`echo $ACCOUNT | cut -d '.' -f1`

#if [ $NAME_DOMAIN == $DOMAIN ] ;
#Export all LDAP's users
if [ $DOMAIN == $DOMAIN ] ;
then
OBJECT="(&(objectClass=zimbraAccount)(mail=$NAME))"
dn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep dn:`


displayName=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep displayName: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`


givenName=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep givenName: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`

userPassword=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep userPassword: | cut -d ':' -f3 | sed 's/^ *//g' | sed 's/ *$//g'`

cn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep cn: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`

initials=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep initials: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`

sn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep sn: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`

	if [ $ACC == "admin" ] || [ $ACC == "wiki" ] || [ $ACC == "galsync" ] || [ $ACC == "ham" ] || [ $ACC == "spam" ]; then
    		echo "Skipping system account, $NAME..."
	else
		echo "createAccount $NAME passwordtemp displayName '$displayName' givenName '$givenName' sn '$sn' initials '$initials' zimbraPasswordMustChange FALSE" >> $NAME_FILE

    		echo "$dn
changetype: modify
replace: userPassword
userPassword:: $userPassword
" >> $LDIF_FILE
    		echo "Adding account $NAME"
	fi
else
	echo "Skipping account $NAME"
fi

done
echo -e $ibold"All account has been exported sucessfully into $NAME_FILE and $LDIF_FILE..."$ebold
Tớ đã backup thành công.]]>
/hvaonline/posts/list/36780.html#226054 /hvaonline/posts/list/36780.html#226054 GMT