Как забекапить с помощью mysqldump --all-databases так, чтобы оно сделало имя_базы.sql для каждой базы?

Как забекапить с помощью mysqldump --all-databases так, чтобы оно сделало имя_базы.sql для каждой базы?
  • Вопрос задан
  • 24306 просмотров
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
for dbname in `echo show databases| mysql -u user -ppass`; do
echo "Dump $dbname..."
mysqldump -u user -ppass $dbname > "$dbname.sql"
done;
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
nikel303
@nikel303
Вот ещё такой скрипт есть, можно даже на крон поставить.

#!/bin/bash

MyUSER="dbuser"
MyPASS="dbpass"
MyHOST="localhost"
 
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"

#MYSQL="/usr/local/bin/mysql"
#MYSQLDUMP="/usr/local/bin/mysqldump"

CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
 
DEST="./db_backup"
 
MBD="$DEST"
HOST="$(hostname)"
NOW="$(date +"%Y%m%d")"
 
FILE=""
DBS=""
 
# DO NOT BACKUP these databases, delemiter SPACE
IGN="information_schema"

# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"

for db in $DBS
do

    skipdb=-1
    if [ "$IGN" != "" ]; then
		for i in $IGN
		do
			[ "$db" == "$i" ] && skipdb=1 || :
		done
    fi
 
    if [ "$skipdb" == "-1" ] ; then
		MBD="$DEST/$db"    	
		[ ! -d $MBD ] && mkdir -p $MBD || :
		FILE="$MBD/$NOW.sql.gz"
	        $MYSQLDUMP --opt -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
		FNUM="$(find $MBD/* | wc -l)"
		if [ $FNUM -ge 0 ] ; then
			find $MBD/* -type f -mtime 20 -exec rm -rf {} \;
		fi
    fi

done
Ответ написан
Комментировать
sledopit
@sledopit
И ещё. Совсем не обязательно так извращаться. Можно вытаскивать нужную базу и из полного бэкапа всего лишь одной командой:
sed -n -e '/CREATE TABLE.*mytable/,/CREATE TABLE/p' full.dump > mytable.dump
Либо даже не вытаскивая, а прямо напрямую так:
mysql --one-database db_to_restore < full.dump
Ответ написан
Комментировать
Mixailo
@Mixailo
#!/usr/local/bin/bash
DIR="/path/to/backup"
mkdir -p $DIR
LOG="/path/to/log.log"
touch $LOG
TIMENAME=`date +%d.%m.%Y-%H.%M`
db=`mysql -u USERNAME -h localhost -pPASSWORD -Bse 'show databases'`
for n in $db; do
TIMEDUMP=`date '+%T %x'`
echo "backup has been done at $TIMEDUMP : $TIMENAME on db: $n" >> $LOG
mysqldump -u USERNAME -h localhost -pPASSWORD $n | gzip -c > "$DIR/mysql-$n-$TIMENAME-db.dump.gz"


Я использую нечто вот такое.
Ответ написан
@YourChief
никак. либо бэкапьте по одной базе, либо разделите базы по файлам, сдампленные в кучу
Ответ написан
Комментировать
twix007
@twix007
cd /home/backup/ && mysql -uappsroot -uUSER -e 'show databases' | while read dbname; do mysqldump -uUSER -pPASS --complete-insert "$dbname"|gzip > "$dbname".sql.gz; done
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы