Я сейчас перемещаю свои файлы на другой компьютер, и одна вещь, которую я хотел бы сделать, - это передать данные в моей базе данных 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.