А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
0-9 A B C D I F G H IJ K L M N O P Q R S TU V WX Y Z #


Чтение книги "MySQL 5.0. Библиотека программиста" (страница 28)

   5.3. Резервирование базы данных

   Резервное копирование баз данных необходимо, чтобы в случае сбоев операционной системы, файловой системы или разрушения физических носителей информации вы могли восстановить данные из резервной копии и с минимальными потерями продолжить работу. В MySQL предусматривается множество способов резервного копирования данных, так что вы можете выбрать наиболее подходящий для вас.
   Рекомендуется использовать стратегию резервного копирования, которая сочетает два взаимодополняющих метода:
   • периодическое полное резервное копирование базы данных;
   • ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
   Слишком частое полное резервирование неэффективно, поскольку занимает много времени, а значительная часть данных в базе не успевает измениться. Поэтому наряду с полным резервированием используется промежуточное, которое заключается в копировании двоичных журналов на резервный носитель. Таким образом, даже в случае полного разрушения диска, на котором располагается база данных, вы сможете восстановить не только информацию, сохраненную при полном копировании, но и последующие изменения вплоть до момента последнего промежуточного копирования.
   В зависимости от назначения и интенсивности эксплуатации вашей базы данных вы можете подобрать оптимальную частоту полного и промежуточного резервирования. Например, полное резервное копирование может выполняться еженедельно, а промежуточное – ежедневно.
   Вначале вы узнаете, как настроить запись информации в двоичные журналы, затем узнаете об организации полного копирования и, наконец, познакомитесь с процедурой восстановления данных в случае сбоя.

   Двоичные журналы

   Файл двоичного журнала накапливает историю изменений в базе данных за некоторый промежуток времени и позволяет в случае необходимости воспроизвести эти изменения.
   Чтобы включить ведение двоичных журналов, запустим сервер MySQL с параметром –log-bin. Это можно сделать одним из следующих способов.
   • Если вы запускаете сервер вручную из командной строки (об этом шла речь в подразделе «Запуск и остановка сервера MySQL из командной строки» главы 1), укажите параметр –log-bin в команде запуска сервера:

   mysqld-nt –log-bin

   • Если сервер MySQL сконфигурирован как сервис Windows и запускается автоматически, или с помощью панели управления, или с помощью MySQL Administrator (см. подразделы «Запуск и остановка сервера MySQL с помощью MySQL Administrator» и «Запуск и остановка сервера MySQL с панели управления» главы 1), откройте конфигурационный файл my.ini, находящийся в папке, где установлена программа MySQL, и добавьте параметр log-bin в раздел [mysqld] (рис. 5.9). Сохраните файл my.ini. Ведение журналов начнется после перезапуска сервера.
   Рис. 5.9. Настройка ведения двоичных журналов

   • Вместо того чтобы редактировать файл my.ini вручную, вы можете запустить MySQL Administrator, в левой области главного окна щелкнуть пункт Startup Variables (Параметры запуска), открыть вкладку Log files (Журналы) (рис. 5.10) и установить флажок Binary Logfile (Двоичный журнал), а затем нажать кнопку Apply Changes (Сохранить изменения). Чтобы сервер MySQL начал вести журналы, его необходимо перезапустить.
   Рис. 5.10. Настройка ведения двоичных журналов в MySQL Administrator

   В процессе работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы – файлы с именами вида <Имя xocTa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала. Очередной файл журнала создается в следующих случаях:
   • при достижении предельного размера предыдущего файла;
   • при запуске (перезапуске) сервера;
   • при принудительном «сбросе» журналов.
   «Сброс» журналов необходим при выполнении полного резервного копирования, чтобы изменения с момента резервирования отражались в новом файле (старые файлы журналов при этом становятся не нужны). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы вы скопируете на резервный носитель.
   Для «сброса» журналов выполните SQL-команду FLUSH LOGS; либо запустите утилиту mysqladmin с параметром flush-logs, выполнив в окне командной строки Windows команду

   mysqladmin -u <Имя пользователя> -p flush-logs

   После появления приглашения Enter password (Введите пароль) введите пароль пользователя.
   Для сокращения трудозатрат на администрирование базы данных рекомендуется настроить промежуточное резервирование в автоматическом режиме, по расписанию. Чтобы организовать принудительный «сброс» журналов по расписанию, выполните следующие действия:
   1. Откройте панель управления Windows и дважды щелкните на значке Назначенные задания.
   2. В появившемся окне Назначенные задания щелкните правой кнопкой мыши и в контекстном меню выберите последовательно пункты Создать → Назначенное задание (рис. 5.11). Введите название задания, например MySQL Incremental Backup.
   Рис. 5.11. Создание задания

   3. Дважды щелкните на названии задания. В окне настройки задания на вкладке Задание (рис. 5.12) в поле Выполнить введите команду

   mysqladmin -u <Имя пользователя>
   -p<Пароль пользователя> flush-logs
   Рис. 5.12. Настройка действия, выполняемого по расписанию

   Пользователь, от имени которого выполняется «сброс» журналов, должен обладать привилегией RELOAD. Обратите внимание, что пароль пользователя должен следовать сразу после ключа -p без пробела. Учитывая риск разглашения пароля, рекомендуем выполнять «сброс» журналов не от имени пользователя root, а от имени специально зарегистрированного пользователя, не имеющего никаких привилегий, кроме RELOAD.
   4. Нажмите кнопку Задать пароль. В окне Установка пароля дважды введите ваш пароль в Windows (не пароль в MySQL!). Нажмите кнопку OK.
   5. Перейдите на вкладку Расписание (рис. 5.13) и укажите время, в которое будет ежедневно выполняться «сброс» журналов.
   Рис. 5.13. Настройка расписания

   6. Если промежуточное резервное копирование необходимо выполнять несколько раз в течение дня, нажмите кнопку Дополнительно. В окне Дополнительные параметры расписания установите флажок Повторять задание и настройте периодичность выполнения задания (рис. 5.14). Нажмите кнопку OK.
   Рис. 5.14. Дополнительная настройка расписания

   7. В окне настройки задания нажмите кнопку OK для сохранения задания.
   8. В окне Назначенные задания протестируйте созданное задание. Для этого щелкните на названии задания правой кнопкой мыши и в контекстном меню выберите пункт Выполнить. В папке data корневой папки MySQL должен появиться новый двоичный журнал.
   Следующий этап промежуточного резервирования – копирование двоичных журналов на резервный носитель информации. Для решения этой задачи существует множество утилит, как платных, так и бесплатных, которые позволяют по расписанию создавать резервные копии файлов на любом носителе – CD, DVD, USB, удаленном FTP-сервере и др.
   В частности, для копирования файлов на другой компьютер в локальной сети вы можете воспользоваться утилитой xcopy, входящей в состав Windows. Запуск этой утилиты по расписанию настраивается аналогично «сбросу» журналов. В качестве выполняемой команды введите

   xcopy «<Корневая папка MySQL>/data»
   «<Папка на резервном носителе>» /c/d/y

