it-roy-ru.com

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

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

42
Vince

По умолчанию 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). Ссылка на этот вопрос здесь .

Итак, чтобы ответить на ваш вопрос:

  • если у вас есть одна база данных для дампа, в вашем выражении mysqldump должна быть опция --add-drop-database.
  • если у вас есть несколько баз данных для дампа, вы должны использовать опцию --databases или --all-databases, и синтаксис CREATE DATABASE будет добавлен автоматически

Больше информации на Справочное руководство по MySQL

56
GregD

Самое простое решение - использовать опцию -B или --databases.Then команда CREATE database появится в выходном файле . Например:

mysqldump -uuser -ppassword -d -B --events --routines --triggers database_example > database_example.sql

Вот заголовок файла дампа:

-- 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 */;
13
Baruch Lvovsky

Вот как сделать дамп базы данных (используя только схему):

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.

0
linuxaos