Подтвердить что ты не робот

Mysqldump с созданием строки базы данных

Я сейчас перемещаю свои файлы на другой компьютер, и одна вещь, которую я хотел бы сделать, - это передать данные в моей базе данных MySQL. Я хочу сбросить базы данных в .sql файлы, но также иметь имя базы данных db_name, в том числе и в файле, поэтому мне просто нужно импортировать файл в mysql без необходимости вручную создавать базы данных. Есть ли способ сделать это?

4b9b3361

Ответ 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.