[Glass] Backup procedure

Mariano Martinez Peck via Glass glass at lists.gemtalksystems.com
Mon Jun 8 08:00:01 PDT 2015


Hi Dario,

Yes, I have to do that and another couple of things (like disabling monit
so that it won't start my gems while they are down for GC)

Here is the full script. While it won't work out of the box for you, I
think you can really get an idea.

Dale, you may want to take something from it too (in fact, this script was
a fork of yours, but I added quite a few things).

I am not a bash expert, so it's far from perfect.

Cheers,



#!/bin/bash

# Actually I only need this for the gemstone.secret check..because the rest
gets from the site source
source /opt/gemstone/product/seaside/defSeaside

if [ -s $GEMSTONE/seaside/etc/gemstone.secret ]; then
    . $GEMSTONE/seaside/etc/gemstone.secret
else
    echo 'Missing password file $GEMSTONE/seaside/etc/gemstone.secret'
    exit 1
fi

SiteSubfolder="$1"

# Requires a Sites subfolder password as a parameter
if [ "a$1" = "a" ]; then
        echo 'Missing argument <Sites subfolder>'
        exit 1
fi

source $MYAPP_SITES_DIRECTORY/$SiteSubfolder/gemstone/env


date=`date +%Y%m%d_%H%M%S`
backupfile=${GEMSTONE_DATADIR}/backups/${GEMSTONE_NAME}_backup_${date}.dbf.gz

su -m $GEMSTONE_USER -c "touch $GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log"
su -m $GEMSTONE_USER -c "touch
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_old_backups.log"


echo "`date` ------------------------ Starting backup of ${GEMSTONE_NAME}
------------------------" >> $GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log


if [ ! -d "${GEMSTONE_DATADIR}/backups" ]; then
su -m $GEMSTONE_USER -c "mkdir -p '${GEMSTONE_DATADIR}/backups'"
fi



echo "`date` Adding backup to object log" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
$MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/runTopazStringScript.sh $1 "
begin
run
(ObjectLogEntry trace: 'BACKUP: begin ' object: '${backupfile}') addToLog.
%
commit
logout
quit
"



echo "`date` Stopping monit"  >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
monit unmonitor -g ${GEMSTONE_NAME} >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log 2>&1

echo "`date` Stopping seaside gems" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
sh $APPLICATION_DIR/scripts/stopSeasideGems.sh

echo "`date` Performing #markForCollection and #reclaimAll" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
$MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/runTopazStringScript.sh $1 "
begin
run
[
[
MCRepositoryGroup default repositoriesDo: [:rep | rep flushCache ].
MCDefinition clearInstances.
MCMethodDefinition cachedDefinitions  removeKeys:
    (MCMethodDefinition cachedDefinitions keys).
MCMethodDefinition shutDown.
MethodVersionHistory uniqueInstance cleanUp.
SystemRepository markForCollection.
SystemRepository reclaimAll.

] on: Halt,  Warning do: [:ex | ex resume]
] on: Error do: [:ex | ].
%
commit
logout
quit
"



echo "`date` Start new tranlog and perform backup" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
$MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/runTopazStringScript.sh $1 "
run
| id  |
id := SystemRepository startNewLog.
[ id < 0 ] whileTrue: [
  System sleep: 1.
  id := SystemRepository startNewLog ].
SystemRepository fullBackupCompressedTo: '${backupfile}'
%
logout
quit
"

echo "`date` Start again Seaside Gems" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
sh $APPLICATION_DIR/scripts/startSeasideGems.sh
sleep 10

echo "`date` Starting monit"  >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
monit monitor -g ${GEMSTONE_NAME} >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log  2>&1




echo "`date` Writing object log" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
$MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/runTopazStringScript.sh $1 "
begin
run
(ObjectLogEntry trace: 'BACKUP: completed ' object: '${backupfile}')
addToLog.
%
commit

logout
quit
"


if [ $? -eq 0 ]
then
  echo "`date` Successful backup ... starting validation of backup" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
  echo "------------------------------------------------------------" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
  $GEMSTONE/bin/copydbf ${backupfile} /dev/null >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log 2>&1
  if [ $? -eq 0 ]
    then
      echo "`date` Successful validation " >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
      echo "------------------------------------------------------------"
>> $GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
      echo "------------------------------------------------------------"
>> $GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log


  echo "`date` Delete old backups" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
  $MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/runTopazStringScript.sh $1 "

  run
  | autoGeneratedBackups backupsToKeep |
  autoGeneratedBackups := (FACompatibilityUtils current directoryFromPath:
'${GEMSTONE_DATADIR}/backups/') faEntries
   select: [ :anEntry | ((anEntry faBasename beginsWith:
'${GEMSTONE_NAME}_backup_')
   and: [ anEntry faBasename endsWith: '.dbf.gz' ])
   and: [anEntry faBasename size = '${GEMSTONE_NAME}_backup_${date}.dbf.gz'
size ]
   ].
(FileStream oldFileNamed:
'$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_old_backups.log')
setToEnd;
nextPutAll: ('There are ', ((FACompatibilityUtils current
directoryFromPath: '${GEMSTONE_DATADIR}/backups/') faEntries) size
asString, ' entries in backup folder'); crlf;
nextPutAll: ('There are ', autoGeneratedBackups size asString, '
autogenerated backups'); crlf;
flush.
  autoGeneratedBackups := autoGeneratedBackups asSortedCollection: [:entryA
:entryB | entryA faBasename < entryB faBasename].
  backupsToKeep := autoGeneratedBackups last: (7 min: autoGeneratedBackups
size).
  (autoGeneratedBackups reject: [ :each | backupsToKeep includes: each ])
do: [:anEntry |
   (FileStream oldFileNamed:
'$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_old_backups.log')
   setToEnd; nextPutAll: ('File to be deleted: ', anEntry faBasename);
crlf; flush.
anEntry faParentDirectory deleteFileNamed: anEntry faBasename.
 ].
  System performOnServer: 'ln -sf ''', backupsToKeep first fullName , '''
''', backupsToKeep last faParentDirectory pathName, '/OldestBackup'''.
%
commit
logout
quit
"


  echo "`date` Delete old tranlogs file and only keep the needed ones for
the oldest backup `readlink ${GEMSTONE_DATADIR}/backups/OldestBackup` " >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
  sh $MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/delete-old-tranlogs.sh -d
${GEMSTONE_DATADIR} -f ${GEMSTONE_DATADIR}/backups/OldestBackup -g
/opt/gemstone/product -r >> $GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
2>&1

  echo "`date` ---------------------- Backup finihed
-----------------------"


      exit 0
    else
      reason="Failed validatino"
      echo "`date` Failed validation" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
  fi
else
  reason="Failed backup"
  echo "`date` Failed backup" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
fi



$MYAPP_GEMSTONE_ADDITIONS_SCRIPTS/runTopazStringScript.sh $1 "

run
'For details about the failure, scan backward in log file to previous topaz
session or copydbf sessions'
%
logout
quit

run
(ObjectLogEntry fatal: 'BACKUP: failed ' object: '${reason}. See
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log for details') addToLog.
%
commit
logout
quit

"



echo "------------------------------------------------------------" >>
$GEMSTONE_LOGDIR/${GEMSTONE_NAME}_backup.log
exit 101 #failure




On Mon, Jun 8, 2015 at 11:46 AM, Dario Trussardi via Glass <
glass at lists.gemtalksystems.com> wrote:

> Ciao,
>
> i need to  setup procedure for backup my devKit glass environment.
>
> For now i use:
>
> https://github.com/glassdb/webEditionHome/blob/master/bin/startGemStoneBackup.sh
>
>
>
> This procedure do:
>  runs a GemStone full backup (compressed) and validates the resulting
> backup file
>  It work fine and startNewLog before do the backup.
>
> Now i need to complete the backup.
>
> I think:
>
> 1) save the new backup into another system into local network ( named
> backupSystem )
>
> 2) remove the old backup from the server and from the backupSystem
>
> 3) remove the old tranlog from the server
>  4) remove other .... logs from the server
>
>  Someone has already addressed this issue?
>
> The goal is to have a system which automatically manages all the step and
> is ready for restoring in the break case.
>
> Thanks for considerations..
>
>
> Dario
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass
>
>


-- 
Mariano
http://marianopeck.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20150608/2746e4c4/attachment-0001.html>


More information about the Glass mailing list