🙌

【mysqlが動かない】Linuxのシンボリックリンクを設定する

2024/09/04に公開

背景

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