Денвер
User activity statistics MySQL: транзакции и защита от сбоев

MySQL: транзакции и защита от сбоев

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

Тех, кто не знает, что такое транзакция, отсылаю к любому учебнику по SQL. Сейчас могу сказать три вещи. Во-первых, если при написании скриптов вы и слыхом не слыхивали ни о каких транзакциях, значит, данная статья будет для вас (и для скриптов) совершенно бесполезна. Во-вторых, сам термин «транзакция» означает неделимую операцию (серию операций), которая может быть либо выполнена полностью, либо не выполнена вообще. Если операция выполнилась, но частично, СУБД позаботится о том, чтобы из базы было «вычищено» все недоделанное. В-третьих, в MySQL поддержка транзакций пока что весьма слаба и неудобна (например, нет вложенных транзакций, не поддерживается откат создания таблицы и т.д.)

На данный момент MySQL может работать с двумя типами таблиц, поддерживающих транзакции. Это — Berkeley DB и InnoDB.

  • Berkeley DB (BDB) подключена по умолчанию и не требует каких-либо дополнительных настроек.
  • В отличие от BDB, InnoDB обладает тем преимуществом, что в ней реализован алгоритм 100%-надежного восстановления после сбоев. Например, нажав Reset даже во время интенсивной работы с БД, вы можете быть уверены, что таблица не разрушится. Но за все приходится платить: поддержка InnoDB требует больших затрат оперативной и дисковой памяти.
    Учтите: InnoDB требует, чтобы на диске было свободно не менее 100 MB. Это нужно для хранения журналов откатов операций и восстановления после сбоя.

Для того чтобы включить InnoDB (если она окажется отключенной), откройте в любом текстовом редакторе файл /usr/local/mysql4/my.cnf и снимите комментарий (уберите #) со следующей директивы:

#skip-innodb
Если вы не уверены, что вам нужна поддержка InnoDB, вы можете, наоборот, добавить знак комментария к данной директиве. Это позволит сэкономить место на диске и уменьшить размер процесса MySQL.

При следующем запуске комплекса (и только один раз) MySQL решит «почистить перышки» и создать все необходимые для дальнейшей работы файлы. Вот тут-то и потребуются пресловутые 100 MB. Процесс довольно длительный (особенно на медленных машинах), но нужно набраться терпения и дождаться его окончания, не закрывая консольное окно сервера. И, конечно, при следующем запуске MySQL будет стартовать уже гораздо быстрее.

Помните, что все настройки, касающиеся транзакций и защиты от сбоев, распространяются только на таблицы BDB и InnoDB. Они не относятся к таблицам MyISAM (которые создает MySQL по умолчанию и коих большинство). Для того чтобы создать таблицу типа, отличного от умолчательного, необходимо явно указать его в команде SQL CREATE TABLE.