Ubuntu 12.04 LTS で PHP 5.3.6 を 5.5 にアップグレードするには、MySQL を削除する必要がありますか?

Ubuntu 12.04 LTS で PHP 5.3.6 を 5.5 にアップグレードするには、MySQL を削除する必要がありますか?

私は PHP を最新バージョン (5.5) にアップグレードしようとしています。現在の PHP バージョンは Ubuntu 12.04 LTS にバンドルされている 5.3.6 です。問題は、PHP 以外のものをアップグレードしたくないのですが、アップグレードしようとしているパッケージを apt-get に明示的に指示しても、mysql 5.1 を削除して mysql 5.5 をインストールするように要求されることです。以下は私が使用しているコマンドです:

sudo apt-get --only-upgrade install php5-common

私も試してみました

sudo apt-get upgrade php5-common

そして私が受け取った応答は次の通りです:

The following extra packages will be installed:
  libalgorithm-diff-xs-perl libapache2-mod-php5 libdbd-mysql-perl libdbi-perl liblocale-gettext-perl libmysqlclient18 libsub-name-perl libterm-readkey-perl libtext-charwidth-perl libtext-iconv-perl mysql-client-5.5
  mysql-client-core-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 perl perl-base perl-modules php5-cli php5-curl php5-gd php5-mysql php5-pgsql
Suggested packages:
  tinyca mailx perl-doc libterm-readline-gnu-perl libterm-readline-perl-perl php5-suhosin
The following packages will be REMOVED:
  mysql-client-5.1 mysql-client-core-5.1 mysql-server-5.1 mysql-server-core-5.1
The following NEW packages will be installed:
  libmysqlclient18 libterm-readkey-perl mysql-client-5.5 mysql-client-core-5.5 mysql-server-5.5 mysql-server-core-5.5
The following packages will be upgraded:
  libalgorithm-diff-xs-perl libapache2-mod-php5 libdbd-mysql-perl libdbi-perl liblocale-gettext-perl libsub-name-perl libtext-charwidth-perl libtext-iconv-perl mysql-common mysql-server perl perl-base perl-modules php5-cli php5-common
  php5-curl php5-gd php5-mysql php5-pgsql

なぜこのようなことが起きるのでしょうか? PHP は MySQL に依存していますが、これはまったくおかしなことです。もし「はい」と答えたら、apt-get は削除時に現在の MySQL データを削除しますか? これは実行中のインスタンスなので、データを失うリスクはありません (バックアップを取ることはできますが、これはサイトを何時間もメンテナンスすることを意味します。これは好ましくありません)

答え1

問題は、php5-mysql パッケージが libmysqlclient18 に依存し、libmysqlclient18 が mysql-common に依存していることです。

# apt-cache depends php5-mysql
php5-mysql
  Depends: libc6
  Depends: libmysqlclient18
....

# apt-cache depends libmysqlclient18
libmysqlclient18
  Depends: mysql-common
  Depends: libc6
  Depends: zlib1g
  PreDepends: multiarch-support
    multiarch-support:i386
  Replaces: libmysqlclient18:i386
  Breaks: libmysqlclient18:i386

MySQL 5.1 は 10.04 のデフォルトでしたが、12.04 のデフォルトの MySQL バージョンは 5.5 です。そのため、これらすべてのパッケージは間接的にそれに依存しています。

MySQL をアップグレードしたくない場合は、MySQL 5.1 にリンクされている PHP パッケージ (10.04 用にビルドされたパッケージ) を見つけるか、10.04 VM を起動して独自のパッケージ (公式のパッケージを再構築) を構築する必要があります。

一方、MySQL のアップグレードではデータが削除されません。削除されるのは「purge」のみです。

ただし、念のため、次のことを行ってください。

# /etc/init.d/mysql stop
# mv /var/lib/mysql /var/lib/mysql_orig

その後、アップグレードを実行します。これにより、新しい mysql サーバーがインストールされ、空のデータベースを持つ新しい /var/lib/mysql が作成されます。/var/lib/mysql_orig はどの mysql-* パッケージ定義にもまったく記載されていないため、データには影響しません。アップグレード後、次の操作を実行します。

# mv /var/lib/mysql /var/lib/mysql_new_55
# mv /var/lib/mysql_orig /var/lib/mysql
# chown mysql: /var/lib/mysql
# chmod 0700 /var/lib/mysql
# /etc/init.d/mysql start

十分なディスク容量と時間がある場合は、アップグレードで問題が発生した場合に備えて、mv を cp -ar に置き換えて、MySQL データのコピーを作成してください。バックアップは常に良い選択です。

この後、mysql_upgrade スクリプトを実行して、mysql.* テーブルを 5.5 形式にアップグレードする必要もあります。

また、設定内のすべての違いを確認してください。一部の my.cnf 設定の名前が変更され、一部のデフォルトが変更されています。

答え2

PHP だけでなく、次のモジュールも使用します。php5-mysqlこれには PHP Common 5.5 が必要で、サーバーを強制的に更新します。php5-mysql の代わりに php5-mysqlnd をインストールしてみてください。

関連情報