Назад | Перейти на главную страницу

удобный и простой способ резервного копирования mySQL и SVN на машине Ubuntu

Я работаю разработчиком в небольшой компании и я далек от linux-pro или администратора. Тем не менее я установил сервер Ubuntu для документации (LAMP с вики) и управления версиями (SVN).

Другая наша среда полностью основана на Windows. Я хочу сделать резервную копию как SVN-репозитория, так и базы данных mySQL. Для этой цели наш администратор установил общий ресурс на нашем резервном сервере.

Я хочу иметь удобный и простой способ упаковать все необходимое (для восстановления вики и SVN-материалов) и поместить его в общий каталог (резервное копирование которого выполняется на регулярной основе).

Что мне нужно для резервного копирования?

Как мне это сделать?

Как мне автоматизировать эти задачи?

Вам нужно будет сделать резервную копию файлов для Wiki и SVN, а также баз данных. Я настоятельно рекомендую вам хранить более одной резервной копии. Если у вас есть только одна резервная копия, которую вы перезаписываете каждый день, вы можете легко заменить свою единственную резервную копию поврежденными данными, если с вашими данными что-то случится. Я бы предложил стратегию скользящего 7-дневного резервного копирования, например, с использованием резервного копирования по понедельникам, вторникам и т. Д. Таким образом, у вас будет неделя, чтобы заметить проблему, прежде чем вы замените последнюю резервную копию поврежденными данными.

Безусловно, самое простое - написать собственный сценарий резервного копирования, который затем каждую ночь будет вызывать cron root. Лично я использую Perl для своих сценариев, потому что это мой предпочтительный язык, но вы можете использовать любой язык сценариев, который вам нравится. что бы вы ни выбрали для записи, вы в конечном итоге будете использовать одни и те же инструменты:

  1. tar - для создания архива
  2. mysqldump - для экспорта БД
  3. SCP / SFTP / rsync - вам понадобится один из этих инструментов для передачи данных на другой компьютер после того, как вы скомпилировали то, что вам нужно, с помощью tar и mysqldump.

Если это поможет, вот анонимная версия одного из моих сценариев резервного копирования:


#!/usr/bin/perl

use strict;

#
# Set up variables
#

my $dbname = 'xxxxx';
my $dbuser = 'xxxxxxx';
my $dbpass = 'xxxxxxx';
my $uploadsDir = '/xxxxxx/blog/wp-content/uploads/';
my $backupLocal = '/home/xxxxx/backup/blog/';
my $baseFolderName = 'blogBackup';
my $backupRemote = 'user@server:~/backup/blog/';


#
# Should never have to edit anything below here
#

#
# Step 1 - get the day of the week and set up the folder to use for the backup
#

my @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
my @time = localtime();
my $dayOfWeek = $weekDays[$time[6]];
my $backupFolder = "$baseFolderName-$dayOfWeek";

# if the folder exists, delete it
my $ignore;
if(-e "$backupLocal$backupFolder"){
  $ignore = `/bin/rm -rf $backupLocal$backupFolder`; 
}
# create the folder
$ignore = `/bin/mkdir $backupLocal$backupFolder`;


#
# Step 2 - do the DB backup
#
$ignore = `/usr/bin/mysqldump -u $dbuser --password=$dbpass $dbname > $backupLocal$backupF
older/database.sql`;

#
# Step 3 - do the uploads dir backup
#
$ignore = `/bin/tar -pczf $backupLocal$backupFolder/uploads.tar.gz $uploadsDir`;

#
# Step 4 - scp the backup to the remote location
#
$ignore = `/usr/bin/scp -r $backupLocal$backupFolder $backupRemote`;

Я бы рекомендовал использовать пакет backupninja - это в основном оболочка для некоторых автоматических скриптов для резервного копирования различных сервисов. я могу использовать duplicity, rdiff-backup (мои предпочтения), записывать ISO-образы DVD и т. д.

sudo apt-get install backupninja rdiff-backup

И для начала (проведет вас через настройку различных частей):

sudo ninjahelper

Это также позволяет вам добавлять случайные пути к резервной копии, когда она в любом случае. После того, как я спас несколько машин из резервной копии, я считаю удобным иметь возможность копировать известные файлы / etc, / srv / http (где я храню веб-материалы) и дампы базы данных.

Как только это будет сделано, единственная проблема заключается в том, что ninjahelper настаивает на том, чтобы вы либо установили пароль root на удаленном компьютере, либо вручную перенесли ключ SSH (ЕСЛИ вы вообще выполняете удаленное резервное копирование):

На локальной машине:

sudo ssh-keygen
sudo scp /root/.ssh/id_dsa.pub YOUR_USERNAME@remote.machine.tld:backup_key

Ubuntu по умолчанию поставляется с резервным пользователем, поэтому мы добавляем SSH-ключ, чтобы разрешить удаленный вход:

sudo mkdir -p /var/backup/.ssh
sudo mv backup_key /var/backup/.ssh/authorized_keys
sudo chown backup:backup /var/backup/.ssh/authorized_keys

(Это из памяти, поэтому я могу немного не понимать точные команды ...)

Сложно сказать, что еще нужно для резервного копирования. Это действительно зависит от ситуации. Является ли эта машина Ubuntu только базой данных и сервером SVN или она также предоставляет другие услуги?

Вы можете создать дамп MySQL, используя mysqldump. В качестве резервного решения я бы рекомендовал двуличие тебе. В качестве простого в настройке интерфейса вы можете использовать простота. Эти инструменты помогут сделать резервную копию всех ваших данных в (возможно, подписанных и зашифрованных) tar-архивах и загрузить их на FTP-сервер или где-нибудь еще.

Чтобы автоматизировать процесс резервного копирования, вы можете взглянуть на cron.