データベースのインポート・エクスポートエラー完全対処法|CREATE DATABASEで失敗する原因と解決策

データベース・SQL

サーバー移転、バックアップからの復元、開発環境から本番環境への移行…

データベースをエクスポート(書き出し)してインポート(読み込み)する作業は、意外と失敗しやすいんです。

特に、こんなSQL文が含まれているファイルをインポートしようとすると、エラーが出ることがあります。

CREATE DATABASE IF NOT EXISTS `xxx` 
DEFAULT CHARACTER SET utf8 
COLLATE utf8_general_ci;

「権限が足りません」「文字コードが対応していません」「データベースが既に存在します」…

エラーメッセージを見ても、何をすれば良いのか分からず困りますよね。

この記事では、データベースのインポート・エクスポートでよくあるエラーと、その解決方法を初心者にもわかりやすく解説します。

スポンサーリンク
  1. まず理解しよう:そのSQL文の意味
    1. CREATE DATABASE文の解説
    2. なぜこの文がエクスポートファイルに含まれるのか
  2. よくあるエラー1:権限不足でデータベースを作成できない
    1. エラーメッセージの例
    2. 原因
    3. 解決策1:CREATE DATABASE文を削除する
    4. 解決策2:管理者ユーザーでインポートする
    5. 解決策3:ユーザーに権限を付与する
  3. よくあるエラー2:文字コードが非推奨または非対応
    1. エラーメッセージの例
    2. 原因
    3. 解決策1:utf8mb4に変更する
    4. 解決策2:テキストエディタの一括置換を使う
    5. 解決策3:エクスポート時に指定する
  4. よくあるエラー3:データベースが既に存在している
    1. エラーメッセージの例
    2. 原因
    3. 解決策1:既存のデータベースを削除してからインポート
    4. 解決策2:CREATE DATABASE文を削除して既存DBにインポート
    5. 解決策3:USE文を確認する
  5. よくあるエラー4:バッククォートの扱い
    1. エラーの原因
    2. 解決策:使用するデータベースに合わせる
  6. よくあるエラー5:ファイルサイズが大きすぎる
    1. エラーメッセージの例
    2. 原因
    3. 解決策1:ファイルを分割する
    4. 解決策2:コマンドラインからインポート
    5. 解決策3:php.iniの設定を変更
  7. よくあるエラー6:文字化けが発生する
    1. 原因
    2. 解決策1:インポート時に文字コードを指定
    3. 解決策2:データベースの文字コードを確認
    4. 解決策3:エクスポートファイルにBOMを付けない
  8. トラブルを防ぐ:正しいエクスポート方法
    1. phpMyAdminでのエクスポート推奨設定
    2. コマンドラインでのエクスポート推奨方法
  9. インポート前の確認チェックリスト
    1. ファイルの確認
    2. 環境の確認
    3. バックアップの確認
  10. エラーが解決しない時の最終手段
    1. 方法1:テーブルごとに分けてインポート
    2. 方法2:CSVでエクスポート・インポート
    3. 方法3:専用ツールを使う
  11. まとめ:エラーに慌てず、一つずつ対処しよう

まず理解しよう:そのSQL文の意味

エラーの前に、このSQL文が何をしているのか理解しましょう。

CREATE DATABASE文の解説

CREATE DATABASE IF NOT EXISTS `xxx` 
DEFAULT CHARACTER SET utf8 
COLLATE utf8_general_ci;

日本語に訳すと:

xxxという名前のデータベースがまだ存在していなければ作成してください。文字コードはUTF-8を使い、並び順のルールはutf8_general_ciにしてください」

それぞれの意味:

  • CREATE DATABASE → データベースを作る命令
  • IF NOT EXISTS → すでに存在していたら作らない(エラーを防ぐ)
  • xxx → データベースの名前(バッククォートで囲む)
  • CHARACTER SET utf8 → 文字コードの指定
  • COLLATE utf8_general_ci → 文字の比較ルール(大文字小文字を区別しない)

なぜこの文がエクスポートファイルに含まれるのか

データベース全体をエクスポートすると、データだけでなく「データベースの作り方」も一緒に保存されます。

これにより、別のサーバーでも同じ環境を再現できるわけです。

よくあるエラー1:権限不足でデータベースを作成できない

最も多いエラーがこれです。

エラーメッセージの例

ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'xxx'

または

#1044 - Access denied for user 'username'@'%' to database 'xxx'

