MySQLで全文検索機能を実装しようとした場合、MySQL5.6以上から日本語の全文検索に対応しています。
しかしながら、MySQL5.6ではngram等のパーサに非対応で、FULLTEXTインデックスの利便性が悪いです。
検索精度を向上させるためには、FULLTEXTインデックスを付与したカラムに自前で工夫したキーワードを登録する必要があります。
キーワード生成の自前作成をアプリ側でやろうとするとパフォーマンスも悪く、煩雑なデータ登録ロジックになるため、ngramのパーサに対応しているMySQL5.7へバージョンアップすることにしました。
今後さらにバージョンアップを行う場合、同じ手順で実行可能とは限りませんが、ほとんど同じ手順でできるのではないかと思料しております。
※ なお、postfixでメール送信しているサーバー上で作業される際は、postfixの設定ファイルを念のため退避しておくことをお奨め致します。MySQLの削除に伴い、postfixも削除されます。
※また、cronも削除されるため、バッチ処理のスケジューリングを行っている場合も注意が必要です。
1. CentOSのバージョン確認
まずはMySQL5.7を導入するにあたり、CentOSのバージョンが6系統か7系統か確認致します。
$ cat /etc/centos-release
CentOS release 6.10 (Final)
2. yumのユーティリティツールをインストール
それからyumのユーティリティツールをインストールしておきます。後でインストールするMySQLのバージョンを5.7にするために5.6を無効化したりするのに利用します。
$ sudo yum -y install yum-utils
3. MySQLのサービス停止
現在稼働しているMySQLのサービスを停止します。サービスを停止する前に各種データベースのエクスポートを行い、データのバックアップを行っておくことを推奨いたします。
$ sudo service mysqld stop Stopping mysqld: [ OK ]
(CentOS7ではsystemctl stop mysqldでサービスを停止します。)
4. 既存のMySQLの確認
現在インストールされているMySQLのライブラリ群を確認します。これらを削除するため念のため何がインストールされていたのかメモしておきます。
$ sudo yum list installed | grep mysql
Failed to set locale, defaulting to C
compat-mysql51.x86_64 5.1.73-1.el6.remi、 @remi
mysql-community-client.x86_64 5.6.44-2.el6 @mysql56-community
mysql-community-common.x86_64 5.6.44-2.el6 @mysql56-community
mysql-community-devel.x86_64 5.6.44-2.el6 @mysql56-community
mysql-community-libs.x86_64 5.6.44-2.el6 @mysql56-community
mysql-community-release.noarch el6-5 @/mysql-community-release-el6-5.noarch
mysql-community-server.x86_64 5.6.44-2.el6 @mysql56-community
php-mysqlnd.x86_64 5.6.40-11.el6.remi @remi-php56
5. 既存のMySQLの削除
現在インストールされているMySQLのライブラリ群を削除します。MySQLのライブラリ群を削除する前に、念のため設定ファイルを退避しておくことを推奨いたします。(新しいバージョンのMySQLをインストールする際に自動でリネームされて保持されますが、念のため。対象のファイルは/etc/my.confおよび/etc/my.conf.d直下の設定ファイル)
なお、postfixも削除されるため、postfixでメール送信しているサーバー上で作業される場合は注意が必要です。MySQLと同じく念のため各種設定ファイルの複製をホームディレクトリ等に退避しておきましょう。(/etc/postfix/main.cf, /etc/postfix/master.cf, /etc/postfix/virtual)また、mysqldの停止と同様にpostfixのサービスも停止しておきましょう。
また、cronも削除されます。crontabのスケジューリング設定は残りますが、念のため退避しておきましょう。依存関係を確認しながら削除される場合は-yを指定せずに実行しましょう。
$ sudo yum -y remove mysql*
念のためmysqlに依存して削除されたライブラリを確認しておきましょう。「yum history list」で履歴番号を確認して、「yum history info 履歴番号」で詳細を確認することができます。
$ sudo yum history list | grep Erase
17 **** *****
10 **** *****
.
.
.
$ sudo yum history info 17
6. 新しいバージョンのMySQL RPMパッケージをyumへインストール
MySQLの公式サイトからCentOSのバージョンに合ったRPMパッケージをダウンロードし、yumへインストールします。
$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
7. yumで利用するMySQLのバージョンを5.7に変更
yumのユーティリティツールを利用してMySQL5.6を無効にします。
$ sudo yum-config-manager --disable mysql56-community
yumのユーティリティツールを利用してMySQL5.7を有効にします。
$ sudo yum-config-manager --enable mysql57-community-dmr
8. MySQL5.7をインストール
yumのインストールコマンドを利用してMySQL5.7をインストールします。
※ postfix、cronも削除されているため、必要な方は以下のコマンドの最後に半角スペースをあけてpostfix crontabsを足してください。mysqlとpostfix、cronがインストールされます。
$ sudo yum -y install mysql mysql-devel mysql-server mysql-utilities
退避した設定ファイルから必要な記述を移し替えます。バージョンが上がっているため、設定ファイルの書き方が変わっている可能性があります。MySQLの公式サイトで各バージョンの設定ファイルを事前に確認して先に用意しておくと楽です。postfixの設定ファイルについても同様に退避した設定ファイルから必要な記述を移し替えます。virtualの設定を行っている場合はpostmap /etc/postfix/virtualなども行っておきます。
9. MySQLのサービス起動
MySQLのサービスを起動します。
$ sudo service mysqld start
Starting mysqld: [ OK ]
(CentOS7ではsystemctl start mysqldを使います。)
10. MySQL5.6のデータベースをMySQL5.7へアップグレード
MySQLのアップグレードコマンドを利用してアップグレードを行います。これによりMySQL5.6で稼働していたデータベース、テーブル、テーブルデータがMySQL5.7で利用可能になります。
$ sudo mysql_upgrade -u root -p
Enter password:
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
***.******** OK
***.******** OK
***.******** OK
***.******** OK
.
.
.
.
Upgrade process completed successfully.
Checking if update is needed.
データベースへアクセス可能かどうか、データは参照できるか等のチェックを行って終了です。また、必要に応じてpostfix、crondのサービスを起動します。
仮にデータ破損等生じた場合は該当テーブルの再作成と事前に作成したバックアップからデータの再投入を行います。
以上