...
   Примечание
   Параметр /c утилиты xcopy указывает, что возникающие при копировании ошибки следует игнорировать. Параметр /d означает, что файл в результирующей папке будет заменен файлом из исходной папки только в том случае, если исходный файл более новый. Параметр /y позволяет заменять файлы в результирующей папке, не запрашивая дополнительного подтверждения у пользователя.
   Расписание для запуска утилиты xcopy целесообразно сделать смещенным на несколько минут относительно расписания «сброса» журналов.
   Итак, вы узнали, как включить ведение двоичных журналов и настроить промежуточное резервное копирование. В следующем подразделе мы рассмотрим процедуру полного резервного копирования.

   Полное резервирование

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

   mysqldump –u <Имя пользователя> -p
   [Опциональные параметры]
   <Копируемые базы данных и таблицы>
   > <Путь и имя результирующего файла>

   После появления приглашения Enter password (Введите пароль) введите пароль пользователя.
   Выбор опциональных параметров утилиты зависит от типа резервируемых таблиц.
   • Для резервного копирования таблиц с типом InnoDB необходимо указать параметр –single-transaction. В процессе резервного копирования пользователи смогут продолжать работу с данными, в том числе вносить изменения, однако эти изменения будут незаметны для программы mysqldump. Таким образом, вы получите согласованную копию баз данных, в которой не будет нарушений целостности данных.
   • При резервном копировании таблиц с типом MyISAM необходимо запретить пользователям изменение данных во избежание их рассогласованности. Для этого необходимо указать параметр –lock-all-tables или –lock-tables. Параметр –lock-all-tables устанавливает блокировку для всех таблиц всех баз данных в течение всего времени резервного копирования. Параметр –lock-tables блокирует таблицы той базы данных, которая в данный момент копируется. В последнем случае уменьшается время недоступности каждой таблицы для пользователей, однако отсутствует гарантия непротиворечивости данных, находящихся в разных базах.
   Параметры –single-transaction, –lock-all-tables и-lock-tables являются взаимоисключающими: в команде резервного копирования вы можете указать только один из них. Кроме того, поскольку наша стратегия резервного копирования использует двоичные журналы, необходимо указать параметр –flush-logs для «сброса» журналов.
   Копируемые объекты вы можете задать одним из следующих способов:
   • –all-databases
   Необходимо копирование всех баз данных с сервера MySQL (кроме виртуальной базы данных INFORMATION_SCHEMA).
   • –databases <Имя базы данных 1> <Имя базы данных 2>… Необходимо скопировать перечисленные базы данных.
   • <Имя базы данных> <Имя таблицы 1> <Имя таблицы 2>… Необходимо скопировать перечисленные таблицы указанной базы данных.
   Например, команда

   mysqldump –u root –p –single-transaction –flush-logs
   –databases SalesDept FinanceDept > “C:datafull_backup.sql”

   выполняет резервное копирование баз данных SalesDept (Отдел продаж) и FinanceDept (Финансовый отдел) в файл full_backup.sql, находящийся в папке C: data, а команда

   mysqldump –u root –p –lock-tables –flush-logs
   mysql user db tables_priv columns_priv > «C:datausers.sql»

   выполняет резервное копирование таблиц user, db, tables_priv и columns_priv системной базы данных mysql в файл users.sql, находящийся в папке C: data. Таблицы в базе данных mysql имеют тип MyISAM, поэтому при резервировании мы указали параметр –lock-tables.
