Как создать резервную копию нескольких баз данных для разделения файлов с помощью одной команды

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

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

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


person innovati    schedule 02.03.2011    source источник
comment
Более 100 баз данных без существующей стратегии резервного копирования, которую вы могли бы использовать для этого упражнения? {вздрагивает}   -  person Joe Stefanelli    schedule 02.03.2011
comment
Я попал на работу, где наш администратор сервера не может сделать резервную копию ни одного файла — забудьте, что он даже не может отключить сервер через SSH, даже с пошаговой шпаргалкой. Я обученный графический дизайнер, но если наши серверы могут выйти из строя, я пытаюсь сделать все возможное, чтобы сохранить данные, потому что в настоящее время у нас нет резервных копий, кроме тех, которые я делал вручную для каждого сайта в прошлом.   -  person innovati    schedule 02.03.2011


Ответы (2)


Вы могли бы 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

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

person Capsule    schedule 02.03.2011
comment
да, я хочу постепенно рассортировать их по папкам с файлами резервных копий баз данных и .tar.gz каждого веб-сайта, чтобы их можно было распространять среди клиентов при необходимости. Нам неплохо иметь один большой файл для восстановления на сервер, но я не хочу давать каждому клиенту данные и пароли каждого из наших других клиентов в дополнение к их собственным данным… - person innovati; 02.03.2011
comment
Я боролся с этим, и лучшее, что я могу получить, это: mysqldump: Получил ошибку: 1045: Доступ запрещен для пользователя «root» @ «localhost» (с использованием пароля: YES) при попытке подключения - person innovati; 02.03.2011
comment
Ага! успех, наконец-то я заставил его работать, но мне пришлось добавить имя пользователя и пароль в обе строки, большое спасибо! - person innovati; 02.03.2011
comment
Ах да, если ваш пользователь не root, то вам нужно указать это в опциях. Рад, что это наконец сработало для вас! - person Capsule; 02.03.2011

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

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.";
person AbiusX    schedule 19.03.2013