CentOSのMySQLをRemiリポジトリ版からMySQL公式リポジトリ版に入れ換える簡単なお仕事

いや簡単じゃなかったし。

妖狐鯖で使用しているMySQLをRemiリポジトリ版からMySQL公式リポジトリ版に入れ換えを先行して二号機で実施しました。
そのうち初号機でもう1回やる羽目になるので手順をメモっておきます。

入替前後のパッケージ情報は次のとおりです。

入替前:mysql-server-5.5.52-1.el6.remi.x86_64
入替後:mysql-community-server.x86_64 0:5.6.33-2.el6

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

まずはmysqldを停止する。
妖狐鯖ではPostfixとDovecotのアカウント管理にMySQLを使用しているため、ついでにこれらも停止しておく。

その後データベースのコールドバックアップを行う。
まあ、要するに /var/lib/mysql 配下のファイルをコピーするだけ。
また /etc/my.cnf と /etc/my.cnf.d/* も保存しておく

2.MySQL公式リポジトリのインストール

MySQL Repositories から該当するリポジトリをインストールします。
今回はついでに5.6系へアップグレードをするので、http://repo.mysql.com/yum/mysql-5.6-community/el/6/x86_64/mysql-community-release-el6-5.noarch.rpm を使用します。

# wget http://repo.mysql.com/yum/mysql-5.6-community/el/6/x86_64/mysql-community-release-el6-5.noarch.rpm
# yum localinstall mysql-community-release-el6-5.noarch.rpm

インストール後、リポジトリが有効になっているか確認します。

# yum repolist
読み込んだプラグイン:fastestmirror, priorities, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
リポジトリー ID                            リポジトリー名                                                          状態
base                                       CentOS-6 - Base                                                          6,696
*epel                                      Extra Packages for Enterprise Linux 6 -x86_64                          12,219
extras                                     CentOS-6 - Extras                                                           62
mysql56-community                          MySQL 5.6 Community Server                                                 299
updates                                    CentOS-6 - Updates                                                         482
repolist: 19,758

「mysql56-community」が表示されればOKです。表示されていない場合は、

# yum-config-manager --enable mysql56-community

で有効化します。

3.公式レポジトリ版MySQLをインストール

yumを使えばパッケージ入替とか面倒なコトは勝手にやってくれるので、おもむろに

# yum install mysql-server

と叩くだけでOK――

:
=========================================================================================================================
パッケージ                              アーキテクチャ     バージョン               リポジトリー                   容量
=========================================================================================================================
インストールしています:
mysql-community-client                  x86_64             5.6.33-2.el6             mysql56-community              18 M
置き換えています  mysql.x86_64 5.5.52-1.el6.remi
mysql-community-libs                    x86_64             5.6.33-2.el6             mysql56-community             1.9 M
置き換えています  mysql-libs.x86_64 5.5.52-1.el6.remi
mysql-community-libs-compat             x86_64             5.6.33-2.el6             mysql56-community             1.6 M
置き換えています  mysql-libs.x86_64 5.5.52-1.el6.remi
mysql-community-server                  x86_64             5.6.33-2.el6             mysql56-community              54 M
置き換えています  mysql-server.x86_64 5.5.52-1.el6.remi
依存性関連でのインストールをします。:
mysql-community-common                  x86_64             5.6.33-2.el6             mysql56-community             308 k

トランザクションの要約
=========================================================================================================================
インストール         5 パッケージ

総ダウンロード容量: 76 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
(1/5): mysql-community-client-5.6.33-2.el6.x86_64.rpm                                             |  18 MB     00:01
(2/5): mysql-community-common-5.6.33-2.el6.x86_64.rpm                                             | 308 kB     00:00
(3/5): mysql-community-libs-5.6.33-2.el6.x86_64.rpm                                               | 1.9 MB     00:00
(4/5): mysql-community-libs-compat-5.6.33-2.el6.x86_64.rpm                                        | 1.6 MB     00:00
(5/5): mysql-community-server-5.6.33-2.el6.x86_64.rpm                                             |  54 MB     00:04
-------------------------------------------------------------------------------------------------------------------------
合計                                                                                      11 MB/s |  76 MB     00:07
これでいいですか? [y/N]y
rpm_check_debug を実行しています
トランザクションのテストを実行しています

トランザクションの確認エラー
file /usr/lib64/mysql/libmysqlclient.so.16.0.0 from install of mysql-community-libs-compat-5.6.33-2.el6.x86_64 conflicts with file from package compat-mysql51-5.1.54-1.el6.remi.x86_64
file /usr/lib64/mysql/libmysqlclient_r.so.16.0.0 from install of mysql-community-libs-compat-5.6.33-2.el6.x86_64 conflicts with file from package compat-mysql51-5.1.54-1.el6.remi.x86_64

エラーの要約
-------------
#

…怒られた(´・ω・`)

compat-mysql51が依存関係衝突しているみたいなので、コイツを削除すれば……

# yum erase compat-mysql51
:
=========================================================================================================================
パッケージ                              アーキテクチャ     バージョン               リポジトリー                   容量
=========================================================================================================================
削除:
compat-mysql51        x86_64        5.1.54-1.el6.remi             @remi                                           4.2 M
依存性関連での削除をします。:
cronie                x86_64        1.4.4-16.el6_8.2              @updates                                        174 k
cronie-anacron        x86_64        1.4.4-16.el6_8.2              @updates                                         43 k
crontabs              noarch        1.10-33.el6                   @anaconda-CentOS-201410241409.x86_64/6.7        2.4 k
dovecot-mysql         x86_64        1:2.0.9-22.el6                @base                                            18 k
mysql-server          x86_64        5.5.52-1.el6.remi             @remi                                            45 M
perl-DBD-MySQL        x86_64        4.013-3.el6                   @base                                           338 k
postfix               x86_64        2:2.6.6-6.el6_7.1             @updates                                        9.7 M
sysstat               x86_64        9.0.4-31.el6                  @base                                           826 k
yum-cron              noarch        3.2.29-75.el6.centos          @updates                                         28 k

トランザクションの要約
=========================================================================================================================
削除                10 パッケージ

インストール済み容量: 60 M
これでいいですか? [y/N]

…ちょwww
cronie(cronコマンド)巻き添えとかマジかよw
消すのは後始末が面倒だからないな……

解決方法はないものかと探したら、それっぽい情報を発見。

remi リポジトリから入れた MySQL を CentOS リポジトリのものに戻す (ngの日記)

これはremiレポジトリ版からCentOS Base版に戻すパターンですが、同じように依存関係衝突を起こしています。
それを解決するためにyumの対話モードを使用するというものです。

これに倣って、衝突しているmysql-community-libs-compatのインストールとcompat-mysql51の削除を同時に実行します

# yum shell
読み込んだプラグイン:fastestmirror, priorities, security
Yum シェルの設定をしています
> install mysql-community-libs-compat
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
> erase compat-mysql51-5.1.54-1.el6.remi.x86_64
削除処理の設定をしています
> transaction

=========================================================================================================================
パッケージ                            アーキテクチャ   バージョン                     リポジトリー                 容量
=========================================================================================================================
インストールしています:
mysql-community-libs-compat           x86_64           5.6.33-2.el6                   mysql56-community           1.6 M
置き換えています  mysql-libs.x86_64 5.5.52-1.el6.remi
削除:
compat-mysql51                        x86_64           5.1.54-1.el6.remi              @remi                       4.2 M

トランザクションの要約
=========================================================================================================================
インストール         1 パッケージ
削除                 1 パッケージ

> run
--> トランザクションの確認を実行しています。
---> Package compat-mysql51.x86_64 0:5.1.54-1.el6.remi will be 削除
---> Package mysql-community-libs-compat.x86_64 0:5.6.33-2.el6 will be obsoleting
--> 依存性の処理をしています: mysql-community-libs(x86-64) >= 5.6.10 のパッケージ: mysql-community-libs-compat-5.6.33-2.el6.x86_64
---> Package mysql-libs.x86_64 0:5.5.52-1.el6.remi will be 不要
--> トランザクションの確認を実行しています。
---> Package mysql-community-libs.x86_64 0:5.6.33-2.el6 will be obsoleting
--> 依存性の処理をしています: mysql-community-common(x86-64) >= 5.6.10 のパッケージ: mysql-community-libs-5.6.33-2.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package mysql-community-common.x86_64 0:5.6.33-2.el6 will be インストール
--> 依存性解決を終了しました。

=========================================================================================================================
パッケージ                            アーキテクチャ   バージョン                     リポジトリー                 容量
=========================================================================================================================
インストールしています:
mysql-community-libs                  x86_64           5.6.33-2.el6                   mysql56-community           1.9 M
置き換えています  mysql-libs.x86_64 5.5.52-1.el6.remi
mysql-community-libs-compat           x86_64           5.6.33-2.el6                   mysql56-community           1.6 M
置き換えています  mysql-libs.x86_64 5.5.52-1.el6.remi
削除:
compat-mysql51                        x86_64           5.1.54-1.el6.remi              @remi                       4.2 M
依存性関連でのインストールをします。:
mysql-community-common                x86_64           5.6.33-2.el6                   mysql56-community           308 k

トランザクションの要約
=========================================================================================================================
インストール         3 パッケージ
削除                 1 パッケージ

合計容量: 3.8 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています  : mysql-community-common-5.6.33-2.el6.x86_64 [########################################## ] 1/5
インストールしています  : mysql-community-libs-5.6.33-2.el6.x86_64 [############################################ ] 2/5
インストールしています  : mysql-community-libs-compat-5.6.33-2.el6.x [########################################## ] 3/5
削除中                  : compat-mysql51-5.1.54-1.el6.remi.x86_64                                                  4/5
削除中                  : mysql-libs-5.5.52-1.el6.remi.x86_64                                                      5/5
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
Verifying               : mysql-community-common-5.6.33-2.el6.x86_64                                               1/5
Verifying               : mysql-community-libs-5.6.33-2.el6.x86_64                                                 2/5
Verifying               : mysql-community-libs-compat-5.6.33-2.el6.x86_64                                          3/5
Verifying               : compat-mysql51-5.1.54-1.el6.remi.x86_64                                                  4/5
Verifying               : mysql-libs-5.5.52-1.el6.remi.x86_64                                                      5/5

削除しました:
compat-mysql51.x86_64 0:5.1.54-1.el6.remi

インストール:
mysql-community-libs.x86_64 0:5.6.33-2.el6              mysql-community-libs-compat.x86_64 0:5.6.33-2.el6

依存性関連をインストールしました:
mysql-community-common.x86_64 0:5.6.33-2.el6

置換:
mysql-libs.x86_64 0:5.5.52-1.el6.remi

Finished Transaction
> exit
Leaving Shell
#

キタ━━━ヽ( ゚∀゚)人(゚∀゚ )メ( ゚∀゚)人(゚∀゚ )メ( ゚∀゚)人(゚∀゚ )ノ━━━!!!!

この前に一度 mysql と mysql-server を削除していたため、この後しれっと入れ直して完了。

4.アップグレード後の一手間

あとはCentOSのMySQLを5.5から5.6にアップデートする (karakaram-blog) を参考にざっくりと。

おもむろに mysqld を起動し、バージョンを確認。

# mysql --version
mysql  Ver 14.14 Distrib 5.6.33, for Linux (x86_64) using  EditLine wrapper

エラーログを見ると、幾つか警告が出ています。

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

必須になった explicit_defaults_for_timestamp オプションを /etc/my.cnf の [mysqld] セクションに追加します。

また、エラーメッセージに「Please use mysql_upgrade to fix this error.」としつこく書かれているので、 mysql_upgrade を実行。

# mysql_upgrade -u root -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Running 'mysql_fix_privilege_tables'...
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
:
:
OK
#

警告メッセージは「コマンドラインにパスワード入れるのは危険だよ」というものです。

一通り終われば mysqld を再起動しておしまいです。