Project

General

Profile

1
#!/bin/sh
2

    
3
#This script is used to move the data of a postgresql 8.4 instance to the
4
#new installed postgresql 9.3 instance after the os was upgraded from ubuntu 10.04 to 14.04.
5
#Basically it will decompress a metacat backup file which contains a dumped-all file and
6
#resotre it in a postgresql 9.3 instance.
7
#You need to pass the metacat backup file to this script. We assume the backup file 
8
#locating at /var/metacat/metacat-backup directory.
9
#This script should be run as the root user. 
10
#Usage: nohup ./restore-dumped-data-to-pg9.3.sh metacat_backup_file_name &
11

    
12
#Check the argument of the script. It only can have one - the metacat backup file name.
13

    
14
METACAT_BACKUP_DIR=/var/metacat/metacat-backup
15
SQL_FILE=metacat-postgres-backup.sql
16
METACAT_BACKUP_FILE_SUFFIX=.tgz
17
DB_BASE=/var/lib/postgresql
18
OLD_DB_VERSION=8.4
19
ANOTHER_OLD_DB_VERSION=9.1
20
NEW_DB_VERSION=9.3
21
NEW_DB_CONFIG=/etc/postgresql/$NEW_DB_VERSION/main/postgresql.conf
22
OLD_DB_DATA_DIR=$DB_BASE/$OLD_DB_VERSION
23
OLD_DB_BACKUP_FILE=postgresql-$OLD_DB_VERSION.tar.gz
24
POSTGRES_USER=postgres
25
PORT=5432
26
echo "start to move database from $OLD_DB_VERSION to $NEW_DB_VERSION at"
27
echo `date`
28

    
29
echo "the length of argument is $#"
30
#echo $@
31
if [ $# -ne 1 ]; then
32
   echo "This script should take one and only one parameter as the metacat backup file name.";
33
   exit 1;
34
fi
35
METACAT_BACKUP_FILE_NAME=$1
36
echo "the backup file name is $METACAT_BACKUP_FILE_NAME"
37
DECOMPRESS_DIR_NAME=`echo "$METACAT_BACKUP_FILE_NAME" | cut -d'.' -f1`
38
echo "the decmporessed dir is $DECOMPRESS_DIR_NAME"
39

    
40
if [ -f "$DB_BASE/$OLD_DB_BACKUP_FILE" ]; then
41
        echo "$DB_BASE/$OLD_DB_BACKUP_FILE does exist and we don't need to backup it again"   
42
else
43
	echo "back up the old db data at $OLD_DB_DATA_DIR"
44
        su - $POSTGRES_USER -c "tar -zcvf $DB_BASE/$OLD_DB_BACKUP_FILE $OLD_DB_DATA_DIR"
45
	echo "delete the data directory - $OLD_DB_DATA_DIR"
46
	rm -rf $OLD_DB_DATA_DIR
47
fi
48

    
49
echo "stop postgresql"
50
/etc/init.d/postgresql stop
51

    
52
echo "remove postgresql 8.4 and 9.1"
53
apt-get remove postgresql-$OLD_DB_VERSION
54
apt-get remove postgresql-$ANOTHER_OLD_DB_VERSION
55

    
56
echo "modify the port to 5432 in the new db configuration file"
57
sed -i.bak --regexp-extended "s/(port =).*/\1${PORT}/;" $NEW_DB_CONFIG
58

    
59
if [ -d "$METACAT_BACKUP_DIR/$DECOMPRESS_DIR_NAME" ]; then
60
        echo "$METACAT_BACKUP_DIR/$DECOMPRESS_DIR_NAME does exist and we don't need to decompress the metacat backup file again"   
61
else
62
	echo "decompress the metacat backup file"
63
	tar zxvf $METACAT_BACKUP_DIR/$METACAT_BACKUP_FILE_NAME -C $METACAT_BACKUP_DIR
64
fi
65

    
66
echo "restart postgresql"
67
/etc/init.d/postgresql start
68

    
69
echo "restore database"
70
su - $POSTGRES_USER -c "psql -f $METACAT_BACKUP_DIR/$DECOMPRESS_DIR_NAME/$SQL_FILE postgres"
71

    
72
echo "end to move database from $OLD_DB_VERSION to $NEW_DB_VERSION at"
73
echo `date`
(9-9/10)