「MySQLがこわれた」ときに諦めてクリーンインストールする方法
先日開発端末にインストールしていたMySQLが起動しなくなりました。
(実際には壊れた原因に心当たりはあり、簡単に元に戻すのが難しいということがわかっていました)
対応として今回はMySQLをクリーンインストールする方針をとりました。何をどうやって入れ直すのかまとめておきます。
※クリーンインストールは最終手段です。先に元に戻せないかやってみましょう。 ngmt83.hatenablog.com
やりたいこと
MySQLはRailsでのアプリ開発に使用しており、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設定は簡単で、スクリーンショットのようにユーザ名とパスワードを入力するだけです。
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