意味:
「あなたのユーザーには、データベースを作成する権限がありません」

原因

MySQLやMariaDBでは、ユーザーごとに「できること」が決まっています。

一般的なユーザーには、以下の権限しかありません:

  • テーブルの作成・削除
  • データの追加・編集・削除
  • データの検索

しかし、データベース自体を作る権限は、管理者ユーザー(rootなど)にしかないことが多いんです。

解決策1:CREATE DATABASE文を削除する

最も簡単な方法は、この行を削除することです。

手順:

  1. エクスポートしたSQLファイルをテキストエディタ(メモ帳、Visual Studio Codeなど)で開く
  2. 先頭付近にある以下の行を探す
CREATE DATABASE IF NOT EXISTS `xxx` 
DEFAULT CHARACTER SET utf8 
COLLATE utf8_general_ci;
  1. この行を削除する
  2. ファイルを保存
  3. 改めてインポートを実行

注意:
事前に、インポート先のデータベースを手動で作成しておく必要があります。

解決策2:管理者ユーザーでインポートする

権限のあるユーザー(通常はroot)でログインしてインポートします。

phpMyAdminの場合:

  1. rootまたは管理者ユーザーでログイン
  2. インポート機能を使用

コマンドラインの場合:

mysql -u root -p < backup.sql

rootのパスワードを入力すれば、データベースの作成も含めてインポートできます。

解決策3:ユーザーに権限を付与する

管理者権限がある場合、特定のユーザーに権限を与えることもできます。

権限付与のSQL:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

注意:
これはすべてのデータベースに対する全権限を与えるため、セキュリティリスクがあります。本番環境では推奨しません。

よくあるエラー2:文字コードが非推奨または非対応

utf8という文字コードが古いため、エラーや警告が出ることがあります。

エラーメッセージの例

Warning: #3719 'utf8' is currently an alias for the character set UTF8MB3

または

Specified key was too long; max key length is 767 bytes

原因

MySQLには、実は2種類のUTF-8があります。

  • utf8(またはutf8mb3) → 古い方式、1文字最大3バイト(絵文字が使えない)
  • utf8mb4 → 新しい方式、1文字最大4バイト(絵文字も使える)

現在のMySQLでは、utf8mb4が推奨されています。

解決策1:utf8mb4に変更する

SQLファイルを編集して、文字コードを新しいものに変更します。

変更前:

CREATE DATABASE IF NOT EXISTS `xxx` 
DEFAULT CHARACTER SET utf8 
COLLATE utf8_general_ci;

変更後:

CREATE DATABASE IF NOT EXISTS `xxx` 
DEFAULT CHARACTER SET utf8mb4 
COLLATE utf8mb4_general_ci;

注意する箇所:

ファイル全体を検索して、以下も変更してください:

  • CHARSET=utf8CHARSET=utf8mb4
  • COLLATE utf8_general_ciCOLLATE utf8mb4_general_ci

解決策2:テキストエディタの一括置換を使う

大きなファイルの場合、手作業は大変です。一括置換を使いましょう。

Visual Studio Codeの場合:

  1. Ctrl + H(Mac は Command + H)で置換画面を開く
  2. 検索: utf8
  3. 置換: utf8mb4
  4. 「すべて置換」をクリック

ただし、utf8mb4まで置換されてしまわないよう、注意が必要です。

安全な置換方法:

まず「utf8_」を「utf8mb4_」に置換
次に「utf8 」を「utf8mb4 」に置換(スペース付き)

解決策3:エクスポート時に指定する

最初から正しい文字コードでエクスポートすれば、この問題は起きません。

phpMyAdminでのエクスポート設定:

  1. エクスポートタブを開く
  2. 「詳細」を選択
  3. 「データベースシステムまたは古いMySQLサーバーとの互換性」で「なし」を選択
  4. 実行

よくあるエラー3:データベースが既に存在している

同じ名前のデータベースが既にある場合のエラーです。

エラーメッセージの例

ERROR 1007 (HY000): Can't create database 'xxx'; database exists

意味:
xxxという名前のデータベースは既に存在しています」

原因

IF NOT EXISTSが付いていれば本来はエラーにならないはずですが、以下の場合にエラーが出ます:

  • 文字コードや照合順序が異なる
  • DROP DATABASE文が含まれている
  • MySQLのバージョンによる挙動の違い

解決策1:既存のデータベースを削除してからインポート

