MySQLのバージョンアップで詰まったので, ポイントをまとめて置きます.
対象
- MySQL 5.7.22 から 8.0.13 へバージョンアップしたら WordPress がエラーをはく
- 同じく phpMyAdmin がエラーをはく
- Mac
- Homebrew で MySQL をインストールしている
環境
MACHINE: MacPro late 2013
OS : macOS Mojave version 10.14.1
MySQL : 5.7.22 -> 8.0.13
phpMyAdmin: phpMyAdmin-4.5.3.1-all-languages
-> phpMyAdmin-4.8.4-all-languages
目次
- データベースのバックアップ
- MySQL 更新
- データベース(テーブル)の復元
- ユーザーの追加, 権限の再設定
- phpMyAdmin にログインできない!?
データベースのバックアップ
この節はとても重要です.
はじめに, データベースをバックアップします!
これから説明する方法では, ユーザー情報はバックアップされません!
ユーザー情報は, なにか別の方法でバックアップしてください!
- MySQL のディレクトリを丸ごとバックアップ
# MySQLを停止させます (自分の環境へ合わせてコマンドを発行) # (sudo brew services stop mysql の場合もあるだう) % brew services stop mysql # 適当な場所へバックアップ % cp -pr /usr/local/Celler/mysql /適当な場所/mysql_backup
- MySQL のテーブルをバックアップ
私は phpMyAdmin からデータベースをバックアップしました.
以下のような画面でデータベースをバックアップ(エクスポート)します.
今回は backup.sql として保存します.
MySQL 更新
brew で mysql を更新します.
この時点では MySQL 5.7.22 が最新だったため下のコマンドで更新しました.
% brew upgrade mysql # ここで postinstall についてのエラーが出ていたがログ取り忘れ
その後, 起動しようとしますが 以下のようなエラーをはき起動しません.
% mysql.server start Starting MySQL ./usr/local/Cellar/mysql/8.0.13/bin/mysqld_safe: line 144: /usr/local/var/mysql/Mac-Pro.local.err: Permission denied /usr/local/Cellar/mysql/8.0.13/bin/mysqld_safe: line 144: /usr/local/var/mysql/Mac-Pro.local.err: Permission denied /usr/local/Cellar/mysql/8.0.13/bin/mysqld_safe: line 199: /usr/local/var/mysql/Mac-Pro.local.err: Permission denied /usr/local/Cellar/mysql/8.0.13/bin/mysqld_safe: line 144: /usr/local/var/mysql/Mac-Pro.local.err: Permission denied ERROR! The server quit without updating PID file (/usr/local/var/mysql/Mac-Pro.local.pid).
mysql のディレクトリを完全に削除し, 再びインストールを試みます.
ここから下は, 必ずバックアップを取ってから実行してください!
必ずバックアップを取ってから実行してください!!
# !!!バックアップを取ってから削除!!! % sudo rm /usr/local/Celler/mysql # brew postinstall % brew postinstall mysql ==> Postinstalling mysql ==> /usr/local/Cellar/mysql/8.0.13/bin/mysqld --initialize-insecure --user=ユーザ名なので伏せる --basedir=/usr/local/Cellar/mysql/8.0.13 --datadir=/ # MySQL を起動 % mysql.server start Starting MySQL . SUCCESS!
無事に起動できました.
データベース(テーブル)の復元
/usr/local/Celler/mysql
を削除したため, バックアップからデータベースを復元します.
ユーザーはファイルへバックアップしていないので, 手動で復元します.
# -f オプションでエラーが起きても無視しています % mysql -uroot -f < backup.sql ERROR 3554 (HY000) at line 481: Access to system table 'mysql.innodb_index_stats' is rejected. ERROR 3554 (HY000) at line 484: Access to system table 'mysql.innodb_index_stats' is rejected.
ユーザーの追加, 権限の再設定
WordPress 用のユーザーを追加します.
with mysql_native_password
を指定しないと WordPress がデータベースへ接続できません.
MySQL のデフォルトの認証プラグインが caching_sha2_password
へ変更になったため,
mysql_native_password
を明示的に指定する必要があります.
# ユーザの追加 # 認証プラグインは mysql_native_password を指定 mysql> create user 'wordpress_user'@'localhost' identified with mysql_native_password by 'password'; # 権限の設定 (WordPress のサイトを参考に) mysql> grant all privileges on `wordpress_database`.* to 'wordpress_user'@'localhost'; mysql> flush privileges;
phpMyAdmin にログインできない!?
phpMyAdmin にログインしようとすると以下のようなエラーが出ました.
どうやら phpMyAdmin にログインするユーザも, 認証プラグインを mysql_native_password
に変更しなければならないようです.
# phpMyAdmin ログイン用のユーザーの認証プラグインを mysql_native_password へ mysql> create user 'phpmyadmin_user'@'localhost' identified with mysql_native_password by 'password'; # rootなら以下のように (あまりよろしくない気がするが...) mysql> create user 'root'@'localhost' identified with mysql_native_password by 'password';