【mysqlが動かない】Linuxのシンボリックリンクを設定する
背景
mysqlをhomebrew経由でインストールし、パッケージがインストールできたことが確認できたにも関わらずmysql.server startコマンドで失敗した。
mysqlがローカルにインストールされているため、パスの問題だと思い対策していくうちに原因がmysql.serverコマンド実行時に参照しているパスが間違いであることに気づいた。そこでLinuxのシンボリックリンクを設定し解決した。
環境
・mac0S(M1チップ)
・mysql(ver:9.0.1)
・homebrewをパッケージ管理に利用
・shellはzsh
問題の詳細
最初にmysqlをローカルにhomebrewでインストールした
brew install mysql
この時にmysqlの9.0.1がインストールされた。
次にターミナルで以下のコマンドを実行
mysql --version
するとzsh:command not found: mysqlが出力された。
「あーパスが通ってないのか」と思い、ググって以下のパスをzshrcに貼り付けて保存した。
export $PATH="user/local/opt/mysql/bin:$PATH"
そして、以下のコマンドでpathを反映させた。
source ~/.zshrc
そして以下コマンドを実行。
mysql --version
するとまたzsh:command not found: mysqlが出力された。
対策したこと
「あれ?もしかしてPATH間違ってる?」と思い、mysqlの保存されている場所を検索。まずhomebrewが置かれているディレクトリを調べることにした。
brew --prefix
出力結果は以下。
/opt/homebrew
「なるほど、homebrewのパスがuser/localではなく/opt/homebrewなのか」と理解。「ということはmysqlは/opt/homebrewの下のディレクトリに保存されている?」と考えmysqlの保存場所を検索。
brew list mysql
返ってきた出力は以下。
/opt/homebrew/Cellar/mysql/9.0.1.reinstall/.bottle/etc/my.cnf
~~~省略~~~
なるほどと思い、zshrcのパスを変えることにした。
export PATH="/opt/homebrew/opt/mysql/bin:$PATH
mysql --versionの実行
mysqlのPATHも正しく設定されたので、mysqlコマンドを実行してみた。
mysql --version
すると返ってきた結果は以下。
mysql Ver 9.0.1 for macos12.7 on arm64 (Homebrew)
「よっしゃー!PATH通ったー」
問題発生。mysqlの起動ができない!
mysql.server start
上記のコマンドでmysqlを起動してみる。
/opt/homebrew/opt/mysql/bin/mysql.server: line 259: cd: /opt/homebrew/Cellar/mysql/9.0.1: No such file or directory
Starting MySQL
「え、なんで??mysqlも入っているし、PATHも正しく設定したやん」
仕方なくmysql.serverの259行目をみてみる。
case "$mode" in
'start')
# Start daemon
# Safeguard (relative paths, core dumps..)
cd $basedir
echo $echo_n "Starting MySQL"
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
# Make lock for RedHat / SuSE
if test -w "$lockdir"
then
touch "$lock_file_path"
fi
exit $return_value
else
log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
fi
;;
「cd $basedirの際にディレクトリがないよってことか」
エラー文をもう一度読んでみる。
/opt/homebrew/Cellar/mysql/9.0.1: No such file or directory
「mysqlちゃんとあるはずなんだけど。。」
以下コマンドでもう一回mysqlの中身を確認してみる。
brew list mysql
結果は以下。
/opt/homebrew/Cellar/mysql/9.0.1.reinstall/.bottle/etc/my.cnf
~~~省略~~~
9.0.1.reinstallというディレクトリであることが判明!!mysql起動時にmysql/9.0.1をライブラリは探しているが、実際は9.0.1.reinstallというディレクトリに変わっていたため、ファイルがないというエラーを吐いていた。
シンボリックリンクを設定する
もう一回mysqlのパッケージの再インストールとかすれば直りそうとも思ったが、Linuxの
シンボリックリンクを設定しても動くと思ったので、そちらで対応することにした。
ln -s /opt/homebrew/Cellar/mysql/9.0.1.reinstall /opt/homebrew/Cellar/mysql/9.0.1
これでmysql.server startが無事起動した。
mysqlのパッケージを再度入れ直したりした際は再度設定が必要と思われる。
Discussion