Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/bin/sh
#
# Script used for backing up DM database + web app
# Deployment configuration can be set in etc/$DM_DM_DB_NAME.deploy.conf file
#
# Usage:
#
# $0 [DM_DB_NAME [DM_BACKUP_DIR]]
#
DM_DB_NAME=dm
DM_DB_HOST=127.0.0.1
DM_DB_PORT=11136
DM_DB_ADMIN_USER=postgres
DM_DB_ADMIN_PASSWORD=
CURRENT_DIR=`pwd`
MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
cd $CURRENT_DIR
if [ -z "${DM_ROOT_DIR}" ]; then
DM_ROOT_DIR=$MY_DIR/..
fi
DM_SQL_DIR=$DM_ROOT_DIR/db/sql/dm
DM_ENV_FILE=${DM_ROOT_DIR}/setup.sh
if [ ! -f ${DM_ENV_FILE} ]; then
echo "Environment file ${DM_ENV_FILE} does not exist."
exit 2
fi
. ${DM_ENV_FILE} > /dev/null
# Use first argument as db name, if provided
if [ ! -z "$1" ]; then
DM_DB_NAME=$1
fi
echo "Backing up $DM_DB_NAME"
# Look for deployment file in etc directory, and use it to override
# default entries
deployConfigFile=$DM_ROOT_DIR/etc/${DM_DB_NAME}.deploy.conf
if [ -f $deployConfigFile ]; then
echo "Using deployment config file: $deployConfigFile"
. $deployConfigFile
else
echo "Deployment config file $deployConfigFile not found, using defaults"
fi
# Determine run directory
if [ -z "${DM_INSTALL_DIR}" ]; then
DM_INSTALL_DIR=$DM_ROOT_DIR/..
fi
# Second argument overrides directory with db population scripts
#timestamp=`date +%Y%m%d.%H%M%S`
timestamp=`date +%Y%m%d`
DM_BACKUP_DIR=$2
if [ -z $DM_BACKUP_DIR ]; then
DM_BACKUP_DIR=$DM_INSTALL_DIR/backup/$DM_DB_NAME/$timestamp
fi
backupFile=${DM_DB_NAME}.backup.$timestamp.sql
fullBackupFilePath=$DM_BACKUP_DIR/$backupFile
# Read password
sttyOrig=`stty -g`
stty -echo
read -p "Enter $DM_DB_NAME user password: " DM_DB_USER_PASSWORD
stty $sttyOrig
echo
DM_DB_USER_PASSWORD_FILE=/tmp/${DM_DB_NAME}.${DM_DB_USER}.passwd
echo $DM_DB_HOST:$DM_DB_PORT:$DM_DB_NAME:$DM_DB_USER:$DM_DB_USER_PASSWORD > $DM_DB_USER_PASSWORD_FILE && chmod 600 $DM_DB_USER_PASSWORD_FILE || exit 1
pgDumpCmd="PGPASSFILE=$DM_DB_USER_PASSWORD_FILE pg_dump -C -c -w --column-inserts -p $DM_DB_PORT -h $DM_DB_HOST -U $DM_DB_USER -d $DM_DB_NAME"
cleanup() {
rm -f $DM_DB_USER_PASSWORD
}
execute() {
eval "$@"
}
echo
echo "Using DB backup directory: $DM_BACKUP_DIR"
mkdir -p $DM_BACKUP_DIR
eval $pgDumpCmd > $fullBackupFilePath || ( cleanup && exit 1 )
nTables=`grep -n "Data for Name" $fullBackupFilePath | grep TABLE | wc -l`
echo "Processing $nTables tables"
tableCnt=0
processingFile=$DM_BACKUP_DIR/process.txt
while [ $tableCnt -lt $nTables ]; do
tableCnt=`expr $tableCnt + 1`
headLine=$tableCnt
tailLine=2
echo "Working on table #: $tableCnt"
grep -n "TABLE DATA" $fullBackupFilePath | head -$headLine | tail -$tailLine > $processingFile
dbTable=`cat $processingFile | head -1 | awk '{print $5}' | sed 's?;??g'`
echo "Creating sql script for $dbTable"
targetFile=$DM_BACKUP_DIR/populate_$dbTable.sql
pgDumpCmd="PGPASSFILE=$DM_DB_USER_PASSWORD_FILE pg_dump -C -a -t $dbTable -w --column-inserts -p $DM_DB_PORT -h $DM_DB_HOST -U $DM_DB_USER -d $DM_DB_NAME"
eval $pgDumpCmd > $targetFile || ( cleanup && exit 1 )
done
rm -f $processingFile
# Backup web app
echo "Backing up $DM_DB_NAME web app"
rsync -arlvP $DM_SUPPORT_DIR/glassfish/linux-x86_64/glassfish/domains/domain1/autodeploy/$DM_DB_NAME.war $DM_BACKUP_DIR
cleanup
echo "Backup of $DM_DB_NAME is done."