Я пытаюсь обновить 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 при их удалении? поскольку это работающий экземпляр, я не могу рисковать потерять какие-либо данные (я могу сделать резервную копию, но это означает, что сайт будет обслуживаться на несколько часов, что я не предпочитаю)
Проблема в том, что пакет 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 не должно удалять ваши данные. Только «чистка» сделает это.
Но, на всякий случай, вы можете:
# /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 были переименованы, а некоторые значения по умолчанию изменены.
Помимо PHP вы также будете использовать следующий модуль: php5-mysql. Для этого требуется общий php 5.5, который заставляет сервер обновляться. Попробуйте установить php5-mysqlnd вместо php5-mysql.