phpMyAdminの場合:

  1. 左側のデータベース一覧から対象のデータベースをクリック
  2. 「操作」タブを開く
  3. 「データベースを削除」をクリック
  4. 改めてインポート

コマンドラインの場合:

DROP DATABASE IF EXISTS xxx;

その後、インポートを実行します。

注意:
既存のデータがすべて削除されます。必ずバックアップを取ってから実行してください。

解決策2:CREATE DATABASE文を削除して既存DBにインポート

データベースは既にあるので、CREATE DATABASE文を削除します。

手順:

  1. SQLファイルを開く
  2. CREATE DATABASE文の行を削除
  3. 既存のデータベースを選択した状態でインポート

これで、既存のデータベースにテーブルやデータだけが追加されます。

解決策3:USE文を確認する

エクスポートファイルにUSE データベース名;という行があるか確認します。

あるべき形:

CREATE DATABASE IF NOT EXISTS `xxx` ...;
USE `xxx`;
-- ここからテーブル作成やデータ挿入

USE文がないと、別のデータベースにインポートされてしまう可能性があります。

よくあるエラー4:バッククォートの扱い

データベース名やテーブル名を囲む記号でエラーが出ることがあります。

エラーの原因

SQLには、名前を囲む記号が3種類あります:

  • バッククォート(`) → MySQL/MariaDB で使用
  • ダブルクォート(”) → PostgreSQL、Oracle で使用
  • 角括弧([]) → Microsoft SQL Server で使用

異なるデータベースシステム間で移行すると、この違いでエラーになります。

解決策:使用するデータベースに合わせる

MySQL/MariaDBの場合:

CREATE DATABASE IF NOT EXISTS `xxx`;

バッククォートを使います。

PostgreSQLの場合:

CREATE DATABASE "xxx";

ダブルクォートに変更が必要です。

一般的な対処:

記号を完全に削除しても、予約語を使っていなければ問題ありません。

CREATE DATABASE IF NOT EXISTS xxx;

よくあるエラー5:ファイルサイズが大きすぎる

巨大なSQLファイルのインポートで失敗することがあります。

エラーメッセージの例

Script timeout passed

または

Error: Request Entity Too Large

意味:
「ファイルが大きすぎて処理できません」

原因

phpMyAdminやレンタルサーバーには、アップロードできるファイルサイズに制限があります。

一般的な制限:

  • 共用サーバー:2〜50MB
  • VPS:設定次第だが、デフォルトで2〜8MB

解決策1:ファイルを分割する

SQLファイルを複数の小さなファイルに分けます。

手作業での分割:

  1. テキストエディタでファイルを開く
  2. 適当な位置で分割(CREATE TABLE文の区切りなど)
  3. 複数のファイルとして保存
  4. 順番にインポート

注意:
SQL文の途中で切らないよう、セミコロン(;)の位置で区切りましょう。

解決策2:コマンドラインからインポート

SSHでサーバーに接続できる場合、コマンドラインならファイルサイズの制限がありません。

手順:

mysql -u ユーザー名 -p データベース名 < ファイル名.sql

パスワードを入力すれば、インポートが開始されます。

解決策3:php.iniの設定を変更

サーバーの設定を変更できる場合(VPSや専用サーバー)、制限を緩和できます。

php.iniの編集:

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
memory_limit = 256M

注意:
共用サーバーでは変更できないことが多いです。

よくあるエラー6:文字化けが発生する

インポート後、日本語が「???」や「文字」のように文字化けすることがあります。

原因

エクスポート時とインポート時の文字コード設定が一致していません。

よくあるパターン:

  • エクスポート:UTF-8
  • インポート:Latin1(デフォルト設定)

解決策1:インポート時に文字コードを指定

phpMyAdminの場合:

  1. インポート画面の下部「ファイルの文字セット」を確認
  2. 「utf8」または「utf8mb4」を選択
  3. インポート実行

コマンドラインの場合:

mysql -u ユーザー名 -p --default-character-set=utf8mb4 データベース名 < ファイル名.sql

解決策2:データベースの文字コードを確認

既存のデータベースの設定が間違っている可能性があります。

確認SQL:

SHOW CREATE DATABASE xxx;

結果にCHARACTER SETCOLLATEが表示されます。

もし間違っていたら、変更:

ALTER DATABASE xxx 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_general_ci;

解決策3:エクスポートファイルにBOMを付けない

UTF-8のファイルには「BOM(バイトオーダーマーク)」という目印が付くことがあります。

これがあると文字化けすることがあるので、削除します。

Visual Studio Codeの場合:

  1. 右下の「UTF-8」をクリック
  2. 「エンコード付きで保存」を選択
  3. 「UTF-8」(BOMなし)を選択

トラブルを防ぐ:正しいエクスポート方法

そもそもエラーが出ないよう、エクスポート時に注意しましょう。

phpMyAdminでのエクスポート推奨設定

エクスポート手順:

  1. 対象のデータベースを選択
  2. 「エクスポート」タブをクリック
  3. 「詳細 – 可能なオプションをすべて表示」を選択

推奨設定:

  • エクスポート方法: 詳細
  • フォーマット: SQL
  • データベース:
  • 「CREATE DATABASE / USE 文を追加する」→ インポート先で新規作成するなら✓、既存DBに入れるなら外す
  • テーブル:
  • 「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER 文を追加する」→ ✓(上書きする場合)
  • 「IF NOT EXISTS を追加する」→ ✓
  • データ:
  • 「完全な INSERT 文を作成する」→ ✓
  • 「列名を挿入するコマンドに含める」→ ✓

コマンドラインでのエクスポート推奨方法

mysqldump -u ユーザー名 -p --default-character-set=utf8mb4 --single-transaction --routines --triggers データベース名 > backup.sql

オプションの意味:

  • --default-character-set=utf8mb4 → 文字コード指定
  • --single-transaction → データの整合性を保つ
  • --routines → ストアドプロシージャも含める
  • --triggers → トリガーも含める

インポート前の確認チェックリスト

エラーを防ぐため、インポート前にこれをチェックしましょう。

ファイルの確認

  • [ ] ファイルサイズは制限内か(50MB以下が安全)
  • [ ] 文字コードはUTF-8か
  • [ ] BOMは付いていないか
  • [ ] SQLの構文エラーはないか

環境の確認

  • [ ] MySQLのバージョンは互換性があるか
  • [ ] インポート先のデータベースは空か
  • [ ] ユーザーに十分な権限があるか
  • [ ] 接続タイムアウトの設定は十分か

バックアップの確認

  • [ ] インポート先のデータベースのバックアップは取ったか
  • [ ] エクスポート元のデータは残っているか
  • [ ] 失敗した時の復旧手順は確認したか

エラーが解決しない時の最終手段

どうしてもインポートできない場合の対処法です。

方法1:テーブルごとに分けてインポート

データベース全体ではなく、テーブル単位でエクスポート・インポートします。

手順:

  1. phpMyAdminで各テーブルを選択
  2. 個別にエクスポート
  3. 一つずつインポート

手間はかかりますが、確実です。

方法2:CSVでエクスポート・インポート

SQL形式ではなく、CSV形式を使う方法です。

メリット:

  • ファイルサイズが小さい
  • 文字コードの問題が少ない
  • Excelでも開ける

デメリット:

  • テーブル構造は別途作成が必要
  • 大量のテーブルがある場合は手間

方法3:専用ツールを使う

phpMyAdminではなく、専用のツールを使うと成功率が上がります。

おすすめツール:

  • MySQL Workbench → 公式の無料ツール
  • HeidiSQL → Windows用の無料ツール
  • Sequel Pro / TablePlus → Mac用のツール

これらは大きなファイルの処理が得意です。

まとめ:エラーに慌てず、一つずつ対処しよう

データベースのインポート・エクスポートエラーは、原因を特定すれば必ず解決できます。

この記事の重要ポイント:

  • 権限エラー → CREATE DATABASE文を削除、または管理者ユーザーを使用
  • 文字コードエラー → utf8をutf8mb4に変更
  • データベース存在エラー → 既存DBを削除、またはCREATE文を削除
  • ファイルサイズエラー → ファイル分割、またはコマンドライン使用
  • 文字化け → 文字コードを統一

トラブル対処の基本手順:

  1. エラーメッセージを正確に読む
  2. 原因を特定する
  3. バックアップを取る
  4. 対処法を一つずつ試す
  5. それでもダメなら別の方法を試す

予防が最善:

  • エクスポート時に正しい設定を使う
  • 定期的にテストインポートを実行
  • バックアップは複数の方法で取る

データベースの移行作業は慎重に、でも恐れずに挑戦しましょう。

この記事の方法で、ほとんどのエラーは解決できるはずです!

コメント

タイトルとURLをコピーしました