У меня есть веб-сайт LAMP с серверной частью mysql с движком InnoDb для таблиц
Я хотел бы иметь возможность использовать mysqldump для периодического создания дампов базы данных - БЕЗ необходимости останавливать сервер mysql (т.е. закрывать веб-сайт) на время резервного копирования.
Я удивлен, что нигде не могу найти эту информацию - даже в документации mySQL. Много говорится о mysqlhotcopy, но это работает только для таблиц IMSAM - и поэтому меня не интересует / не используется.
Кто-нибудь знает, могу ли (как?) Я использовать mysqldump для копирования / дампа базы данных, которая все еще используется?
Ссылка на официальную документацию была бы очень полезной, так как я хочу убедиться, что все правильно поняла.
Я работаю на Ubuntu 10.0.4 LTS
Нет, вам не нужно отключать веб-сайт, чтобы сделать резервную копию MySQL. Вы не только можете использовать mysqldump в работающей базе данных MySQL, но на самом деле сервер должен работать, чтобы mysqldump мог подключиться к нему. Тот факт, что вы используете таблицы InnoDB, является плюсом, поскольку любые блокировки будут кратковременными, и очень маловероятно, что ваши пользователи когда-либо узнают о них.
Если вы вообще нервничаете или не решаетесь выполнять резервное копирование, нет ничего страшного в том, чтобы запустить другой экземпляр MySQL и настроить репликацию главный / подчиненный, выполняя резервное копирование на подчиненном устройстве. Таким образом, вы можете быть полностью уверены, что резервные копии не повлияют на веб-сайт.
Да, вы можете использовать mysqldump
против работающего сервера - вы должны - mysqldump
просто подключается к серверу и запускает команды SQL на сервере для создания файла дампа.
Если вас беспокоит согласованность файла дампа, вы можете использовать --single-transaction
если вы работаете в основном с таблицами InnoDB. Он завершит дамп транзакцией.
mysqldump
может повлиять на производительность вашего сервера (как и любая резервная копия), поэтому проверьте, прежде чем запускать его в производство.
Другой вариант, если вы используете LVM под MySQL, - использовать mylvmbackup - при этом создается моментальный снимок тома LVM, поэтому вы можете создавать резервные копии файлов данных, как хотите.
Это зависит от того, насколько высока у вас нагрузка, но предложение Янне - это то, что большинство администраторов выбирают из-за нагрузки при выполнении резервного копирования.
Что касается InnoDB, у вас не так много вариантов резервного копирования:
У меня нет опыта работы ни с одним из них, но я исследовал это несколько месяцев назад, когда мы рассматривали переход MyISAM на InnoDB (у нас не было, слишком много полнотекстовых поисков по индексу).
(А, я вижу, вы разместили это как суперпользователю, так и здесь. Вот копипаста.)
Обычный способ сделать это - установить подчиненный экземпляр MySQL и взять оттуда резервную копию. Вам не обязательно нужен отдельный физический сервер для подчиненного MySQL, вполне нормально запускать его на том же сервере (если у вас есть дисковое пространство и некоторая память для него; со стороны процессора, в основном простаивающий подчиненный MySQL будет не навреди).
Использование mysqldump для резервного копирования таблиц InnoDB рассматривается в официальной документации здесь.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
У вас не будет никаких проблем. Я использую его каждый день для периодического резервного копирования множества баз данных с частотой до 15 минут.
Чтобы убедиться, что ваши данные находятся в согласованном состоянии, вы должны использовать параметр --single-transaction при вызове mysqldump. Вот и все.