- 投稿日:2020-07-29T22:54:23+09:00
Xampp+CakePHP4+Eclipse開発環境を作成する(Windows)
CakePHP4での開発環境をローカルに作った時の自分の作業メモです。
作成環境
OS:Windows 10
Xampp:Windows版7.4.8
CakePHP:4.1.1
Composer 1.10.9
Eclipse 2020-06 (4.16.0)Xamppインストール
https://www.apachefriends.org/jp/index.html
特に必要がなければデフォルトのc:\xamppでいいのではないかと。
という訳でそのあとは上記のパスにインストールした前提で記載します。php.ini編集
後で「You must enable the intl extension to use CakePHP.」って怒られるので、
先にphpの設定を編集しておきます。C:\xampp\php\php.ini
extension=intl
を下記に変更
extension=php_intl.dllドキュメントルート変更
xamppを使う場合のデフォルトルートは
C:\xampp\htdocs
変更する場合はApacheのhttpd.confを変更する。
画像のL252付近の下記二行をお好みに変更。
DocumentRoot "C:/workspace"
<Directory "C:/workspace">Composerインストール
Composer先生ってJenkins先生と画風が似てますね…
ひとまず普通にインストールすればOKと思われます。
https://getcomposer.org/CakePHPプロジェクト作成
コマンドプロンプトでプロジェクトを作成したい場所に移動します。
基本ドキュメントルートで作成するかなと思います。
cd c:\workspace
composer create-project --prefer-dist cakephp/app <アプリケーション名>作成完了後、
http://localhost/<アプリケーション名>
にアクセスすると下記のページが出ればOKです。
データベース設定
この状態だと、まだMySQLの設定をしていないので
「CakePHP is NOT able to connect to the database.
Connection to Mysql could not be established: SQLSTATE[HY000] [1045] Access denied for user 'my_app'@'localhost' (using password: YES)」
というメッセージが出ているので、これを解消する。
XAMPPコンソールからMySQLのAdminを選択して管理コンソールを開く。
データベースとユーザーを作成する。
コンソールのGUIからも作成できるけどコマンドで作ったほうが早いかも。
(といいつつコンソールで作った…)作成したらC:\workspace\belongings-app\config\app-local.phpを編集
Datasourcesの下階層のusername、password、databaseの内容を編集します。
これでエラーは解消されます。Eclipseでのデバッグ設定
Eclipseのインストール及びPHP Development Toolsの導入を行います。
https://www.eclipse.org/downloads/file>import>Existing Composer Project
で上記で作成したプロジェクトをインポートする。コンテキストメニューのDebug Asか上のバグアイコンから「Debug Configration」を開く
Name:任意
File:<アプリケーション名>/webroot/index.phpDebuggerタブに切り替えて「Configure」ボタンを押下する。
Debugger:Xdebug
Port:お好み「Finish」押下後、Debuugerタブの設定確認
Break at First Line:チェック外しておく(どちらでもよいが…)ここで「Debug」を押下すると、Eclipseの内部ブラウザで表示される
外部ブラウザで表示したい場合
Window > Preferences
General>Web Browser
図のようにUser External web browserを選択して、下で好みのブラウザを選択する。※追記
この状態だとデバッグ実行がうまくできないため下記追加
適当なページでphpinfo()を出力し、内容を下記にコピー
https://xdebug.org/wizard
おすすめされたxdebugを入れておすすめされた設定をphp.iniに追加
私の場合下記を追加
zend_extension = C:\xampp\php\ext\php_xdebug-2.9.6-7.4-vc15-x86_64.dll
xdebug.remote_enable = 1
xdebug.remote_host = "localhost"
xdebug.remote_port="8888"デバッグ実行時のポートを上記に合わせる。
これでデバッグ実行が可能になる。
- 投稿日:2020-07-29T22:29:02+09:00
【備忘録】add_indexでrollbackエラー
現象
データベースのrollbackをしようとしたら、下記のエラーが発生。
実行処理
rails db:rollbackエラー
== 20200726224558 DeviseCreateUsers: reverting ================================ -- remove_index(:users, {:column=>:reset_password_token}) rails aborted! StandardError: An error has occurred, all later migrations canceled:解決方法
db/migrate/devise_create_users.rbにある以下の表記をコメントアウトした。
変更前
add_index :users, :name, unique: true add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true変更後
# add_index :users, :name, unique: true # add_index :users, :email, unique: true # add_index :users, :reset_password_token, unique: true結果
rollbackがエラーなく実行できた。
-- drop_table(:users) -> 0.0034s == 20200726224558 DeviseCreateUsers: reverted (0.0071s) =======================
- 投稿日:2020-07-29T20:19:21+09:00
古のエンジニアがlaravelを初めて触って習熟していく流れで、とても参考になった記事まとめ
経緯
普段はフロントエンド、vueやnuxtの開発を中心にやっています。今回はバックエンドも含めて開発する案件を受注したことをきっかけに、最近流行ってるlaravelでバックエンドを作ってみるか、ということになりました。
もともと、LAMP環境の構築やphp,mysqlは経験がある古のエンジニアです。
以前は素のphp+mysqlでフレームワークを使わずゴリゴリ書いていました。開発環境はlinux(CentOS)をベアメタルサーバーにインストールして、phpやmysqlをソースからインストールしたりして使う、そういう時代のエンジニアです。HTTPサーバーといえばapacheでしょ?という時代から、最近のAWSは便利だよね〜という時代を生きてきた人です。
ちなみにデータセンターにオンプレミス環境を構築して月間数億PVのアクセスがあるソシャゲの開発運用とかを一人でやったりしていました。AWSに移行してからはRDSの負荷分散のためmemcachedサーバーにキャッシュレイヤーを作ったり、懐かしい。
話はそれてしまいましたが、最近はフロントエンド中心の開発案件をやっています。
バックエンドとのやり取りはAPIでやることが主流の時代になってきました。久しぶりにバックエンド作るので、最新のモダンで人気なフレームワークをいっちょやってやるか!と思い人気のlaravelに目をつけたわけです。
laravelを選んだ理由
- 日本語で書かれたドキュメントやサンプルが多い
- AWSとの連携が組み込み済み
- API用のレイヤーが標準装備
- Model経由でのDBとの密な連携
この辺です。テーブル作成はphpmyadminで、PHPの中にSQLを直書きしていた私からすると、アプリケーション内からModelでDBと密接に結合しているのは新鮮です。
フロントエンドとはAPIで連携するので、その辺の機能も標準装備していることに魅力を感じました。
開発環境構築
https://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4
Laravel環境構築はこちらの神リポジトリをcloneしてdockerで一発です。すごい便利な時代になったものですなぁ、昔はLinuxのインスト(ry
laravelのtableを作ってみて、表示させてみる
えっ!DBのテーブルってphpmyadminでチマチマ作るんじゃないんですか?
なるほど、作成、変更履歴も残せるマイグレーションと言うのがあるのか…
https://noumenon-th.net/programming/2020/01/15/laravel-mysql/
larvel passportでAPI認証のバックエンド側基本を作る→やめた
シンプルなjwtに切り替えました。
https://www.whizz-tech.co.jp/1442/
composer dumpautoloadってなんだ?
おかしくなったときはこれ。でもあまり使わない。
https://qiita.com/WebSysRider/items/e41f211f8c913e008d03
laravel上でvueベースの認証画面を作る
基本のapiのやりとり。
https://www.whizz-tech.co.jp/1453/
nodeが無いと言われたのでこちらでDockerを再構築
https://zukucode.com/2019/06/docker-laravel-nodejs.html
http://127.0.0.1/register
にアクセスしてみるnpm run devが抜けていたため、以下のファイルが見つからんかった
/css/app.css 178 KiB /js/app [emitted] /js/app
/js/app.js 1.4 MiB /js/app [emitted] /js/app再度アクセスするとうまくいった
Personal access client not found. Please create one. エラーがでる
php artisan passport:client --personal
上記コマンドならうまくいく、
その後webで再度やるとうまく行った。なんでや?
makefileのinitに以下のコマンドを追加した→削除
docker-compose exec app php artisan passport:install
laravelのアクセスがやったら重いんですけど
Docker for Mac限定の問題。
色々試しましたけど、最終的には直接php artisan serveすることで解決。dockerのvolumeのマウントが原因。 :delegatedをつけたら少し軽くなった。
https://wonwon-eater.com/mac-docker-performance/
/api/userにアクセスしてもなにも起こらない
忘れがち
なお、JSONが返されるのはLaravel5.3のデフォルトではヘッダーにX-Requested-With: XMLHttpRequestがある、またはAcceptヘッダーでjsonが指定されている場合です。(fetchにネイティブ対応しているブラウザではそれを使用した場合明示的にAcceptを指定してやらないと前者の対象にはならずにリダイレクトが発生し200になります。宇宙。)
https://blog.hinaloe.net/2016/09/15/try-passport-laravel-5-3/Acceptヘッダとauth Bearerヘッダを追加して再確認、うまくいった。
よく考えたら、backendフォルダ内で直接laravel動かしたらいいんじゃね?
→動いた。ローカルなので応答も早い。
DBの接続情報を変更する必要がある。Dockerコンテナは環境変数を変更しているため。DB_DATABASE=laravel_local DB_USERNAME=phper DB_PASSWORD=secret.envの更新を反映させるにはコマンドが必要
php artisan cache:clear php artisan config:cachepassportやめたい
composer.jsonを編集して composer update
https://ja.coder.work/so/laravel/545565
認証APIをjwtで作り直し
参考
https://re-engines.com/2019/06/03/laravelで認証apiを作る/
うごかないなんでや
https://github.com/tymondesigns/jwt-auth/issues/1484replace
'expires_in' => auth()->factory()->getTTL() * 60
by
'expires_in' => auth('api')->factory()->getTTL() * 60うごいた。ここでtokenの有効期限も設定できるっぽい
認証APIにregisterを移植した
バリデーションも合わせて実装した
userのcrudをAPIで実装する
参考
https://qiita.com/sutara79/items/cd4371b246b44a2cf87fputのrequestが空っぽなんなんでや??
postmanの設定だった
https://qiita.com/wjtnk/items/eb2ddcc0642dc3197671
PUT時にuserが見つからない場合に出るModelNotFoundExceptionエラーをカスタマイズする
abortの第一引数にresponceを渡さないとstach traceが出るみたいだぞ?
https://laraveldaily.com/laravel-api-404-response-return-json-instead-of-webpage-error/
その他、細かく設定する場合
https://qiita.com/sakuraya/items/af38c4cf84459a8b5967基本形
Handler.phppublic function render($request, Throwable $exception) { if ($exception instanceof ModelNotFoundException) { abort(response()->json(['message' => 'not found'], 404)); } return parent::render($request, $exception); }コードフォーマッタとリンターがないので入れる
https://www.ritolab.com/entry/188#aj_3
開発用のメールサーバー
ブラックホールメールサーバーのDockerコンテナを開発用に立てる
http://127.0.0.1:1080 で送信したメールが全部見れる。なんて便利な世の中や・・https://qiita.com/kanemu/items/1f2da063c7e5b5477502
seederでダミーデータを適当に作る。マスタデータも作れる。
https://qiita.com/shosho/items/b69db263a494edfe3b21
Route::resources で全部使わないよ!って場合
https://qiita.com/sympe/items/9297f41d5f7a9d91aa11
もはや個別にmodel,controllerとか作らなくても良くない?全部まとめて作れるで
https://qiita.com/niisan-tokyo/items/9c799989cb535489f201
管理画面をlaravel-adminで作る
https://laravel-admin.org/docs/#/
https://tac-blog.tech/index.php/2018/09/29/laravel-admin-add-crud/管理設定をmigrationできるようにseederに追加する
https://qiita.com/ntm718/items/5ea29ee70b50320352c4
基本のDBクエリビルド
https://www.ritolab.com/entry/93#aj_11_1
Laravel debaggerを入れる
https://qiita.com/sutara79/items/9fd442a81001842aeba1
apiResource
https://www.webopixel.net/php/1526.html
純粋なAPIで使用するCRUDの場合はapiResourceを使用します。
Route::apiResource('users', 'UsersController');
これで、index,store,show,update,destroyが使用できるようになります。
複数のコントローラーをまとめて指定する場合はapiResourcesを使用します。
Route::apiResources([
'tasks' => 'Api\TaskController',
'users' => 'Api\UserController'
]);api用のデータ整形、リレーションデータの追加。
https://yuhodev.hatenablog.com/entry/2019/11/27/121500
apiCollectionの作成
php artisan make:resource UserCollection php artisan make:resource UserJsonResouseに追加したい
public function toArray($request) { $data = parent::toArray($request); $data["staff"] = StaffResource::collection($this->staff); $data["doctor"] = DoctorResource::collection($this->doctor); return $data; }apiのセキュリティ 自分のデータ以外は編集できてはいけない
Policyの設定を行う。
https://nakka-k.hatenablog.com/entry/2019/06/07/140758
$this->authorize('update', $user);APIで返却するJSONを共通フォーマットにしたい
https://waterfalls.hatenablog.com/entry/2019/08/24/012913
Modelでバリデーションをする
https://qiita.com/kd9951/items/c06d107aa4018295aa25
中間テーブルを通した多対多リレーション
https://php-junkie.net/framework/laravel/many_to_many/
Tips: primarykeyを使わない場合
https://www.yuulinux.tokyo/15552/#i-5多対多リレーション時のデータ修正・追加
例えばusers-> user_role -> roles というふうに
中間テーブルを経由してroleを管理している場合、roleを変更したい場合はroleテーブルのidを配列で渡すだけで良い
roles = [1,2,3]$user->roles()->sync($request->roles);神か!!!
https://nextat.co.jp/staff/archives/200
この辺から自力で調べつつ、公式リファレンスを読めば大体構築イメージがつかめるようになってきました。
概ね3日でLaravelの基本は理解できたと言えます。
素晴らしいフレームワークですが、レイヤーも多いため、基本のSQLの知識も必要、PHPの基礎も。やっぱ基礎って大事だな、と思いました。
- 投稿日:2020-07-29T17:49:11+09:00
DockerでAPIサーバー(Flask)を立てる
Dockerのお勉強シリーズその2
https://www.nogawanogawa.work/entry/backend_api
を参考にやってみたことのメモ。
前回の続き
実行環境
- Windows 10
- DockerDesktop for Windows
ディレクトリ構成
├── backend │ ├── Dockerfile │ ├── app.py │ └── requirements.txt ├── docker-compose.yml └── mysql ├── conf.d │ └── my.cnf ├── initdb.d │ ├── schema.sql │ └── testdata.sql └── log └── ysqldocker-compose.yml
flaskの定義を追加。
docker-compose.ymlversion: '3.3' services: db: image: mysql:latest restart: always volumes: - .\mysql\initdb.d:/docker-entrypoint-initdb.d - .\mysql\conf.d:/etc/mysql/conf.d - .\mysql\log\ysql:/var/log/mysql environment: MYSQL_DATABASE: sample_db MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: rootpassword command: --default-authentication-plugin=mysql_native_password expose: - 3306 flask: build: backend/ volumes: - ./backend:/code environment: MYSQL_DATABASE: sample_db MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: rootpassword ports: - "5000:5000" command: flask run --host 0.0.0.0 --port 5000 links: - db depends_on: - dbFlask
Dockerfile
python3のイメージにrequirements.txtのパッケージをインストールするだけ。
FROM python:3 ENV PTYHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txtrequirements.txt
なんとなくPyMySQLにしてみた。
flask flask-cors PyMySQL cryptographyapp.py
app.pyimport os import pymysql.cursors from flask import Flask, request, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app) conn = pymysql.connect( host='db', port=3306, user=os.environ.get('MYSQL_USER'), password=os.environ.get('MYSQL_PASSWORD'), db=os.environ.get('MYSQL_DATABASE'), charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) @app.route('/', methods=['GET']) def select_all(): with conn.cursor() as cur: sql = "SELECT * FROM Comment" cur.execute(sql) results = cur.fetchall() return jsonify(results)コンテナ起動&確認
$ docker-compose build $ docker-compose up -d Starting webapp_db_1 ... done Creating webapp_flask_1 ... donecurlでgetしてデータをとれることを確認。そのままだと見づらいのでjqに食わせると見やすくなる。
$ curl 'localhost:5000' | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 256 100 256 0 0 6400 0 --:--:-- --:--:-- --:--:-- 6400 [ { "category": "food", "content": "good", "id": 1, "title": "curry" }, { "category": "vegitable", "content": "good", "id": 2, "title": "poteto" }, { "category": "vegitable", "content": "bad", "id": 3, "title": "onion" }, { "category": "meat", "content": "very good", "id": 4, "title": "poak" } ]途中で発生した問題
$ docker-compose up -d Starting webapp_db_1 ... done Starting webapp_flask_1 ... done $ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------- webapp_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp webapp_flask_1 flask run --host 0.0.0.0 - ... Exit 1 $ docker-compose logs -t flask Attaching to webapp_flask_1 flask_1 | 2020-07-29T07:00:20.975201259Z RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methodsここらへんを参考に
-> 【MySQL・Docker】cryptography is required for sha256_password or caching_sha2_passwordを参考にmy.cnfを作成
-> docker-compose python: RuntimeError: cryptography is required for sha256_password or caching_sha2_password
- 投稿日:2020-07-29T15:08:13+09:00
DockerでMySQLコンテナを立ち上げ~実行確認
Dockerのお勉強シリーズその1(続く予定)
https://www.nogawanogawa.work/entry/backend_api
を参考にやってみたことのメモ。
最終的には
frontend + backend + db
の構成を作りたいの第一歩実行環境
- Windows 10
- DockerDesktop for Windows
ディレクトリ構成
. ├── docker-compose.yml └── mysql ├── conf.d ├── initdb.d │ ├── schema.sql │ └── testdata.sql └── logdocker-compose.yml
version: '3.3' services: db: image: mysql:latest restart: always volumes: - .\mysql\initdb.d:/docker-entrypoint-initdb.d - .\mysql\conf.d:/etc/mysql/conf.d - .\mysql\log\ysql:/var/log/mysql environment: MYSQL_DATABASE: sample_db MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: rootpassword ports: - 3306:3306テーブル定義&初期データ
mysql/init.dにテーブル定義と投入する初期データのファイルを作成する
schema.sqlCREATE TABLE Comment ( id int NOT NULL AUTO_INCREMENT, title varchar(32) NOT NULL, category varchar(32) NOT NULL, content varchar(256) NOT NULL, PRIMARY KEY(id) );testdata.sqlINSERT INTO Comment (title, category, content) VALUES ('curry', 'food', 'good'); INSERT INTO Comment (title, category, content) VALUES ('poteto', 'vegitable', 'good'); INSERT INTO Comment (title, category, content) VALUES ('onion', 'vegitable', 'bad'); INSERT INTO Comment (title, category, content) VALUES ('poak', 'meat', 'very good');コンテナ起動&確認
docker-compose upでコンテナ起動
$ docker-compose up -ddocker execで起動したコンテナに入り、mysqlに接続。
テストデータが入っていることまで確認。$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f225c6620b90 mysql:latest "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp webapp_db_1 $ docker exec -it f225c6620b90 bash # mysql --user=user --password=password mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | sample_db | +--------------------+ mysql> show tables; +---------------------+ | Tables_in_sample_db | +---------------------+ | Comment | +---------------------+ 1 row in set (0.00 sec) mysql> select * from Comment; +----+--------+-----------+-----------+ | id | title | category | content | +----+--------+-----------+-----------+ | 1 | curry | food | good | | 2 | poteto | vegitable | good | | 3 | onion | vegitable | bad | | 4 | poak | meat | very good | +----+--------+-----------+-----------+ 4 rows in set (0.01 sec)
- 投稿日:2020-07-29T02:10:00+09:00
MySQLインストール後、アクセス拒否 (Access denied for user ‘root’@’localhost’)
myqslを起動し、アクセスする時、拒否られた。
$ mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)rootユーザーにアクセス権限がない
mysql一旦停止
$ mysql.server stop権限を回避してアクセス
$ mysqld_safe --skip-grant-tables 2020-07-27T12:14:14.6NZ mysqld_safe Logging to '/usr/local/var/mysql/XXXX.err'. 2020-07-27T12:14:14.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysqlmysqld_safe
-> mysqldサーバーを起動するためのスクリプト--skip-grant-tables
-> 権限なしで起動上記コマンドを入力したら、新しくターミナルタブを開いてください。(
command
+T
)mysqlへアクセス
$ mysql -u root mysql>権限確認
mysql> use mysql; Database changed mysql> select * from user;use (データベース名);
-> データベース選択select (カラム) from (テーブル);
-> 指定したテーブルから指定したカラムの情報取得userテーブル削除
mysql> truncate table user; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)truncate table (テーブル);
-> テーブル内のデータ全て削除
flush privileges;
-> テーブルを再ロードrootユーザーを作成し、権限付与
mysql> create user 'root' identified by 'password'; Query OK, 0 rows affected (0.04 sec) mysql> SELECT user, host FROM mysql.user; +------+------+ | user | host | +------+------+ | root | % | +------+------+ 1 row in set (0.01 sec) mysql> grant all privileges on *.* to 'root'; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> quit; Byecreate user 'ユーザー名' identified by 'パスワード';
-> ユーザー作成 & パスワード設定grant all privileges
-> GRANT OPTION を除き、指定されたアクセスレベルにあるすべての権限を付与します。on . to 'ユーザー名';
-> 特定のサーバー上のすべてのデータベースに適用されるグローバル権限を割り当てます。mysqld_sefe プロセス終了
$ ps PID TTY TIME CMD 508 ttys000 0:00.55 -bash 76932 ttys001 0:01.19 -bash 98076 ttys001 0:00.04 /bin/sh /usr/local/opt/mysql@8.0/bin/mysqld_safe --skip-grant-tables 98176 ttys001 1:03.36 /usr/local/opt/mysql@8.0/bin/mysqld --basedir=/usr/local/opt/mysql@8.0 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@8.0/lib/plugin --skip-grant-tables --log-e 81032 ttys002 0:00.36 -bash $ KILL 98076 $ KILL 98176ps
-> 現在実行されているプロセス一覧表示KILL (PID)
-> プロセス終了mysql再起動、再アクセス
$ mysql.server start Starting MySQL .. SUCCESS! $ mysql -u root -p Enter password:
- 投稿日:2020-07-29T00:36:38+09:00
MySQLが起動しないエラー (The server quit without updating PID file)
mysql起動時に下記エラー発生
$ mysql.server start Starting MySQL ... ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXX.pid).https://qiita.com/akiko-pusu/items/aef52b723da2cb5dc596
↑記事を参考に一旦アンインストールして再インストールしました。一度、5.6をインストールした後、8.0を使いたいと思い、またアンインストール&再インストールしました。
起動してみると、
$ mysql.server start -bash: /usr/local/opt/mysql@5.6/bin/mysql.server: No such file or directoryパスが5.6のままで起動できませんでした。
自分はbashを使用していたので、
.bashrc
ファイルにパスを通しました。
(zshを利用されている方は、.zshrc
です)$ vi ~/.bashrc export PATH=/usr/local/opt/mysql@8.0/bin/:$PATH $ source ~/.bashrc再度起動してみると、
$ mysql.server start Starting MySQL ... ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXX.pid).同じエラーが再発しました。
次に、プロセスを確認
$ ps -ef | grep mysql 501 699 1 0 16 720 ?? 0:00.04 /bin/sh /usr/local/opt/mysql@5.6/bin/mysqld_safe --datadir=/usr/local/var/mysql 501 974 699 0 16 720 ?? 1:06.51 /usr/local/opt/mysql@5.6/bin/mysqld --basedir=/usr/local/opt/mysql@5.6 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@5.6/lib/plugin --log-error=XXXX-Air.local.err --pid-file=XXXX-Air.local.pid 501 3524 81032 0 1:48AM ttys002 0:00.00 grep mysql5.6が起動してるので、強制終了(-9)する
(974は上記のプロセスID)$ kill -9 974再々チャレンジ!!
$ mysql.server start Starting MySQL .. SUCCESS!成功!!