2018年04月27日記載
MySQL8.0.11リリース、今回もまた苦労させられました
MySQLは8.0.11をGA(General Availability)として配布を開始した。事前に情報を知らずに定期的にチェック巡回でMySQLのWebサイトを除いてみると、想像を超える数字に変更されていて一瞬目を疑った。昨日まで5.7だったのが突然8なのだから。

Windowsも8から9を飛ばして10を採用するなど、以前のような西暦の数字からの変更の動向を含め、PC界隈の業界はなんだかんだとMicrosoftの影響は続いているんだと実感する。

PHPも5.5から6飛ばしの7を採用。MySQLに至っては5.7から2つ飛ばしの8.0ときた。6どころか7さえも飛ばしてしまうバージョン番号の割り付けは最近の流行なのだろうか。Apacheの2.2から2.4はかわいく感じてしまう。

まず、私の対応状況を説明すると、本日付で無事infobuild.jpを運用しているサーバにおいてLAMP環境は華麗に?最新構成へと変貌を遂げた。

・CentOS 7.4
・OpenSSL 1.1.0h
・Apache 2.4.33
・PHP 7.2.5
・MySQL 8.0.11
・phpMyAdmin 4.8.0.1

本来なら慎重に実施が求められるアップデート作業だがここは非営利の個人Webサイト環境。多少運用が止まろうとお構いなし。自己実現のトライアル場として本サイト運営の目的の一つにもなっている。

これまでも他のソフトがメジャーバージョンがあるたびに、これまでの環境がそのまま動かない事象に見舞われてきた。最近だとPHP7.2への変更だ。PHP7.2ではPHPExcelが動かずその対応で1週間ほど苦しんだ経験があった。PHPSpreadSheetに切り替えのおいてセルの書式設定の違いの把握が最も苦しんだ要素である。

PHP7.2のソースインストール作業ではzlibだけでなくlibzipも入れよ的なワーニングがconfigure時に発出されため、別に使いもしないlibzipであったが、ならlibzipをいれてやろうじゃないかと挑戦してみたらlibzip1.4.0からmakeではなくcmakeでないとビルドできない仕様変更で慌てふためいた。

libzipのcmakeはcentos7.4でyumからインストールしたcmakeではバージョンが古いと怒られ、新たにcmake3系を入れる作業にまで発展。鶏の卵を生むために卵を作るみたいない連鎖の連続だった。

さらにapacheではこれまでOpenSSLについて1.0.2系しか対応していなかったが、2.4.27から1.1.0系にも対応したのを機に1.1.0をインストールに挑戦したら、今度はOpenSSL1.1系と1.0.2とLinux内に配置されるファイルの場所が異なっている関係で、ライブラリファイルのリンク違いでインストールエラーの勃発など、原因解明に時間を取られてた。

そして今回はMySQL8.0.11の登場である。5.7系との最大の違いは2点、1点目はMyISAMが未サポートとなったこと、そして一番の影響があったのがユーザ認証方式の初期値変更である。

1点目のMyISAMについては一部集計目的で使用していただけあって、すでにメインはinnoDBとしていたので事実上影響はなかった。

ところが2点目ではデフォルト設定のままだとPHPからMySQLにログインできない事象に見舞われてしまったのである。しかも新規に8.0をインストールした場合、これまでサポートファイルディレクトリにあるサンプルのmy.cnfファイルさえなくなっており、しばらく途方に暮れてしまったのである。

Google先生に必死で確認した結果、答えが見つかったので見よう見まねで挑戦。そこで実際に私が行った手順を解説を抜きで紹介したい。自営メモ代わりである。

以下はCentOS7.4に新規インストールした場合を想定している。5.7からアップデートもできるが、できれば8.0への切り替えはゼロベースからをおすすめしたい。

ソースファイル「mysql-8.0.11.tar.gz」は前もって/home/srcにコピー済を前提とします。

> systemctl disable mariadb
> yum -y remove mariadb-libs
> yum -y install cmake
> yum -y install ncurses-devel
> yum -y install openssl-devel
↑ここポイント 基本のopenssl-develがないとビルド時につまずくので注意。

> cd /home/src
> tar xvfz mysql-8.0.11.tar.gz
> cd mysql-8.0.11
> cmake . -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/src/boost
> make
> make install
> groupadd mysql
> useradd -r -g mysql mysql
> /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql --log-error-verbosity=3 --initialize-insecure
> chown -R mysql:mysql /usr/local/mysql
> cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
> /etc/rc.d/init.d/mysqld start
> vi /etc/my.cnf(←ここポイント:新規インストールではファイルを作成する)

my.cnfの中身
----
[mysqld]
default_authentication_plugin = mysql_native_password
---

> /usr/local/mysql/bin/mysql -u root -p
# CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
# exit;

> /usr/local/mysql/bin/mysql -u root -p
(設定したパスワードで再ログイン)
# CREATE USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
# GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
# exit;

> /usr/local/mysql/bin/mysql -u admin -p
# DROP USER 'root'@'localhost';
# CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
# GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
# exit;

以上である。

とにもかくにもmysql_native_passwordモードにしないと従来どおりの使い方ができなかったのである。しかもデフォルトのrootユーザを一旦削除してからCREATE USERしないとうまくいかなかった。これらの作業前にmy.cnfファイルがインストール直後では存在しないので、/etc配下に新規作成をおこなってmysql_native_passwordを有効にすることを先にしておく必要があるので注意である。

最新バージョンの対応をネットから情報を得ようとすると必然的に米国サイトとなってしまうのが辛いところ。でもGoogle翻訳をするとだいたい何を言っているのか理解できるもの。なんとか自己解決に至ることができた。

新しいものへの挑戦は毎回苦労する。でもこうして無事動作できるまでに到達ですると実に清々しい。最新バージョン環境下で動かすWebコンテンツはとても気持ちものである。
コラムワード検索
表示件数
ワード検索
本コラムに関する意見
Twitterにて受け付けます @megahit_jp