#エラーの内容#
laravelのmigrate:freshを実行するとエラーが出てしまって、どうにもこうにも行かなくなってしまいました。
エラー文には、テーブルはすでに存在しています、と書かれています。
SQLSTATE[HY000]: General error: 1813 Tablespace '`データベース名`.`***`' exists. (SQL: create table `***` (`id` bigint unsigned not null auto_increment primary key, `user_id` bigint unsigned not null, `post_id` bigint unsigned not null, `created_at` timestamp not null default CURRENT_TIMESTAMP, `updated_at` timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP) default character set utf8mb4 collate 'utf8mb4_unicode_ci')
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:703
699▕ // If an exception occurs when attempting to run a query, we'll format the error
700▕ // message to include the bindings with SQL, which will make this exception a
701▕ // lot more helpful to the developer instead of just the database's errors.
702▕ catch (Exception $e) {
➜ 703▕ throw new QueryException(
704▕ $query, $this->prepareBindings($bindings), $e
705▕ );
706▕ }
707▕ }
+9 vendor frames
10 database/migrations/2021_10_17_092414_create_***_table.php:22
Illuminate\Support\Facades\Facade::__callStatic("create")
+21 vendor frames
32 artisan:37
Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#原因と解決策#
色々調べてみると、docker imageに、前回使用したテーブルのデータが残ったまま次のコンテナを立ち上げてしまっている?のが原因のようでした。
それでは、そのデータを削除して新しく作り直せばなんとかなりそうです。
まずはdocker psでコンテナを確認します。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f730a8dd9173 laradock_nginx "/docker-entrypoint.…" 36 hours ago Up 36 hours 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp laradock_nginx_1
b013ed71a52c laradock_php-fpm "docker-php-entrypoi…" 36 hours ago Up 36 hours 9000/tcp, 0.0.0.0:9003->9003/tcp, :::9003->9003/tcp laradock_php-fpm_1
9a0bbf127ce6 laradock_workspace "/sbin/my_init" 36 hours ago Up 36 hours 0.0.0.0:3000-3001->3000-3001/tcp, :::3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, :::4200->4200/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:2222->22/tcp, :::2222->22/tcp, 0.0.0.0:8001->8000/tcp, :::8001->8000/tcp laradock_workspace_1
40445bdf8134 laradock_phpmyadmin "/docker-entrypoint.…" 36 hours ago Up 36 hours 0.0.0.0:8081->80/tcp, :::8081->80/tcp laradock_phpmyadmin_1
740a1ed511d8 docker:19.03-dind "dockerd-entrypoint.…" 36 hours ago Up 36 hours 2375-2376/tcp laradock_docker-in-docker_1
92eff8e390a2 laradock_mysql "docker-entrypoint.s…" 36 hours ago Up 36 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp laradock_mysql_1
mysqlコンテナにbashでログインし、mysqlディレクトリに移動します。
docker exec -it 92eff8e390a2 /bin/bash
cd /var/lib/mysql
原因のファイルを削除します。
データベース名のファイルがあるのでrmコマンドで削除して、新しいフォルダを作ります。
rm -rf データベース名/
mkdir データベース名
これで綺麗になりましたのでマイグレーションが実行できるようになりました!
#終わりに#
細かいところはまだまだ理解できてませんが、少しずつエラーと戦う力がついてきたような気がします。
脳死でググるのではなく、まずはエラー文をしっかり読み解く(英語なので分かりにくいですが・・・)ことが大事ですね!