2009-08-18 4 views
6

У меня есть база данных MySQL около 1,7 ГБ. Я обычно поддерживаю его с помощью mysqldump, и это занимает около 2 минут. Тем не менее, я хотел бы знать ответы на следующие вопросы:Резервная база данных MySQL

  1. читал ли туздЫшпр блок и/или записи в базу данных? Потому что в реальном сценарии я бы не хотел блокировать пользователей от использования базы данных во время резервного копирования.

  2. Было бы идеально для меня только резервное копирование базы данных WHOLE один раз, скажем, через неделю, но в промежуточные дни нужно резервировать только одну таблицу, так как остальные не будут меняться. Есть ли способ достичь этого?

  3. Является ли mysqlhotcopy лучшей альтернативой для этих целей?

ответ

2
  1. Нет, вы можете указать таблицы, которые будут заблокированы с помощью --lock-таблицы, но они не являются по умолчанию
  2. Если вы не укажете никаких таблиц, то вся БД из резервной копии или вы можете указать список таблиц:

    туздЫшпр [опции] имя_базы_данных [таблицы]

  3. не использовал его жаль, но я бегу ряд MySQL БД, некоторые больше некоторые меньше, чем 1.7GB и I использовать mysqldump для всех моих резервных копий ,

+0

спасибо Макросы за Ваш ответ! – TMM

5

Mysqlhotcopy не работает в некоторых случаях, когда теряется блокировка чтения, и не работает с таблицами InnoDB.

mysqldump больше используется, поскольку он может создавать резервные копии всех видов таблиц.

Из MySQL документации

Mysqlhotcopy является сценарий Perl, который был изначально написан и способствовал Тим Банс. Он использует LOCK TABLES, FLUSH TABLES и cp или scp для быстрого резервного копирования базы данных. Это самый быстрый способ сделать резервную копию базы данных или отдельных таблиц, но ее можно запустить только на том же компьютере, на котором расположены каталоги базы данных. mysqlhotcopy работает только для резервного копирования таблиц MyISAM и ARCHIVE. Он работает на Unix и NetWare

mysqldump клиент - это резервная программа, первоначально написанная Игорем Романенко. Он может использоваться для сброса базы данных или набора баз данных для резервного копирования или передачи на другой SQL-сервер (не обязательно сервер MySQL). Дамп обычно содержит инструкции SQL для создания таблицы, заполнения или обоих. Однако mysqldump также может использоваться для генерации файлов в CSV, другом разделительном тексте или формате XML.

До свидания.

+0

Спасибо RRUZ за полезную информацию! – TMM

3

1) mysqldump блокирует только когда вы его запрашиваете (один из -lock-tables, -lock-all-tables, -single-transaction). но если вы хотите, чтобы ваша резервная копия была последовательной, то mysqldump должен обладать блоком (используя --single-transaction или -lock-all-tables), или вы можете получить несогласованный снимок базы данных. Примечание. - Отдельная транзакция работает только для InnoDB.

2) Конечно, просто перечислить таблицы, которые необходимо выполнить резервное копирование после имени базы данных:

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ... 

В качестве альтернативы вы можете исключить таблицы, которые вы не хотите:

mysqldump ... --ignore-table=TABLE1 --ignore-table=TABLE2 .. DATABASE 

Так вы можете делать весь дамп базы данных один раз в неделю и делать резервные копии только смены таблиц один раз в день.

3) mysqlhotcopy полностью работает с таблицами MyISAM, и в большинстве приложений вам лучше работать с InnoDB. Есть коммерческие инструменты (довольно дорогие) для hotbackup столов innodb. В последнее время для этой цели также существует новый источник с открытым исходным кодом. Xtrabackup

Кроме того, для автоматизации процесса вы можете использовать astrails-safe. Он поддерживает резервное копирование базы данных с помощью mysqldump и файловой системы с tar. + шифрование + загрузка на S3, + много других лакомств. Пока нет поддержки xtrabackup, но это должно быть легко добавить, если это то, что вам нужно.

+0

благодарит за полезный ответ @ Виталий Кушнер – kta

3

Добавление подчиненного mysql к вашей настройке позволит вам выполнять последовательные резервные копии без блокировки производственной базы данных.

Добавление подчиненного устройства также дает вам двоичный журнал изменений. Дамп - это моментальный снимок базы данных в момент, когда вы взяли дамп. Бинарный журнал содержит все операторы, которые изменяли данные вместе с меткой времени.

Если у вас есть сбой в середине дня, и вы делаете резервные копии только один раз в день, вы потеряете работу на полдня. С бинарными журналами и mysqldump вы можете восстановить с предыдущего дня и «воспроизвести» журналы до точки отказа.

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

Если работает MySQL на Linux-сервере с LVM дисков или сервера окон с VSS, вы должны проверить Zamanda. Он принимает двоичные разности данных на диске, что намного быстрее, чем чтение и восстановление, чем текстовый дамп базы данных.

0

Для MySQL и PHP попробовать этот Это также удаление файлов после п дней

$dbhost = 'localhost'; 
$dbuser = 'xxxxx'; 
$dbpass = 'xxxxx'; 
$dbname = 'database1'; 
$folder = 'backups/'; // Name of folder you want to place the file 
$filename = $dbname . date("Y-m-d-H-i-s") . ".sql"; 
$remove_days = 7; // Number of days that the file will stay on the server 



$command="mysqldump --host=$dbhost --user=$dbuser --password=$dbpass $dbname > $folder$filename"; 
system($command); 

$files = (glob("$folder"."*.sql")); 

    foreach($files as $file) { 
     if(is_file($file) 
     && time() - filemtime($file) >= $remove_days*24*60*60) { // 2 days = 2*24*60*60 
      unlink($file); 
      echo "$file removed \n"; 
     } else { echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "\n"; } 
    } 
Смежные вопросы