Fedora29にMySQLを導入

サーバーマシンをリニューアルしてFedora29をインストールしました。しかしMovableTypeをバージョンアップする気にはとてもなれず、MT5.2.2のまま使うことにしました。この記事はMTを動かすためのMySQLを導入した時に苦労した内容の覚書です。

1.MySQL 5.5.62インストール→失敗

Fedora18ではMySQL 5.5.31でMTを動かしていました。移行作業のトラブルを極力少なくするため、このバージョンに最も近くて現在でもダウンロードできる5.5.62をインストールすることにしました。

(1)バイナリーによるインストール

mysql-5.5.62-linux-glibc2.12-x86_64.tar.gzを落として来て解凍。
mysqlユーザー、mysqlグループを生成して、所有権変更(下記)

# cd /****/mysql
# chown -R mysql:mysql .

初期化

# ./scripts/mysql_install_db --user=mysql

まで成功するが、

# mysql -u root

で、モジュールが無いというメッセージが出てローカルクライアントでのログインに失敗した。

(2)ソースによるインストール

バイナリによるインストールを早々にあきらめ、ソースからインストールすることにした。この作業は、ココを参考にした。

落とした mysql-5.5.62.tar.gz を解凍し /****/src にディレクトリ毎移動。Cmakeというツールでcofigする必要があり、その際ncursesというライブラリが必要らしい。

# yum install cmake

依存関係のあるソフトウェアもインストールされ成功。次にncursesもyumでインストールしようとしたが、こちらはインストール済みだった。次にいよいよmake。オプションとしてutf-8指定,SSLを有効を付けてcmake

# cmake . -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_SSL=bundled
CMake Deprecation Warning at CMakeLists.txt:25 (CMAKE_POLICY):
  The OLD behavior for policy CMP0022 will be removed from a future version
  of CMake.
・・・・・・・・・
-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:83 (MESSAGE):
  Curses library not found.  Please install appropriate package,
・・・・・・・・・
-- Configuring incomplete, errors occurred!
See also "/****/mysql-5.5.62/CMakeFiles/CMakeOutput.log".
See also "/****/mysql-5.5.62/CMakeFiles/CMakeError.log".

エラーログを見てみると、Curses libraryが見つからないというエラーだった。そこでncurses-develをインストール。

# yum install ncurses-devel

成功した後、再度Cmakeしたら、Cmake Polisy違反の警告はあるものの成功した。(下記)

 # cmake . -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_SSL=bundled
CMake Deprecation Warning at CMakeLists.txt:25 (CMAKE_POLICY):
  The OLD behavior for policy CMP0022 will be removed from a future version
  of CMake. ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ CMake Deprecation Warning at CMakeLists.txt:34 (CMAKE_POLICY):   The OLD behavior for policy CMP0045 will be removed from a future version
  of CMake. ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ -- Running cmake version 3.12.1 -- MySQL 5.5.62
-- Packaging as: mysql-5.5.62-Linux-x86_64
-- Found Curses: /usr/lib64/libcurses.so
-- Looking for tputs in /usr/lib64/libcurses.so
-- Looking for tputs in /usr/lib64/libcurses.so - found
・・・・・・・・・・・・・・・・・・・・・・・・・・・・ -- Configuring done -- Generating done -- Build files have been written to: /usr/local/src/mysql-5.5.62
# make

makeには5分以上かかった。maike installするには、porgというツール経由で行うとインストール内容を追跡記録してくれて、アンインストールを半自動化できるようになるとの事なので、一応インストール。 https://qiita.com/japboy/items/57063e3e0fc021617dd3 を参考に落としたソースでビルドし解凍後 /usr/local/src/ に移動して、インストールしてから、porg経由でインストール。

# ./configure --prefix=/usr/local --disable-grop
・・・・・・・・・・・・・・・・・・・・・・・・・・・
# make && make install
・・・・・・・・・・・・・・・・・・・・・・・・・・・
# porg -lD "make install"

 成功したので、mysqlクライアントでバージョン確認してみると、無事5.5.62がインストールされた事がわかる。その後グループmysqlとユーザーmysqlを作ってディレクトリの所有権変更を行い、DB初期化。

# mysql -V
mysql  Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using  EditLine wrapper
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
Installing MySQL system tables...
・・・・・
Please report any problems at http://bugs.mysql.com/

support-filesにある起動スクリプトで起動するもエラー。装置再起動したら成功した。

# /****/support-files/mysql.server start

バイナリのシンボリックリンクを生成後、ログインしたら、「Segmentation fault」!!

# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.62 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Segmentation fault (コアダンプ)

今度は装置再起動しても全く同じ症状。経験的にこのキーワード(おそらくDBが管理するバイナリファイル関連エラー)が出て解決できた試しが無いので、5.5.62はあきらめて最新のMySQLをyumでインストールすることにした。せっかくなので、OSからクリーンインストールし直した。

2.MySQL 8.0インストール→成功

OSのクリーンインストールなどを行いyumでcommunity-serverをインストール

 # yum -y install community-mysql-server

 あっさり成功したので、daemonを起動してログインすると今度はうまくいった。

# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.13 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

3.MySQLのセットアップ

mysql8.0ではユーザーの生成と権限付与を同時にgrant文で実施できなくなった模様。よって別々に行った。ここではMTによるアクセスユーザーはどこからもアクセス可能にした。
一旦'****'@'localhost'で生成してしまうと、外部ホストからの接続許可する設定追加方法がわからなかったので下記のようにした。rootでログイン後

mysql> CREATE USER '****'@'%' IDENTIFIED BY '****;
Query OK, 0 rows affected (0.06 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

次にwindowsマシンからodbc接続するために、windowsマシン側にodbc設定追加するも、ドライバー接続テストでエラー。パスワード暗号方式が異なるらしい。そこで下記を参照して方式変更。https://www.petitmonte.com/database/mysql_authentication_plugin.html

ログイン後

mysql> SELECT user, host, plugin FROM mysql.user;

で表示してみると、各ユーザー毎にplugin列に暗号方式が表示された。全て
caching_sha2_password 」となっていた。そこで下記のように、MTアクセスユーザーのみは、「mysql_native_password」に変更した。

mysql> ALTER USER ****@'%' IDENTIFIED WITH mysql_native_password BY '****';
Query OK, 0 rows affected (0.05 sec)

下記で再度確認し見ると、MTアクセスユーザーは「mysql_native_password」に変更されていた。

mysql> SELECT user, host, plugin FROM mysql.user;

これでwin10マシンからのODBC接続テストOKとなった。CSEからも接続成功。後で判明したが、odbcドライバのdetailsのCahracter Setにsjisを指定を忘れると、CSE画面で文字化けする。

最後にcommunity-mysql-server.cnfの最後に下記1行を追加して、daemon再起動。

default_authentication_plugin=mysql_native_password