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

目次

  1. データベースのバックアップ
  2. MySQL 更新
  3. データベース(テーブル)の復元
  4. ユーザーの追加, 権限の再設定
  5. phpMyAdmin にログインできない!?

データベースのバックアップ

この節はとても重要です.

はじめに, データベースをバックアップします!

これから説明する方法では, ユーザー情報はバックアップされません!

ユーザー情報は, なにか別の方法でバックアップしてください!

  1. MySQL のディレクトリを丸ごとバックアップ
# MySQLを停止させます (自分の環境へ合わせてコマンドを発行)
# (sudo brew services stop mysql の場合もあるだう)
% brew services stop mysql

# 適当な場所へバックアップ
% cp -pr /usr/local/Celler/mysql /適当な場所/mysql_backup
  1. 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';

Tags:

コメントを残す

メールアドレスが公開されることはありません。