Я сейчас перемещаю свои файлы на другой компьютер, и одна вещь, которую я хотел бы сделать, - это передать данные в моей базе данных MySQL. Я хочу сбросить базы данных в .sql файлы, но также иметь имя базы данных db_name, в том числе и в файле, поэтому мне просто нужно импортировать файл в mysql без необходимости вручную создавать базы данных. Есть ли способ сделать это?
Mysqldump с созданием строки базы данных
Ответ 1
По умолчанию mysqldump
всегда создает оператор CREATE DATABASE IF NOT EXISTS db_name;
в начале файла дампа.
[ EDIT] Немного о файле mysqldump
и его параметрах:
--all-databases
, -A
Дамп всех таблиц во всех базах данных. Это то же самое, что использовать параметр --databases
и называть все базы данных в командной строке.
--add-drop-database
Добавьте инструкцию DROP DATABASE
перед каждым оператором CREATE DATABASE
. Этот параметр обычно используется в сочетании с опцией --all-databases
или --databases
, потому что инструкции CREATE DATABASE
не записываются, если не указана одна из этих опций.
--databases
, -B
Сбросьте несколько баз данных. Обычно mysqldump
рассматривает аргумент первого имени в командной строке как имя базы данных и следующие имена в качестве имен таблиц. С помощью этой опции он рассматривает все аргументы имени как имена баз данных. Операторы CREATE DATABASE
и USE
включаются в вывод перед каждой новой базой данных.
--no-create-db
, -n
Этот параметр подавляет операторы CREATE DATABASE
, которые в противном случае включаются в вывод, если задана опция --databases
или --all-databases
.
Некоторое время назад был аналогичный вопрос, на самом деле спрашивающий о том, нет ли такого утверждения в начале файла (для файла XML). Ссылка на этот вопрос здесь.
Итак, чтобы ответить на ваш вопрос:
- Если у вас есть одна база данных для сброса, вы должны иметь
--add-drop-database
в вашем оператореmysqldump
. - Если у вас есть несколько баз данных для дампа, вы должны использовать опцию
--databases
или--all-databases
и синтаксисCREATE DATABASE
будет добавлен автоматически
Дополнительная информация в Справочное руководство по MySQL
Ответ 2
Самое простое решение - использовать опцию -B или -databases. Затем команда CREATE database появляется в выходном файле. Например:
mysqldump -uuser -ppassword -d -B --events --routines --triggers database_example > database_example.sql
Вот заголовок dumpfile:
-- MySQL dump 10.13 Distrib 5.5.36-34.2, for Linux (x86_64)
--
-- Host: localhost Database: database_example
-- ------------------------------------------------------
-- Server version 5.5.36-34.2-log
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `database_example`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_example` /*!40100 DEFAULT CHARACTER SET utf8 */;
Ответ 3
Вот как сделать дамп базы данных (только с помощью схемы):
mysqldump -u root -p"passwd" --no-data --add-drop-database --databases my_db_name | sed 's#/[*]!40000 DROP DATABASE IF EXISTS my_db_name;#' >my_db_name.sql
Если вам нужны данные, удалите опцию --no-data
.