#!/bin/sh CONFIG=/etc/chbackup.conf if [ ! -f "$CONFIG" ] ; then echo "Config file $CONFIG not exist!" exit 1 fi . "$CONFIG" DT=`date '+%Y%m%d'` umask 0137 echo "SHOW DATABASES;" \ | clickhouse-client \ | grep -Eiv 'default|information_schema|system' \ | while read DB ; do echo -n "`date '+%Y-%m-%d %H:%M:%S'` Backing up database $DB..." if [ -f "$BACKUPS_PATH$DB.$DT.zip.lock" ] ; then rm -f "$BACKUPS_PATH$DB.$DT.zip" rm -f "$BACKUPS_PATH$DB.$DT.zip.lock" fi if [ -f "$BACKUPS_PATH$DB.$DT.zip" ] ; then echo " already done" continue fi echo "BACKUP DATABASE $DB TO Disk('backups', '$DB.$DT.zip');" | clickhouse-client >/dev/null 2>&1 if [ "$?" -eq "0" ] ; then echo " done" echo -n "`date '+%Y-%m-%d %H:%M:%S'` Removing old backups of database $DB..." FULL_LIST=`find "$BACKUPS_PATH" -mindepth 1 -maxdepth 1 -type f -name "$DB.*.zip" | sort` NEED_LIST=`echo "$FULL_LIST" | tail -n "$DAYS"` (echo "$FULL_LIST" ; echo "$NEED_LIST") \ | sort \ | uniq -u \ | xargs -r rm echo " done" else rm -f "$BACKUPS_PATH$DB.$DT.zip" echo " failed" fi done IPS=`hostname -I | wc -w` if [ "$IPS" = "2" ] ; then # Primary node : elif [ "$IPS" = "1" ] ; then ssh -ni "$RKEY" "$RUSER@$RSERVER" "mkdir -p $RPATH" 2>/dev/null echo "SHOW DATABASES;" \ | clickhouse-client \ | grep -Eiv 'default|information_schema|system' \ | while read DB ; do echo -n "`date '+%Y-%m-%d %H:%M:%S'` Archiving database $DB to remote storage..." SRC=`find "$BACKUPS_PATH" -mindepth 1 -maxdepth 1 -type f -name "$DB.*.zip" | sort | tail -n 1` scp -qi "$RKEY" "$SRC" "$RUSER@$RSERVER:$RPATH$DB.zip" 2>/dev/null if [ "$?" -eq "0" ] ; then echo " done" else echo " failed" fi done else echo "Unknown node mode, please, check script logic" exit fi echo "`date '+%Y-%m-%d %H:%M:%S'` Finished"