MySQLの公式yumリポジトリでのメジャーバージョン更新方法

この記事は、2015年「MySQLマニュアルを読む」アドベントカレンダーの13日目です.


 毎日この「MySQLマニュアルを読む」の日記を書きながらも、そういえば手元にMySQL5.7環境がほとんどない*1ことに気づいたので、色々な所からアクセスできるLinux上(レンサバ上)にも入れておきたいな、と思いました。
 実験用に用意してあるCentOS上に、MySQL の公式リポジトリから入れたMySQL 5.6 が入っているものがあったので、それを 5.7 にアップグレードすることにしました。


 まず、MySQLの公式yumリポジトリについて知らない人は、ここを見ると良いです。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.5.1 MySQL Yum リポジトリを使用して MySQL を Linux にインストールする
MySQL :: MySQL 5.7 Reference Manual :: 2.5.1 Installing MySQL on Linux Using the MySQL Yum Repository

 私も1年半ほど前に日記にかきました。
MySQLをCentOSにyumリポジトリからインストールする - sakaikの日々雑感~(T)編


 この方法で入れたMySQL 5.6 は、yum update では 5.6内のマイナーバージョンしか上げてくれません。勝手に 5.7にはならないのです。
(なられても困るけど)

メジャーバージョンを変更(5.6→5.7など)する方法については、上記マニュアルのページ内に説明があります。
http://dev.mysql.com/doc/refman/5.6/ja/linux-installation-yum-repo.html#yum-repo-select-series
http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html#yum-repo-select-series
MySQL5.6日本語マニュアルより引用:

デフォルトでは、MySQL Yum リポジトリは、インストール中に選択したリリースシリーズ内の最新バージョンに MySQL を更新します (詳細はSelecting a Release Seriesを参照してください)。つまり、たとえば 5.6.x インストールは 5.7.x リリースに自動的には更新されません。別のリリースシリーズに更新するには、(デフォルトで、または自分で) 選択したシリーズのサブリポジトリを無効にし、ターゲットシリーズのサブリポジトリを有効にする必要があります。それをするには、 Selecting a Release Seriesで説明されている、/etc/yum.repos.d/mysql-community.repo ファイル内のサブリポジトリのエントリを編集するための手順に従います。

原則として、あるリリースシリーズから別のものにアップグレードするには、シリーズをスキップせずに次のシリーズに移動します。たとえば、現在 MySQL 5.5 を稼働していて、5.7 にアップグレードする場合は、MySQL 5.7 にアップグレードする前にまず 5.6 にアップグレードします。

 今日の日記は、ここからはマニュアルの話題ではなく、実際に私が試した内容について書きたいと思います。


 まず、今のmysqlに関するリポジトリ設定を確認:

# yum repolist all | grep mysql
mysql-connectors-community        MySQL Connectors Community      enabled:    17
mysql-connectors-community-source MySQL Connectors Community - So disabled
mysql-tools-community             MySQL Tools Community           enabled:    31
mysql-tools-community-source      MySQL Tools Community - Source  disabled
mysql55-community                 MySQL 5.5 Community Server      disabled
mysql55-community-source          MySQL 5.5 Community Server - So disabled
mysql56-community                 MySQL 5.6 Community Server      enabled:   214
mysql56-community-source          MySQL 5.6 Community Server - So disabled
mysql57-community-dmr             MySQL 5.7 Community Server Deve disabled
mysql57-community-dmr-source      MySQL 5.7 Community Server Deve disabled

 5.6に関するものが enabledに、5.7に関するものが disabled になっていることがわかりました。
5.6のときに rpm を取ってきて設定したものなので、5.7のものには -dmr (Development Milestone Release) がついています。
新しいリポジトリ設定ファイルを取ってくるべきかどうか悩んだのですが、このまま進めることにしました。
結論から言うと、特に問題なかったように見えるので、 -dmr付きのものは -dmrなしの57と同じ所に向くようになっているのかもしれません(yum.repos.d下のファイルの記述方法をよく知らないので、単なるラベルだけの話なのかもしれませんが)。


 次に、56のリポジトリを無効にして、57のほうを有効にします:

# yum-config-manager  --disable mysql56-community
# yum-config-manager  --enable mysql57-community-dmr

 それぞれ、設定内容(変更後の内容)が画面に表示されます。
 念のため、変更結果を確認してみます。

# yum repolist all | grep mysql
mysql-connectors-community        MySQL Connectors Community      enabled:    17
mysql-connectors-community-source MySQL Connectors Community - So disabled
mysql-tools-community             MySQL Tools Community           enabled:    31
mysql-tools-community-source      MySQL Tools Community - Source  disabled
mysql55-community                 MySQL 5.5 Community Server      disabled
mysql55-community-source          MySQL 5.5 Community Server - So disabled
mysql56-community                 MySQL 5.6 Community Server      disabled
mysql56-community-source          MySQL 5.6 Community Server - So disabled
mysql57-community-dmr             MySQL 5.7 Community Server Deve enabled:    34
mysql57-community-dmr-source      MySQL 5.7 Community Server Deve disabled

 5.7 が enable になりました。(sourceは、このマシンでは取得していないので、disabled のままにしています)


 あとは update するだけ:

# yum update
(略)

=============================================================================================================================================
 Package                                  Arch                    Version                       Repository                              Size
=============================================================================================================================================
Updating:
 mysql-community-client                   x86_64                  5.7.10-1.el6                  mysql57-community-dmr                   23 M
 mysql-community-common                   x86_64                  5.7.10-1.el6                  mysql57-community-dmr                  324 k
 mysql-community-libs                     x86_64                  5.7.10-1.el6                  mysql57-community-dmr                  2.1 M
 mysql-community-release                  noarch                  el6-7                         mysql57-community-dmr                  8.6 k
 mysql-community-server                   x86_64                  5.7.10-1.el6                  mysql57-community-dmr                  134 M

Transaction Summary
=============================================================================================================================================
Upgrade       5 Package(s)
(略)

 今回、事前に他のソフトを含めて全部 yum update 済だったので、ここでは yum update とだけ指定してアップデートしましたが、mysqlだけをアップデートしたいときには、パッケージ名を指定して実行する必要があります。


 起動してみる:

$ mysql -uroot -p
(略)
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.10, for Linux (x86_64) using  EditLine wrapper

Connection id:          3
Current database:       
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.10 MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 2 min 44 sec

Threads: 1  Questions: 7  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.042
--------------

mysql> 

 無事、5.7になりました。

このあと、システムテーブル更新のスクリプトを走らせなきゃいけないのかもしれない。(Passwordカラムが存在しているので)
とりあえず動いているので(実験サーバだし)、本気で使う方はちゃんとマニュアル読んで、調べて下さい。

mysql> desc user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
(略)

*1:仮想環境のWindows上にひとつあるだけ