もくじ
MySQL
MySQLをDockerに設置している場合は↓こちらをご確認の上、本記事のMySQLの項目をスキップしてください。
MySQLを起動
$ mysql.server start Starting MySQL SUCCESS!
SUCCESS! と出れば起動完了です。
すでに起動している場合は起動コマンドは不要です。私がここで陥った現象を紹介しておきます。
MySQLにログイン
$ mysql -u root -p
ホスト名やポート番号を指定したい場合は↓。ポート番号などは任意です。
$ mysql -u root -p -h 127.0.0.1 -P 3307
-u
オプションはユーザー名、-h
オプションはホスト名、-P
オプションはポート番号です。
-p
オプションはパスワードでそのまま続けてコマンド入力することもできますが、パスワードが画面上にそのまま表示されてしまいます。それを回避するため、-p
オプションだけを指定して実行します。
Enter password:
するとパスワードの入力を求められるのでパスワードを入力してenter。
パスワードを設定していない場合は何も入力せずenterすることでログインできます。
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.21 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
このように表示されればログイン成功です。
SQLクエリを実行できるようになります。
現存のデータベースを確認
MySQLにおけるデータベースとは、複数のテーブルをまとめた箱になります。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
プロジェクトごとにデータベースを作成すると管理しやすくなるので、使用したいデータベースがない場合は作成しましょう。
新しいデータベースを作成
CREATE DATABASE データベース名;
実際に作成してみます。
mysql> CREATE DATABASE sample; Query OK, 1 row affected (0.09 sec)
作成したデータベースが追加されていることを確認します。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sample | | sys | +--------------------+
データベースを削除
もし間違って作成してしまっても削除ができます。
DROP DATABASE データベース名;
使用するデータベースの選択
USE データベース名;
mysql> USE sample; Database changed
これで使用するデータベースを指定できました。
テーブルの確認
SHOW TABLES;
新しく作成したデータベースには、初めはもちろんテーブルがありません。確認してみます。
mysql> SHOW TABLES; Empty set (0.00 sec)
テーブルを作成
テーブルを作成する際は、事前にDB設計をしておきます。
DB設計とは、どのようなテーブルがあり、各テーブル内にはどのような列があってそれぞれのデータ型が何なのか、ということを細かく決めておきます。
DB設計をもとにテーブルを作成します。
CREATE TABLE [テーブル名] ( column1 [データ型] [その他オプション], column2 [データ型] [その他オプション], column3 [データ型] [その他オプション], );
たとえば、userテーブルを作成する場合は以下のようになります。
mysql> CREATE TABLE user( -> id int, -> username varchar(255), -> email varchar(255), -> password char(30) -> ); Query OK, 0 rows affected (0.02 sec)
これでuserテーブルが作成されました。
mysql> show tables; +----------------+ | Tables_in_post | +----------------+ | user | +----------------+
確認すると作成されているのがわかります。
テーブルの中身のフィールドを確認
テーブルの中に何が入っているか確認できます。
mysql> desc user; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | username | varchar(255) | YES | | NULL | | | email | varchar(255) | YES | | NULL | | | password | char(30) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
MySQLを終了
特に終了しなくてもいいですが、終了する場合は以下を実行しましょう。
mysql> exit Bye
Byeって言われて終わるのって、対話している実感を得られていいですね。
Laravel
データベースができたので、Laravelで使えるように接続設定します。
.envファイルを設定
.envファイルを開くと、9〜14行目に以下の項目があります。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
詳細は以下です。
環境変数 | 概要 |
---|---|
DB_CONNECTION | データベースの種類 |
DB_HOST | 接続先のホスト |
DB_PORT | 接続先のポート |
DB_DATABASE | データベース名 |
DB_USERNAME | ユーザー名 |
DB_PASSWORD | パスワード |
今回、sampleという名前のデータベースを作成したので、それをしてします。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=sample DB_USERNAME=root DB_PASSWORD=secret
パスワードは何も設定していないならsecretと書くようです。
保存して設定は完了です。これでDBとLaravelの設定が完了しました。
えっ。めっちゃ簡単。MySQLのほうが大変ですね。
マイグレーションで接続確認
最後に、接続がちゃんとできているか確認しましょう。
$ php artisan migrate
マイグレーション が失敗する
$ php artisan migrate Illuminate\Database\QueryException SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = sample and table_name = migrations and table_type = 'BASE TABLE')
なんかエラーが出てしまいました。
MySQLのユーザの権限などのうんたらかんたららしいので、MySQLのユーザーを作成して権限も付与します。
新しくユーザを作成
CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
ユーザ名、パスワードには、任意の文字列を設定して下さい。ホスト名には、MySQLへ接続するホストを指定して下さい。ホスト名の代わりにIPアドレスやlocalhostを指定することも可能です。
mysql> CREATE USER 'sample'@'127.0.0.1' IDENTIFIED BY 'sample'; Query OK, 0 rows affected (0.02 sec)
ユーザを確認
ユーザごとのホストも確認する。
mysql> SELECT user, host FROM mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+
ユーザーごとの認証方式を確認
mysql> select user, plugin from mysql.user; +------------------+-----------------------+ | user | plugin | +------------------+-----------------------+ | mysql.infoschema | caching_sha2_password | | mysql.session | caching_sha2_password | | mysql.sys | caching_sha2_password | | root | caching_sha2_password | +------------------+-----------------------+
認証方法を変更する
- MySQL8.0.4以降 のログイン認証方式は
caching_sha2_password
がデフォルト。 - PHPのMySQL接続ライブラリが
caching_sha2_password
に未対応のため接続不可。 - 解決策としては認証方式を
mysql_native_password
に戻す
上記の対応が必要のようでした。
とりあえずすべてのユーザの認証を変更します。
mysql> ALTER USER 'mysql.infoschema'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret'; mysql> ALTER USER 'mysql.session'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret'; mysql> ALTER USER 'mysql.sys'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret'; mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';
ここでのパスワードは任意なものにします。
Configのキャッシュを消す
もしかしたら、失敗してた時のキャッシュを読み込んでエラーが出ることもあるので、キャッシュをクリアしましょう。
$ php artisan config:cache
マイグレーションを実行して確認しましょう。
$ php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.05 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
マイグレートできました。
失敗しまくりの環境構築
今回、MySQLの設定してララベルに接続する前でに何日も溶かしました。
本当問題発生しまくりでこれに1週間〜2週間くらいかかりました。
たぶんこのつぶやきらへんから取り組んで、仕事終わりや休日にちまちまエラーと闘って一度や二度は諦めそうになりました。
VSCodeでLaravel開発するなら以下の拡張機能は入れるべし。
— ぼの★Laravel学習中 (@bonoponz) 2020年8月30日
Laravel Blade Snippets
Laravel 5 Snippets
Laravel Artisan
Laravel goto view
PHP Debug
PHP Intellisense
おすすめ!
他にもあれば教えて欲しい。#駆け出しエンジニアと繋がりたい #Laravel #エンジニア初心者
環境構築きらい。
— ぼの★Laravel学習中 (@bonoponz) 2020年9月12日
でも一人でできるようになりたい。
かっこいい大人になりたい。
環境構築に何日かけとるんじゃわしはホンマ。仕事後に2時間ほどかけて数日やってきたけど、そろそろ構築できそう…。
先月からやってるような気もするけどきっと錯覚😇#駆け出しエンジニアと繋がりたい
環境構築できた!!!
— ぼの★Laravel学習中 (@bonoponz) 2020年9月15日
ホンマに成功したんか?
って自分を疑いたくなるけど今回はホンマに成功したぽい。
Configのキャッシュ消したら成功した。キャッシュのせいで何日も溶かした🤪
感無量。
キャッシュにくし。
参考URL
MySQL :: MySQL 5.6 リファレンスマニュアル :: 3.3 データベースの作成と使用
【MySQL, SQL】データベースを扱う基本SQL一覧 - Qiita
MySQLに接続するユーザー名とパスワードの指定 | MySQLの使い方
【Laravel】MySQLの接続方法を徹底解説【コピペでOK】
【Laravel】MySQL 8でmigration時にエラーが出たときの対処方法 | takakisan
Laravel 6 でmysqlのDBに接続できない!(解決方法) - Qiita
【Laravel】migrateができないのは環境変数が間違っているからかも!あるあるエラーを.envと共に振り返る。 - Qiita