Как правильно экспортировать/импортировать базу данных WordPress (MySQL) через командную строку?
Обычно база данных MySQL может быть экспортирована и импортирована с помощью этих простых SSH команд:
Экспорт:
mysqldump -u USERNAME -p DATABASE_NAME > filename.sql
Импорт:
mysql -u USERNAME -p DATABASE_NAME < filename.sql
Но когда дело касается WordPress, все не так просто. Из того, что я вижу, необходимо указывать дополнительные параметры, например --add-drop-table
.
В WordPress Codex есть некоторая информация, но она выглядит запутанной и недостаточно понятной.
Было бы здорово, если бы кто-то, кто использует командную строку, мог поделиться правильными командами для экспорта и импорта базы данных WordPress с пояснениями (любых новых используемых параметров).
Также, есть ли причины, по которым не рекомендуется использовать командную строку при работе с базой данных, и вместо этого лучше использовать графический интерфейс, например phpMyAdmin?

Для WordPress это тоже так просто. Я использую следующую команду для резервного копирования моих сайтов на WP:
mysqldump -u USER -pPASSWORD --quick --extended-insert DBNAME > backup.sql
Документация по mysqldump содержит подробности обо всех параметрах.
--extended-insert
ускоряет процесс обновления базы данных из дампа и делает файл дампа меньше.
--quick
ускоряет создание дампа.
На самом деле вам не обязательно использовать эти параметры, они просто делают процесс немного быстрее, а запись INSERT для каждой строки просто делает меня счастливее - ваш оригинальный синтаксис дампа тоже подойдет.
Не забывайте, что в базе данных есть записи, специфичные для домена, поэтому если вы используете этот метод для резервного копирования/восстановления, то все в порядке, но если вы хотите перенести сайт с one.com на two.com, вам нужно будет отредактировать записи в wp_options
после восстановления дампа.

Но как насчёт параметра --add-drop-table
и подобных, упомянутых на странице кодекса? http://codex.wordpress.org/Backing_Up_Your_Database#Using_Straight_MySQL_Commands - вы уверены, что они не нужны?

Это не требуется, с используемыми мной опциями все дамп-файлы содержат это перед созданием таблицы и последующими вставками:
DROP TABLE IF EXISTS <wp_tablename>
;
поэтому таблицы всегда сначала удаляются, затем создаются заново, и только потом в них вставляются данные

Подтверждаю слова Стива - ваши исходные команды mysqldump -u USERNAME -p PASSWORD DATABASE_NAME > filename.sql
и
mysql -u USERNAME -p PASSWORD DATABASE_NAME < filename.sql
будут работать отлично. Единственное, о чём действительно стоит беспокоиться - это выполнение замен строк между экспортом и импортом при переносе между доменами.

В качестве обновления информации о параметрах: это из документации mysqldump:
Некоторые параметры mysqldump являются сокращениями для групп других параметров:
Использование --opt эквивалентно указанию --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick и --set-charset. Все параметры, которые представляет --opt, также включены по умолчанию, поскольку --opt включен по умолчанию.

Потратив время на изучение основ командной строки, я все реже использую phpMyAdmin.
Однако, я нахожу его более удобным, когда нужно просмотреть или отредактировать запись (например, редактирование записей в wp_options
, как упомянул Стив выше).
Раньше я также обращался к графическому интерфейсу, когда хотел исключить особенно большую таблицу (например, логи плагина), которую не нужно было резервировать. Но я обнаружил, что можно просто добавить:
--ignore-table=my_db_name.my_table_name my_db_name

Для копирования сайта в новое местоположение.
Используйте параметр --add-drop-table
при экспорте, если импортируете в пустую базу данных.
Не используйте параметр --add-drop-table
при экспорте, если импортируете для объединения с существующей базой данных.
После каждого импорта не забудьте обновить таблицу wp_options
, так как путь будет отличаться.
Также обновите файл .htaccess
с новым путём.
