обновление php 5.3.6 до 5.5 в Ubuntu 12.04 LTS требует удаления mysql?

обновление php 5.3.6 до 5.5 в Ubuntu 12.04 LTS требует удаления 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, тогда как версия MySQL по умолчанию в 12.04 — 5.5, поэтому все эти пакеты косвенно зависят от нее.

Если вы действительно не хотите обновлять MySQL, вам следует найти пакеты PHP, которые связаны с MySQL 5.1 — пакеты, созданные для 10.04 — или вам следует развернуть виртуальную машину 10.04 и собрать свою собственную (пересобрав официальные).

С другой стороны, обновление 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-mysqlnd вместо php5-mysql.

Связанный контент