Webサイトのサーバーを移転するときは、データベースのエクスポートとインポートを行いますが、データベースの移行でつまずくケースがあります。

特に、SSHが使えないレンタルサーバーでは、phpMyAdminでインポートするので注意が必要です。

次は、インポートのときによくあるエラーの1つです。

CREATE DATABASE IF NOT EXISTS [古いDB名] ~
utf8_unicode_ci;

MySQLのメッセージ: ドキュメント
#1044 - Access denied for user ~

「#1044 – Access denied for user」が表示される原因

移転前のphpMyAdminで、エクスポートの生成オプション「CREATE DATABASE / USE コマンドを追加する」にチェックを入れてエクスポートすると、SQLの中に「CREATE DATABASE IF NOT EXISTS [DB名]~」という記述が追加されます。

この「CREATE DATABASE IF NOT EXISTS [DB名]」は、データベースがなければ作成する、という内容です。

インポートのときに、[古いDB名]のデータベースがないので作成しようとしますが、共用のレンタルサーバーでは、SQLでデータベースを作る権限がないため作成できません。

インポートできない場合の対処法

新しいサーバーでphpMyAdminを使えているということは、データベースとデータベースのユーザーは作成されていると思います。

「#1044 – Access denied for user」が原因でSQLをインポートできない場合は、すでにデータベースがあるので、SQLの中に書かれている次の部分を削除しましょう。

CREATE DATABASE IF NOT EXISTS `古いDB名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `古いDB名`;

次からは、エクスポートするときにこのオプションのチェックを外しておくと、このエラーは出ません。

phpMyAdminでは、うまくいかない場合があるので注意が必要です。