web-dev-qa-db-ja.com

データベース作成行を含むmysqldump

ファイルを別のコンピューターに移動している最中です。MySQLデータベースのデータを転送したいのです。データベースを.sqlファイルにダンプしたいのですが、データベースにdb_nameを作成し、ファイルに含めて、データベースを手動で作成せずにファイルをmysqlにインポートするだけです。それを行う方法はありますか?

47
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ファイルの場合)。その質問へのリンク ここにあります

あなたの質問に答えるために:

  • ダンプするデータベースが1つある場合は、mysqldumpステートメントに--add-drop-databaseオプションが必要です。
  • ダンプするデータベースが複数ある場合は、オプション--databasesまたは--all-databasesを使用する必要があり、CREATE DATABASE構文が自動的に追加されます

詳細は MySQLリファレンスマニュアル

64
GregD

最も簡単な解決策は、オプション-Bまたは--databasesを使用することです。その後、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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `database_example`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_example` /*!40100 DEFAULT CHARACTER SET utf8 */;
17
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オプション。

1
linuxaos