e582a7df66
This PS removes some unused CLI options and functions from the backup script. Change-Id: Ie7abb3bda0689afa0d128552a85c985e1653552f Signed-off-by: Pete Birley <pete@port.direct>
119 lines
3.3 KiB
Smarty
119 lines
3.3 KiB
Smarty
#!/bin/bash
|
|
|
|
# Copyright 2018 The Openstack-Helm Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
set -x
|
|
BACKUPS_DIR=${MARIADB_BACKUP_BASE_DIR}/db/${MARIADB_POD_NAMESPACE}/mariadb/current
|
|
ARCHIVE_DIR=${MARIADB_BACKUP_BASE_DIR}/db/${MARIADB_POD_NAMESPACE}/mariadb/archive
|
|
|
|
MYSQL="mysql \
|
|
--defaults-file=/etc/mysql/admin_user.cnf \
|
|
--connect-timeout 10"
|
|
|
|
MYSQLDUMP="mysqldump \
|
|
--defaults-file=/etc/mysql/admin_user.cnf"
|
|
|
|
days_difference() {
|
|
archive_date=$( date --date="$1" +%s )
|
|
if [ "$?" -ne 0 ]
|
|
then
|
|
day_delta=0
|
|
fi
|
|
current_date=$( date +%s )
|
|
date_delta=$(($current_date-$archive_date))
|
|
if [ "$date_delta" -lt 0 ]
|
|
then
|
|
day_delta=0
|
|
else
|
|
day_delta=$(($date_delta/86400))
|
|
fi
|
|
echo $day_delta
|
|
}
|
|
|
|
DBNAME=( $($MYSQL --silent --skip-column-names -e \
|
|
"show databases;" | \
|
|
egrep -vi 'information_schema|performance_schema|mysql') )
|
|
|
|
#check if there is a database to backup, otherwise exit
|
|
if [[ -z "${DBNAME// }" ]]
|
|
then
|
|
echo "There is no database to backup"
|
|
exit 0
|
|
fi
|
|
|
|
#Create archive and backup directories.
|
|
mkdir -p $BACKUPS_DIR $ARCHIVE_DIR
|
|
|
|
#Create a list of Databases
|
|
printf "%s\n" "${DBNAME[@]}" > $BACKUPS_DIR/db.list
|
|
|
|
#Retrieve and create the GRANT files per DB
|
|
for db in "${DBNAME[@]}"
|
|
do
|
|
echo $($MYSQL --skip-column-names -e "select concat('show grants for ',user,';') \
|
|
from mysql.db where ucase(db)=ucase('$db');") | \
|
|
$MYSQL --silent --skip-column-names 2>grant_err.log > $BACKUPS_DIR/${db}_grant.sql
|
|
if [ "$?" -eq 0 ]
|
|
then
|
|
sed -i 's/$/;/' $BACKUPS_DIR/${db}_grant.sql
|
|
else
|
|
cat grant_err.log
|
|
fi
|
|
done
|
|
|
|
#Dumping the database
|
|
#DATE=$(date +"%Y_%m_%d_%H_%M_%S")
|
|
DATE=$(date +'%Y-%m-%dT%H:%M:%SZ')
|
|
$MYSQLDUMP $MYSQL_BACKUP_MYSQLDUMP_OPTIONS "${DBNAME[@]}" \
|
|
> $BACKUPS_DIR/mariadb.all.sql 2>dberror.log
|
|
if [[ $? -eq 0 && -s $BACKUPS_DIR/mariadb.all.sql ]]
|
|
then
|
|
#Archive the current db files
|
|
pushd $BACKUPS_DIR 1>/dev/null
|
|
tar zcvf $ARCHIVE_DIR/mariadb.all.${DATE}.tar.gz *
|
|
ARCHIVE_RET=$?
|
|
popd 1>/dev/null
|
|
else
|
|
#TODO: This can be convert into mail alert of alert send to a monitoring system
|
|
echo "Backup failed and need attention."
|
|
cat dberror.log
|
|
exit 1
|
|
fi
|
|
|
|
#Remove the current backup
|
|
if [ -d $BACKUPS_DIR ]
|
|
then
|
|
rm -rf $BACKUPS_DIR/*.sql
|
|
fi
|
|
|
|
#Only delete the old archive after a successful archive
|
|
if [ $ARCHIVE_RET -eq 0 ]
|
|
then
|
|
if [ "$MARIADB_BACKUP_DAYS_TO_KEEP" -gt 0 ]
|
|
then
|
|
echo "Deleting backups older than $MARIADB_BACKUP_DAYS_TO_KEEP days"
|
|
if [ -d $ARCHIVE_DIR ]
|
|
then
|
|
for archive_file in $(ls -1 $ARCHIVE_DIR/*.gz)
|
|
do
|
|
archive_date=$( echo $archive_file | awk -F/ '{print $NF}' | cut -d'.' -f 3)
|
|
if [ "$(days_difference $archive_date)" -gt "$MARIADB_BACKUP_DAYS_TO_KEEP" ]
|
|
then
|
|
rm -rf $archive_file
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
fi
|