CREATE DATABASE IF NOT EXISTS ~ データベースをインポートしたらエラー

photo credit: ditatompel via photopin cc
photo credit: ditatompel via photopin cc

WordPressを移行するためデータベースをphpMyAdminでエクスポートし、移行先(ロリポップのロリポプラン)のphpMyAdminでインポートした時の話。

インポートしたらCREATE DATABASE IF NOT EXISTS `データベース名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;と出てSQL文エラーが発生しました。

エラーの解決方法

解決方法は簡単。

  1. エクスポートしたSQLファイルをメモ帳などのエディタで開く
  2. CREATE DATABASE IF NOT EXISTSで始まる1行を削除
  3. その下にUSE ‘データベース名’とあったらソレも削除

です。この修正をSQLファイルにしたら、保存してもう一度phpMyAdminでインポートしてみましょう。上記のエラーは解決されているハズです。

ちなみにSQLファイルとはphpMyAdminでエクスポートした、「ファイル名.sql」と拡張子がsqlになっているファイルです。

ドット(.)から始まる拡張子が見えない場合は以下のページを参考に拡張子を表示して下さい。(Windows、Mac両方載せておきます)

どうしてエラーが起きたの?

このエラー原因のSQL文CREATE DATABASE IF NOT EXISTSの意味は、「データベースを作成するよ。でも既に○○○(データベース名)があったらデータベースは作成しないよ」です。

本来なら問題無いSQL文なのですが、ロリポップのロリポプランでは不要になります。

何故かというと、ロリポプランではデータベースが1つしか使えないので、既にデータベースがある場合CREATE DATABASEでそれ以上作成出来ません。

今回僕はローカルにあるデータベースからサーバー上のデータベースにインポートしようとしたワケなのですが、ローカルにあるデータベース名とサーバー上のデータベース名が異なっていたんですね。

結果、CREATE DATABASEのオプションであるIF NOT EXISTSは「あ、このデータベース名は無いね、作成しておくわ」と判断し、しかしロリポプランはデータベースが1つしか使えない設定になっている為エラーが起きた、という顛末です。

これらが理由で新しいデータベースが作成されることはありません。セットで付いてるUSE `データベース名`も要らないので削除しておきます。(このUSEは指定したデータベースに接続する命令文です)

ロリポップのロリポプラン以外にも、同じくデータベースが1つしか使えないサーバーでは同様のエラーが起きるのではないかと予想します。


ロリポップはチカッパプランにするとデータベースが30個まで使えるようになりますが、僕はロリポップからXサーバーに乗り換えました。

価格ではロリポップの方が安いのですが、高機能・安定性で言えばXサーバーに軍配が上がります。

そしてなにより、運営側が7日間分のデータを自動でバックアップしています。最悪「データが消えた&自分でバックアップを取っていなかった」場合に申し込みをすると、データの提供をして貰える仕組みがあるので安心出来ますよ(手数料はかかります)。オススメです。



最終更新日:2015年10月30日

コメント

「何かそこ違うよ」「こうした方が良い」っていう部分があったら指摘して頂けると嬉しいです。

トラックバック

トラックバックは現在ありません。

Trackback: https://increment-log.com/database-import-error/trackback/