9.4.1 Выгрузка данных в формате SQL с помощью mysqldump
В этом разделе описывается, как использовать mysqldump для создания файлов выгрузки в формате SQL. Сведения о перезагрузке таких файлов выгрузки см. в разделе 9.4.2 «Перезагрузка резервных копий в формате SQL».
По умолчанию mysqldump записывает информацию в виде SQL-команд в стандартный вывод. Вы можете сохранить вывод в файл:
$> mysqldump [arguments] > file_name
Чтобы выгрузить все базы данных, вызовите mysqldump с опцией --all-databases:
$> mysqldump --all-databases > dump.sql
Чтобы выгрузить только определенные базы данных, укажите их имена в командной строке и используйте опцию --databases:
$> mysqldump --databases db1 db2 db3 > dump.sql
Опция --databases приводит к тому, что все имена в командной строке интерпретируются как имена баз данных. Без этой опции mysqldump интерпретирует первое имя как имя базы данных, а последующие — как имена таблиц.
С опциями --all-databases или --databases mysqldump записывает команды CREATE
DATABASE и USE перед выводом выгрузки для каждой базы данных. Это гарантирует, что при перезагрузке файла выгрузки каждая база данных будет создана, если она не существует, и станет текущей базой данных, поэтому содержимое баз данных загружается в ту же базу данных, из которой оно было взято. Если вы хотите, чтобы файл выгрузки принудительно удалял каждую базу данных перед ее повторным созданием, используйте также опцию --add-drop-database. В этом случае mysqldump записывает команду DROP DATABASE перед каждой командой CREATE DATABASE.
Чтобы выгрузить одну базу данных, укажите ее имя в командной строке:
$> mysqldump --databases test > dump.sql
В случае с одной базой данных можно опустить опцию --databases:
$> mysqldump test > dump.sql
Разница между двумя предыдущими командами заключается в том, что без опции --databases вывод выгрузки не содержит команд CREATE
DATABASE или USE. Это имеет несколько последствий:
При перезагрузке файла выгрузки необходимо указать имя текущей базы данных, чтобы сервер знал, в какую базу данных загрузить данные.
При перезагрузке вы можете указать имя базы данных, отличное от исходного, что позволяет загрузить данные в другую базу данных.
Если база данных, которую нужно перезагрузить, не существует, необходимо сначала создать ее.
Поскольку вывод не содержит команды
CREATE DATABASE, опция--add-drop-databaseне имеет эффекта. При ее использовании не генерируется командаDROP DATABASE.
Чтобы выгрузить только определенные таблицы из базы данных, укажите их имена в командной строке после имени базы данных:
$> mysqldump test t1 t3 t7 > dump.sql
По умолчанию, если на сервере, где вы создаете файл выгрузки, включены GTID (gtid_mode=ON), mysqldump включает в вывод команду SET
@@GLOBAL.gtid_purged для добавления GTID из набора gtid_executed на сервере-источнике в набор gtid_purged на целевом сервере. Если вы выгружаете только определенные базы данных или таблицы, важно отметить, что значение, включаемое mysqldump, включает GTID всех транзакций в наборе gtid_executed на сервере-источнике, даже тех, которые изменили подавленные части базы данных или другие базы данных на сервере, которые не были включены в частичную выгрузку. Если вы переигрываете только один частичный файл выгрузки на целевом сервере, дополнительные GTID не вызывают проблем с будущей работой этого сервера. Однако если вы переигрываете второй файл выгрузки на целевом сервере, содержащий те же GTID (например, другую частичную выгрузку с того же сервера-источника), любая команда SET @@GLOBAL.gtid_purged во втором файле выгрузки завершается ошибкой. Чтобы избежать этой проблемы, установите опцию mysqldump --set-gtid-purged на значение OFF или COMMENTED, чтобы выгрузить второй файл без активной команды SET @@GLOBAL.gtid_purged, или вручную удалите эту команду перед переигрыванием файла выгрузки.
© 2025 Oracle
Licensed under the GPLv2 License.