Как сделать резервную копию нескольких баз данных для разделения файлов одной командой - PullRequest
1 голос
/ 02 марта 2011

Привет всем, у нас есть 2 веб-сервера, которые могут отключиться в пятницу.у нас есть ~ 90 веб-сайтов, размещенных на этих серверах, и я уже нашел способ сделать резервную копию каждой папки веб-сайта в свой собственный файл .tar.gz. Теперь мне нужно найти способ экспортировать каждую базу данных с нашего сервера баз данных как отдельную.Резервное копирование SQL с помощью одной команды.

В настоящее время единственный способ, которым я знаю, - это использовать PHP myAdmin, но для 100+ баз данных это немного утомительно.

Существует ли простой способ экспорта каждогобаза данных как собственный файл резервной копии SQL через SSH?

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Вы можете mysqldump --all-databases, но вы получите только один большой дамп SQL.

Найден этот скрипт bash:

for T in `mysql -N -B -e 'show databases' -pYOUR_ROOT_PASSWORD`; 
   do echo $T; 
   mysqldump -pYOUR_ROOT_PASSWORD $T | gzip -c > $T.sql.gz;
done

Вам просто нужно протестировать его и адаптировать путь /имена для ваших нужд.

0 голосов
/ 19 марта 2013

Этот подходит для серверов общего хостинга, он сохраняет каждую резервную копию в соответствующей домашней папке пользователей, чтобы они могли соответственно восстанавливать / использовать / удалять их.

backup_folder="automated_backup/";


if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [ -z "$1" ]
  then
    echo "Provide MySQL root password as argument.";
    exit;
fi
cnt=0
for T in `mysql -N -B -e 'show databases' -u root -p$1`; 
   do
   D=`date "+%Y_%m_%d_%H_%M_%S"`;
   cnt=$((cnt + 1))
   User=`echo $T | cut -d'_' -f 1`
   Folder="/home/$User/";
   Folder2=$Folder$backup_folder;
   if [ -d "$Folder" ]; then
      if [ ! -d "$Folder2" ]; then

        echo "$Folder2 not exists, creating it …";
        mkdir -p $Folder2

      fi
      File=$Folder2$T"_"$D;
      echo "Backing up $T to $File.sql.gz"; 
      mysqldump -u root -p$1 $T | gzip -c > $File.sql.gz;
      chown $User.$User -R $Folder2;
      echo "Done.";
   fi   
done

echo "$cnt databases backed up.";
0 голосов
/ 19 марта 2013
if [ -z "$1" ]
  then
    echo "Provide MySQL root password as argument.";
    exit;
fi
cnt=0
for T in `mysql -N -B -e 'show databases' -u root -p$1`; 
   do
   D=`date "+%Y_%m_%d_%H_%M_%S"`;
   cnt=$((cnt + 1))
   File=$T"_"$D;
   echo "Backing up $T to $File.sql.gz"; 
   mysqldump -u root -p$1 $T | gzip -c > $File.sql.gz;
   echo "Done.";
done

echo "$cnt databases backed up.";
...