在 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 版本是 5.3.6,与 ubuntu 12.04 LTS 捆绑在一起。问题是我不想升级任何其他东西,只升级 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,而后者又依赖于 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 升级不应该删除您的数据。只有“清除”才会删除数据。

但是,为了安全起见,您可以这样做:

# /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

如果您有足够的磁盘空间和时间,请用 cp -ar 替换 mv,这样您就有一份 MySQL 数据的副本,以防升级出现问题。备份始终是一个不错的选择。

在此之后,您还需要运行 mysql_upgrade 脚本将 mysql.* 表升级到 5.5 格式。

另外,检查配置中的所有差异 - 一些 my.cnf 设置已重命名,并且一些默认值已更改。

答案2

除了 PHP 之外,您还将使用以下模块:php5-mysql。这需要 php common 5.5,这会强制服务器更新。尝试安装 php5-mysqlnd 而不是 php5-mysql。

相关内容