# Внимание! Здесь username и userpass относятся не к MySQL,
# это логин и пароль шелла
mysqldump --opt -Q -u username -p userpass dbname > dump.sql
В следующем варианте принудительно выбирается 8-бит ANSI-кодировка символов, поскольку на MySQL-сервере по умолчанию может быть включена другая кодировка, например неудобная двухбайтная UTF-8 (у меня так стало на хостинге Агава при переходе на MySQL версии 4.1.22).
Для устранения этой ошибки достаточно создать конфигурационный файл, где будут указаны логин и пароль пользователя MySQL, и применить для mysqldump опцию командной строки --defaults-extra-file.
Пример конфигурационного файла .config:
[client]
user = логин_пользователя_MySQL
password = пароль_пользователя_MySQL
После этого mysqldump можно запускать следующим образом, предупреждение выдаваться не будет:
Загрузка базы из дампа. Восстановление базы данных из дампа может быть выполнена командой:
mysql -u логин_пользователя_MySQL имя_базы_данных < dimpbase.sql
Enter password: здесь интерактивно вводится пароль пользователя MySQL
Передача пароля пользователя MySQL через командную строку, это может быть полезно для запуска из скрипта [4]:
mysql --password=пароль_пользователя MySQL -u логин_пользователя_MySQL имя_базы_данных \
< dimpbase.sql
[Как делать backup средствами PHP]
Есть как минимум 3 варианта как делать backup базы данных MySQL сайта [1]:
1. Выполнить запрос к базе данных (для backup) из файла PHP. 2. Запустить утилиту mysqldump с использованием функции system() из файла PHP. 3. Использовать для backup оснастку phpMyAdmin [2].
Вариант 1, выполнение запроса к базе данных из PHP. Ниже приведен пример использования запроса SELECT INTO OUTFILE к базе данных для создания backup таблицы:
< ?phpinclude'config.php';
include'opendb.php';
$tableName='mypet';
$backupFile='backup/mypet.sql';
$query="SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result=mysql_query($query);
include'closedb.php';
?>
Чтобы выполнить восстановление из backup, Вам просто нужно запустить запрос LOAD DATA INFILE, примерно так:
< ?phpinclude'config.php';
include'opendb.php';
$tableName='mypet';
$backupFile='mypet.sql';
$query="LOAD DATA INFILE 'backupFile' INTO TABLE $tableName";
$result=mysql_query($query);
include'closedb.php';
?>
Хорошая идея - давать название файлу backup из названия таблицы базы данных, наподобие tablename.sql, тогда Вы всегда будете знать, к какой таблице относится файл backup.
Вариант 2, запуск утилиты командной строки с использованием функции system(). На языке PHP функция system() используется для выполнения внешней программы. Поскольку MySQL всегда имеет в своем составе встроенный инструментарий для создания backup базы данных MySQL (это утилита mysqldump), то можно запускать этот инструментарий из скрипта PHP.
Вариант 3, использования для backup инструментария phpMyAdmin [2]. В этом случае с Вашей стороны не предполагается никакого программирования. Я не считаю этот вариант удобным, однако он все же заслуживает упоминания, чтобы Вы знали больше от возможностях бекапа баз данных.
Чтобы сделать backup Вашей базы данных MySQL с использованием phpMyAdmin, кликните на ссылку "export", находящуюся на главной странице phpMyAdmin. Затем выберите базу данных, для которой Вы хотите создать backup, проверьте соответствующие опции SQL и введите имя для файла backup.
[Как посмотреть, какие есть базы MySQL на сервере]
mysql -u username(обычно root) -h localhost -p -Bse 'show databases'