ファイルを別のコンピューターに移動している最中です。MySQLデータベースのデータを転送したいのです。データベースを.sqlファイルにダンプしたいのですが、データベースにdb_nameを作成し、ファイルに含めて、データベースを手動で作成せずにファイルをmysqlにインポートするだけです。それを行う方法はありますか?
デフォルトでは、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リファレンスマニュアル
最も簡単な解決策は、オプション-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 */;
データベースをダンプする方法は次のとおりです(スキーマのみを使用)。
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
オプション。