ナガモト の blog

Full Cycle Developerを目指すエンジニアが有用そうな技術記事や、ポエムのようなよしなしごとを投稿するブログです。

「MySQLがこわれた」ときに諦めてクリーンインストールする方法

先日開発端末にインストールしていたMySQLが起動しなくなりました。

(実際には壊れた原因に心当たりはあり、簡単に元に戻すのが難しいということがわかっていました)

対応として今回はMySQLクリーンインストールする方針をとりました。何をどうやって入れ直すのかまとめておきます。

クリーンインストールは最終手段です。先に元に戻せないかやってみましょう。 ngmt83.hatenablog.com

やりたいこと

  • 開発端末localのMySQLを完全にアンインストール
  • 指定バージョンのMySQLをインストール
  • 接続用のユーザ作成
  • DB管理アプリ・RailsアプリからMySQLに接続

MySQLRailsでのアプリ開発に使用しており、Railsから接続できる必要があるため含めています。 また、複数バージョンのMySQLを用いる予定はありません。*1

環境

  • OS: macOS Mojave ver 10.14.4
  • shell: fish, version 3.0.2
  • パッケージマネージャ: Homebrew
  • MySQL: MySQL@5.7
  • DB管理アプリ: Sequel Pro
  • Rails: Rails 5.2.0

開発端末localのMySQLを完全にアンインストール

まずはインストールされているMySQLを確認しましょう。

brew list | grep mysql

これでbrewでインストールしてあるMySQLが確認できます。単にmysql以外にもmysql@5.7のようにバージョン指定されたものもあります。アンインストールは次のコマンドで実行できます。

brew uninstall [インストールしたいバージョンのmysql]

uninstallしただけではMySQLの実行時の各種データ・ファイルは残ったままです。仕切り直したいので次のコマンドですべて削除しましょう。

rm -rf /usr/local/var/mysql

データベースのバックアップを取りたい場合は削除する前にmysqldumpしましょう。私は忘れていてひどい目にあいました。

ちなみに「なんかそれっぽいものあるやん」とDB情報を保存していそうな /usr/local/var/mysql 以下のフォルダ(データベース名がついている)をコピーしてバックアップとするのはおすすめしません。私はそれでひどい目に(以下略

指定バージョンのMySQLをインストール

次のコマンドでインストールできるものを確認しましょう。

brew search mysql

今回はバージョン5.7を利用したいため、mysql@5.7をインストールします。

brew install mysql@5.7

これでインストール完了です。しかしこれだけではmysqlコマンドで実行はされません。

これについてはインストール中のログで次のような説明されています。(バージョンにより細部は異なる)

mysql@5.7 is keg-only, which means it was not symlinked into /usr/local,

雑に言うと「mysql@5.7はインストールしたものの、通常のコマンドでは呼び出されない」という意味です。

通常のmysqlコマンドで呼び出すためにはシンボリックリンクを貼るか、インストール先にPATHを通す必要があります。 今回はスタンダードな手法としてインストール時に表示される次の指示に従ってPATHを通しましょう。(バージョンや使用するshellにより細部は異なる)

If you need to have mysql@5.7 first in your PATH run:
  echo 'set -g fish_user_paths "/usr/local/opt/mysql@5.7/bin" $fish_user_paths' >> ~/.config/fish/config.fish

これはshellのconfigにPATHを追加する記述を行うコマンドです。そのまま実行してしまって構いません。*2

configを更新したらそれを反映するために次のコマンドを実行しましょう。(fish shellの場合です)

. ~/.config/fish/config.fish

接続用のユーザ作成

Sequel ProやRailsからMySQLに接続するためのユーザを作成します。

mysql

mysqlツールを起動し、次のようなコマンドを実行しましょう。

mysql> SET PASSWORD FOR [ユーザ名]@localhost = ‘[パスワード]’

root, rootでもいいですが、アプリからの接続ユーザが設定されている場合はそれに従いましょう。

DB管理アプリ・RailsアプリからMySQLに接続

DB管理アプリはSequel Proを使用します。*3設定は簡単で、スクリーンショットのようにユーザ名とパスワードを入力するだけです。

f:id:ngmt83:20190516181924p:plain
Seaqual ProでlocalhostのDB接続設定

Railsアプリの場合は config/database.yml にユーザ名とパスワードを記述しましょう。rails db:createなどDB接続が必要なコマンドが実行できれば成功です。

最後に

説明しておいてなんですが、そもそも開発マシンに直接MySQLのようなDBをインストールするのはおすすめできません。 MySQL環境の構築はなかなかにめんどくさいですし、切り出したコンテナに接続するのもさほど難しくないのでぜひdockerを使いましょう。

*1:その場合は大人しくdockerを使いましょう

*2:実行して変更されたconfigを確認したいときはcat ~/.config/fish/config.fish

*3:Mojaveでは不安定なのでDBeaverに乗り換えたい。https://qiita.com/nanasess/items/609c7cda4adee344221c