環境
- mysql Ver 8.0.22 for osx10.15 on x86_64 (Homebrew)
- プロジェクトディレクトリのターミナルと、MySQLにログイン状態のターミナル(MySQLインストール後)2つを並べて多くと効率的
- SQLにはrootユーザーで接続の場合
プロジェクトの必要に応じて接続ユーザーは考慮してください。
MySQLインストール
brew install mysql
MySQL起動
mysql.server start
MySQLログイン
mysql -u root
ログインユーザーの root は初期導入後はパスワードが設定されていないため、パスワード無しでログインできる。
MySQL導入時に存在するDBを確認
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
導入時に既にいくつかDBの確認があるがけさないこと。
#MySQL rootユーザーのパスワード設定
現在のログインユーザーのrootのパスワードを確認
mysql DBへ切り替える
use mysql;
でユーザー 情報が保存しているDBに切り替える
userテーブルを表示
フィールドがたくさんあるので以下のフィールドを指定
※以前のバージョンはPasswordフィールドが合ったようだが8.0にはないので注意
SELECT Host, User FROM mysql.user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
パスワード設定
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
でユーザー 情報が保存しているDBに切り替える
※root-passwordに設定したいパスワードを記入
#MySQL ログアウトしてログインしてみる(確認)
ログアウト
exit
ログイン
mysql -u root -p
先程パスワードを設定したので必ず「-p」をつける。パスワード入力できる状態になるので入力してログイン。
新規にDBを作成する (必要な場合)
Doctrine経由で作成するのだが、MySQL8.0で認証方法の設定を変更しておく必要があるので先に行う。
rootユーザーの認証方法を確認
- SQLにログイン
mysql -u root -p
- mysql DBに切り替える
use mysql
- userテーブルのpluginフィールドを確認
SELECT user, host, plugin FROM user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
-
caching_sha2_passwordをmysql_native_passwordに変更
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root-password';
-
設定が変わっているか確認
SELECT user, host, plugin FROM user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
参考記事: https://blog.janjan.net/2018/11/01/mysql8-request-authentication-method-unknown-to-the-client/
Symfonyの設定ファイルを変更
.env
ファイルを変更。まだこのプロジェクト用のDBはないが次のステップで作成するので、(db_name)にはこれから作るDB名を入力しておく。
編集前
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7
編集後
DATABASE_URL=mysql://root:(最初の方で設定したrootのパスワード)@127.0.0.1:3306/(db_name)
Doctrine経由でDB作成
php bin/console doctrine:database:create;
する。以下表示されればOK。確認したい人はSQL側でshow databases;
で確認。
Created database `(db_name)` for connection named default
注意:以下エラーが出た場合は、SQL側で接続ユーザーの認証方法をmysql_native_passwordにしないとエラーが出るので2つ前の設定をしっかりすること。
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
Doctrine経由でテーブル作成
ざっくりメモ
-
php bin/console make:entity
Entityファイルを作成(プロパティを決めます) -
php bin/console make:migration
マイグレーションファイル作成(DBに反映する設定情報のファイルを作ります) -
php bin/console doctrine:migrations:migrate
マイグレーション実行(DBに変更を反映します) - テーブルが新規作成もしくは情報が更新される
- SQLにログインしているターミナルで
show tables;
でちゃんとテーブルが作られているか確認
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| zip_code | int | NO | | NULL | |
| address | varchar(255) | NO | | NULL | |
| open_time | int | NO | | NULL | |
| close_time | int | NO | | NULL | |
| map | varchar(1000) | NO | | NULL | |
+------------+---------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
- SQLにログインしているターミナルで
DESCRIBE (テーブル名);
でちゃんとフォールドが設定されているか確認
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| zip_code | int | NO | | NULL | |
| address | varchar(255) | NO | | NULL | |
| open_time | int | NO | | NULL | |
| close_time | int | NO | | NULL | |
| map | varchar(1000) | NO | | NULL | |
+------------+---------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)