Кроме протоколирования всех событий и оптимизации таблиц, администратор должен позаботиться о том, чтобы избежать потери данных. Это достигается регулярным резервным копированием информации. Внимательное изучение рекомендаций данного раздела поможет встретить во всеоружии любой удар судьбы.
Резервное копирование баз данных и таблиц
В СУБД MySQL предусмотрена такая нужная утилита, как mysqldump, которая ис­пользуется для создания резервных копий существующей базы данных или отдельных ее таблиц. В данном разделе говорится также о том, как экспортировать информацию из ре­зервной копии в любую другую базу данных: mysqldump имя-базы-данных
Ниже представлен пример ее использования.
Листинг 15.12.
[user@host]# /usr/local/mysql/bin/mysqldump dbl --user=john --password=hoonose
Это процедура выводит на экран операторы, изменявшие содержимое базы данных dbl (см. рис. l5.1).
Резервное копирование и восстановление информации
Заметим, что на рис. 15.1 утилита mysqldump выводит на экран операторы SQL. Это облегчает восстановление таблиц и их содержимого. Как и с утилитой mysql, при работе с утилитой mysqldump можно использовать параметры - -user и - -password для ав­торизации пользователя.
Чистый лист
Если данные, имеющиеся в резервной копии, повреждены, лучше всего удалить поврежденные таблицы или всю базу данных сразу с помощью команд DROP TABLE или DROP DATABASE. После этого можно создать базу данных снова. Восстановить данные помогут команды, полученные с помощью утилиты mysqldump (см. рис. 15.1).
Но что делать, если дамп всей базы данных не нужен? Здесь поможет утилита mysqldump. Рассмотрим пример.
Листинг 15.13.
[root@host]# /usr/local/mysql/bin/mysqldump dbl name address --user=john --password=hoonose
Эта команда выводит содержимое только таблиц name и address из базы данных dbl.
На практике лучше сохранять выводимые данные в файл, а не выводить их на экран. И в Unix, и в Windows этого можно добиться использованием оператора переадресации >, как в следующем примере.
Листинг 15.14.
[user@host]# /usr/local/mysql/bin/mysqldump dbl name address > my-dump.txt
Результатом выполнения данной команды будет текстовый файл mydump.txt, в котором содержатся команды, необходимые для восстановления таблиц name и address из базы данных dbl .
Для того чтобы сделать резервную копию более чем одной базы данных, можно вос­пользоваться параметром -B.
Листинг 15.15.
[user@host]# /usr/local/mysql/bin/mysqldump -B dbl db2 Дилемма разделителя
При работе с утилитой mysqldump, вполне возможно управлять символами раз­деления и выделения полей. Для этого предназначаются параметры --fields-enclosed-by, --fields-terminated-by, --fields-escaped-by и --lines-terminated-by. Это очень удобно при импортировании данных в различные СУБД и программы.
При использовании параметра -B имя таблицы не задается, т.к. этот параметр указывает, что создается резервная копия более чем одной базы данных. Поэтому при выполнении операции такого рода, задавать имена таблиц нет смысла.
А если вы хотите создать таблицу с такой же структурой, но с другими данными? Опять на помощь приходит утилита mysqldump. Параметр -d позволяет резервировать только структуру таблицы. Это подтверждает следующий пример. 
Листинг 15.16.
[user@host]# /usr/local/mysql/bin/mysqldump -d dbl users > us-ers.structure
В результате будет получен файл дампа, содержащий команды SQL, предназначенные для создания пустой копии таблицы users. Есть и возможность добиться обратного эффекта: зарезервировать только содержимое таблиц. Для такого случая в утилите mysqldump предусмотрен параметр -t. Таким образом, можно получить файл, содержащий команды INSERT, которые необходимо выполнять на указанной таблице. Единственное, что при этом не дублируется, - это команда по созданию таблицы.
Листинг 15.17.
[user@host]# /usr/local/mysql/bin/mysqldump -t dbl employees > employ-ees.data
Записи из таблицы employees теперь готовы для импорта в любую другую программу, которая может обрабатывать операторы SQL.