remi リポジトリから入れた MySQL を CentOS リポジトリのものに戻す

諸事情で remi リポジトリから入れていた MySQL 5.5 を CentOS リポジトリの 5.1 に戻しました。

remi から MySQL をインストールする手順は下記の 方法2 標準リポジトリの優先度を remi より高く で行なっている前提です。

試行錯誤の跡

まずは yum リポジトリの設定を変更します。 phpmysql だけ CentOS の標準レポから除外していたので、php だけ除外するように修正します。

/etc/yum.repos.d/CentOS-Base.repo

- exclude=php* mysql*
+ exclude=php*

そしておもむろにダウングレード。

# yum downgrade mysql-libs mysql mysql-server

そんな簡単にいくわけがないですね。

Error: Package: php-mysql-5.4.13-1.el6.remi.x86_64 (@remi)
           Requires: libmysqlclient.so.18(libmysqlclient_16)(64bit)
           Removing: mysql-libs-5.5.30-1.el6.remi.x86_64 (@remi)
               libmysqlclient.so.18(libmysqlclient_16)(64bit)
           Downgraded By: mysql-libs-5.1.67-1.el6_3.x86_64 (updates)
               Not found
Error: Package: php-mysql-5.4.13-1.el6.remi.x86_64 (@remi)
           Requires: libmysqlclient.so.18()(64bit)
           Removing: mysql-libs-5.5.30-1.el6.remi.x86_64 (@remi)
               libmysqlclient.so.18()(64bit)
           Downgraded By: mysql-libs-5.1.67-1.el6_3.x86_64 (updates)
               Not found
Error: Package: php-mysql-5.4.13-1.el6.remi.x86_64 (@remi)
           Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)
           Removing: mysql-libs-5.5.30-1.el6.remi.x86_64 (@remi)
               libmysqlclient.so.18(libmysqlclient_18)(64bit)
           Downgraded By: mysql-libs-5.1.67-1.el6_3.x86_64 (updates)
               Not found

どうやら php-mysql-5.4.13-1libmysqlclient.so.18 を必要としており、libmysqlclient.so.18mysql-libs-5.5.30-1 含まれているため mysql-libs-5.5.30-1 を削除出来なかったようです。

ひとまず php-mysql は後でどうにかすることにして削除します。

# yum erase php-mysql

そしておもむろに再試行。

# yum downgrade mysql-libs mysql mysql-server

やっぱりダメでした。。。

Transaction Check Error:
  file /usr/lib64/mysql/libmysqlclient.so.16.0.0 from install of mysql-libs-5.1.67-1.el6_3.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-libs-5.1.67-1.el6_3.x86_64 conflicts with file from package compat-mysql51-5.1.54-1.el6.remi.x86_64

今度は libmysqlclient.so.16mysql-libs-5.1.67-1compat-mysql51-5.1.54-1 で競合していることが原因です。

compat-mysql51-5.1.54-1 は名前の通り MySQL 5.1 の互換性用のパッケージです。 MySQL 5.5 をインストールしていたから必要だったのであり、MySQL 5.1 にダウングレードしようとしている今となっては不要なものです。

というわけで削除します。

# yum erase compat-mysql51

「cron とか postfix を削除するけどいいか?」的なプロンプトが表示されました。

compat-mysql51 を削除 → mysql-libs のダウングレード」の順番だと一時的に libmysqlclient.so.16 が無くなってしまうので、 それに依存しているパッケージは消えてしまいますねー。なのでその2つを一緒に行います。

まずは yum shell で yum をシェルモードで起動します。

# yum shell

yum のシェルモードというのは yum をインタラクティブな感じにするモードで、複数の処理を一括で実行したり出来ます。 今回のような複数の処理(erase と downgrade)を同時にやりたいときに便利です多分。

> downgrade mysql-libs mysql mysql-server
> erase compat-mysql51
> transaction
> run
> exit

仕上げ

ダウングレード成功しました! 最後に、削除した php-mysql をインストールしなおして完了です。

# yum install php-mysql

あっ(汗)

Error: Package: php-mysql-5.4.13-1.el6.remi.x86_64 (remi)
           Requires: libmysqlclient.so.18(libmysqlclient_16)(64bit)
Error: Package: php-mysql-5.4.13-1.el6.remi.x86_64 (remi)
           Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)
Error: Package: php-mysql-5.4.13-1.el6.remi.x86_64 (remi)
           Requires: libmysqlclient.so.18()(64bit)

大丈夫、予想通りです。何事もなかったかのように MySQL Native Driver を入れればおっけーです。

# yum install php-mysqlnd

まとめ

yum shell 超便利。