You are here

Дамп всех или выбранной базы

Очередной бэкап

На этот раз всех или выбранной базы данных MySQL.
Если запустить без параметров, бэкапит всё.
Обратите внимание, есть опция сброса всех таблиц, содержащих в имени вхождение "cache". В моём случае экономит треть объёма в архиве. Так же можно отключить сжатие на медленном процессоре или при нехватке памяти.

Скрипт dbbackup:

#!/bin/sh
#backup databases
#Usage: 
#dbbackup  - backup all databases
#dbbackup dbname - backup single database
TRUNCATE_CACHE="1"
GZIP_BASE="1"
DBUSER="root"
DBPASS="password"
DBHOST="localhost"
DIR="/usr/home/user/backup"    #или DIR="./", шоб прям сюда
LOG="/var/log/mysql_dump.log"
 
#Дальше вдумчиво, не ломайте логику.
TIMENAME=`date +%Y-%m-%d-%H%M`
SINGLE_BASE="1"
DBNAME=$*
mkdir -p ${DIR}/${TIMENAME}
touch ${LOG}
TIMEDUMP=`date '+%T %x'`
 
if [ "${DBNAME}" = "" ]; then
	DBASES=`/usr/local/bin/mysql -u${DBUSER} -h ${DBHOST} -p${DBPASS} -Bse 'show databases'`
	for DBNAME in ${DBASES}; do
		if [ "${TRUNCATE_CACHE}" = "1" ]; then
			TRUNCATE_TABLES=`/usr/local/bin/mysql -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} -Bse 'show tables;' | grep cache`
			for TABLENAME in ${TRUNCATE_TABLES}; do
				/usr/local/bin/mysql -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} -Bse "truncate table ${TABLENAME};"
			done
		fi
		if [ "${GZIP_BASE}" = "1" ]; then
			/usr/local/bin/mysqldump -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} | gzip -c > "$DIR/${TIMENAME}/${DBNAME}.sql.gz" 
	    else
			/usr/local/bin/mysqldump -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} > "$DIR/${TIMENAME}/${DBNAME}.sql" 
	    fi
	    TIMEDUMP=`date '+%T %x'`
		echo "backup has been done at $TIMEDUMP: on db: ${DBNAME}" >> ${LOG}
	done
	SINGLE_BASE="0"
fi
if [ "${SINGLE_BASE}" = "1" ]; then
	if [ "${TRUNCATE_CACHE}" = "1" ]; then
		TRUNCATE_TABLES=`mysql -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} -Bse 'show tables;' | grep cache`
		for TABLENAME in ${TRUNCATE_TABLES}; do
			/usr/local/bin/mysql -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} -Bse "truncate table ${TABLENAME};"
		done
	fi
    if [ "${GZIP_BASE}" = "1" ]; then
    	/usr/local/bin/mysqldump -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} | gzip -c > "$DIR/${TIMENAME}/${DBNAME}.sql.gz" 
    else
    	/usr/local/bin/mysqldump -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} > "$DIR/${TIMENAME}/${DBNAME}.sql" 
    fi
    TIMEDUMP=`date '+%T %x'`
	echo "backup has been done at $TIMEDUMP: on db: ${DBNAME}" >> ${LOG}
fi

Абсолютные пути для FreeBSD 8+

 

Рубрика: 

Comments

Add new comment

CAPTCHA
Ответьте на простой вопрос, посмотрим, нужны ли нам ваши комментарии…
Image CAPTCHA
Enter the characters shown in the image.