...
   Примечание
   Открыв созданный файл с помощью программы Блокнот, вы увидите, что данные в нем представлены в виде SQL-команд CREATE DATABASE, CREATE TABLE и INSERT.
   Вы можете также организовать полное резервное копирование по расписанию. Для этого необходимо создать задание Windows, выполняющее команду

   mysqldump –u <Имя пользователя> -p<Пароль пользователя> [Опциональные параметры]
   <Копируемые базы данных и таблицы>
   > <Путь и имя результирующего файла>

   О том, как создать подобное задание, говорилось в подразделе «Двоичные журналы». Обратите внимание, что в команде mysqldump пароль пользователя должен следовать сразу после ключа -p без пробела. Учитывая риск разглашения пароля, рекомендуется выполнять резервное копирование не от имени пользователя root, а от имени специально зарегистрированного пользователя. Этот пользователь должен обладать следующими привилегиями:
   • глобальной привилегией RELOAD;
   • привилегией SELECT для всех копируемых объектов;
   • в случае резервирования с параметром –lock-all-tables или –lock-tables – дополнительно привилегией LOCK_TABLES для всех баз данных, участвующих в копировании.
   После создания файла с резервной копией базы данных необходимо позаботиться о переносе этого файла на резервный носитель информации. Этот носитель должен быть надежно защищен от несанкционированного доступа.
   Если вы впервые создаете резервную копию, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных. О восстановлении данных мы поговорим в следующем подразделе.
Чтение онлайн



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31

Навигация по сайту


Читательские рекомендации

Информация