WordPressを移行するためデータベースをphpMyAdminでエクスポートし、移行先(ロリポップのロリポプラン)のphpMyAdminでインポートした時の話。
インポートしたら以下のSQL文エラーが発生しました。
CREATE DATABASE IF NOT EXISTS `データベース名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
エラーの解決方法
解決方法は簡単。
- エクスポートしたSQLファイルをメモ帳などのエディタで開く
- CREATE DATABASE IF NOT EXISTSで始まる1行を削除
- その下にUSE ‘データベース名’とあったらソレも削除
です。この修正をSQLファイルにしたら、保存してもう一度phpMyAdminでインポートしてみましょう。上記のエラーは解決されているハズです。
ちなみにSQLファイルとはphpMyAdminでエクスポートした、「ファイル名.sql」と拡張子がsqlになっているファイルです。
ドット(.)から始まる拡張子が見えない場合は以下のページを参考に拡張子を表示して下さい。(Windows、Mac両方載せておきます)
OS X Mountain Lion: ファイル名拡張子を表示する/隠す
通常、ファイル名拡張子は OS X では隠されていますが、必要に応じて表示させることができます。
どうしてエラーが起きたの?
このエラー原因のSQL文「CREATE DATABASE IF NOT EXISTS」の意味は、「データベースを作成するよ。でも既に○○○(データベース名)があったらデータベースは作成しないよ」です。
本来なら問題無いSQL文なのですが、ロリポップのロリポプランでは不要になります。
何故かというと、ロリポプランではデータベースが1つしか使えないので、既にデータベースがある場合CREATE DATABASEでそれ以上作成出来ません。
今回私はローカルにあるデータベースからサーバー上のデータベースにインポートしようとしたワケなのですが、ローカルにあるデータベース名とサーバー上のデータベース名が異なっていたんですね。
結果、CREATE DATABASEのオプションであるIF NOT EXISTSは「あ、このデータベース名は無いね、作成しておくわ」と判断し、しかしロリポプランはデータベースが1つしか使えない設定になっている為エラーが起きた、という顛末です。
これらが理由で新しいデータベースが作成されることはありません。セットで付いてるUSE `データベース名`も要らないので削除しておきます。(このUSEは指定したデータベースに接続する命令文です)
ロリポップのロリポプラン以外にも、同じくデータベースが1つしか使えないサーバーでは同様のエラーが起きるのではないかと予想します。
ロリポップはチカッパプランにするとデータベースが30個まで使えるようになりますが、私はロリポップからXサーバーに乗り換えました。
価格ではロリポップの方が安いのですが、高機能・安定性で言えばXサーバーに軍配が上がります。
そしてなにより、運営側が7日間分のデータを自動でバックアップしています。最悪「データが消えた&自分でバックアップを取っていなかった」場合に申し込みをすると、データの提供をして貰える仕組みがあるので安心出来ますよ(手数料はかかります)。オススメです。
photo credit: ditatompel via photopincc