20200729のMySQLに関する記事は7件です。

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">

無題.png

Composerインストール

Composer先生ってJenkins先生と画風が似てますね…
ひとまず普通にインストールすればOKと思われます。
https://getcomposer.org/

CakePHPプロジェクト作成

コマンドプロンプトでプロジェクトを作成したい場所に移動します。
基本ドキュメントルートで作成するかなと思います。
cd c:\workspace
composer create-project --prefer-dist cakephp/app <アプリケーション名>

作成完了後、
http://localhost/<アプリケーション名>
にアクセスすると下記のページが出ればOKです。
無題.png

データベース設定

この状態だと、まだ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を選択して管理コンソールを開く。
無題.png

データベースとユーザーを作成する。
コンソールのGUIからも作成できるけどコマンドで作ったほうが早いかも。
(といいつつコンソールで作った…)

作成したらC:\workspace\belongings-app\config\app-local.phpを編集
無題.png

Datasourcesの下階層のusername、password、databaseの内容を編集します。
これでエラーは解消されます。

Eclipseでのデバッグ設定

Eclipseのインストール及びPHP Development Toolsの導入を行います。
https://www.eclipse.org/downloads/

file>import>Existing Composer Project
で上記で作成したプロジェクトをインポートする。

コンテキストメニューのDebug Asか上のバグアイコンから「Debug Configration」を開く
無題.png
Name:任意
File:<アプリケーション名>/webroot/index.php

Debuggerタブに切り替えて「Configure」ボタンを押下する。
無題.png
Debugger:Xdebug
Port:お好み

「Finish」押下後、Debuugerタブの設定確認
無題.png
Break at First Line:チェック外しておく(どちらでもよいが…)

ここで「Debug」を押下すると、Eclipseの内部ブラウザで表示される

外部ブラウザで表示したい場合

Window > Preferences
General>Web Browser
無題.png
図のように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"

デバッグ実行時のポートを上記に合わせる。

これでデバッグ実行が可能になる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】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) =======================
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

古のエンジニアがlaravelを初めて触って習熟していく流れで、とても参考になった記事まとめ

経緯

普段はフロントエンド、vueやnuxtの開発を中心にやっています。今回はバックエンドも含めて開発する案件を受注したことをきっかけに、最近流行ってるlaravelでバックエンドを作ってみるか、ということになりました。

もともと、LAMP環境の構築やphp,mysqlは経験がある古のエンジニアです。
以前は素のphp+mysqlでフレームワークを使わずゴリゴリ書いていました。

開発環境はlinux(CentOS)をベアメタルサーバーにインストールして、phpやmysqlをソースからインストールしたりして使う、そういう時代のエンジニアです。HTTPサーバーといえばapacheでしょ?という時代から、最近のAWSは便利だよね〜という時代を生きてきた人です。

ちなみにデータセンターにオンプレミス環境を構築して月間数億PVのアクセスがあるソシャゲの開発運用とかを一人でやったりしていました。AWSに移行してからはRDSの負荷分散のためmemcachedサーバーにキャッシュレイヤーを作ったり、懐かしい。

話はそれてしまいましたが、最近はフロントエンド中心の開発案件をやっています。
バックエンドとのやり取りはAPIでやることが主流の時代になってきました。

久しぶりにバックエンド作るので、最新のモダンで人気なフレームワークをいっちょやってやるか!と思い人気のlaravelに目をつけたわけです。

laravelを選んだ理由

  1. 日本語で書かれたドキュメントやサンプルが多い
  2. AWSとの連携が組み込み済み
  3. API用のレイヤーが標準装備
  4. 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で再度やるとうまく行った。なんでや?

これが回答かな?
https://stackoverflow.com/questions/56249565/why-we-have-to-create-personal-access-client-in-passport-again-and-again

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:cache

passportやめたい

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/1484

replace
'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/cd4371b246b44a2cf87f

putの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.php
    public 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 User

JsonResouseに追加したい

    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の基礎も。

やっぱ基礎って大事だな、と思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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
        └── ysql

docker-compose.yml

flaskの定義を追加。

docker-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
    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:
      - db

Flask

Dockerfile

python3のイメージにrequirements.txtのパッケージをインストールするだけ。

FROM python:3
ENV PTYHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt

requirements.txt

なんとなくPyMySQLにしてみた。

flask
flask-cors
PyMySQL
cryptography

app.py

app.py
import 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 ... done

curlで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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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
    └── log

docker-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.sql
CREATE 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.sql
INSERT 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 -d

docker 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)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/mysql

mysqld_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;
Bye

create 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 98176

ps
-> 現在実行されているプロセス一覧表示

KILL (PID)
-> プロセス終了

mysql再起動、再アクセス

$ mysql.server start
Starting MySQL
.. SUCCESS! 

$ mysql -u root -p
Enter password: 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 mysql

5.6が起動してるので、強制終了(-9)する
(974は上記のプロセスID)

$ kill -9 974

再々チャレンジ!!

$ mysql.server start
Starting MySQL
.. SUCCESS!

成功!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む