Резервное копирование базы данных MySQL

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

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

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

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

Ответы на вопрос(6)

Решение Вопроса
Нет, вы можете указать таблицы для блокировки с помощью --lock-таблиц, но они не по умолчанию

то резервная копия всей БД или вы можете указать список таблиц:

mysqldump [параметры] db_name [таблицы]

Не использовал его, извините, однако я использую несколько баз данных MySQL, некоторые из которых больше, чем 1.7gb, и я использую mysqldump для всех своих резервных копий.

 TMM18 авг. 2009 г., 10:46
Спасибо Макросы за ваш ответ!

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

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

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ...

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

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

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

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

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

 kta15 февр. 2014 г., 01:17
спасибо за полезный ответ @ Виталий Кушнер

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

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

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

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

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

До свидания.

 TMM18 авг. 2009 г., 10:47
Спасибо РРУЗ за полезную информацию!

Для mysql и PHP попробуйте это. Это также удалит файлы через n дней.

$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"; }
    }

тельные резервные копии без блокировки производственной базы данных.

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

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

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

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

Ваш ответ на вопрос