
Estou tentando atualizar o php para a versão mais recente (5.5). Minha versão atual do php é 5.3.6 fornecida com o Ubuntu 12.04 LTS. O problema é que não quero atualizar mais nada, apenas o php, mas embora eu diga especificamente ao apt-get o pacote que estou tentando atualizar, insisto em remover o mysql 5.1 e instalar o mysql 5.5, aqui está o comando que estou usando:
sudo apt-get --only-upgrade install php5-common
Eu também tentei
sudo apt-get upgrade php5-common
e a resposta que recebo é esta:
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
Por que isso está acontecendo? é php dependente do mysql, o que seria completamente insano. E se eu disser sim, o apt-get excluiria meus dados mysql atuais ao removê-los? como esta é uma instância em execução, não posso arriscar perder nenhum dado (posso fazer um backup, mas isso significa colocar o site em manutenção por horas, o que não prefiro)
Responder1
O problema é que o pacote php5-mysql depende do libmysqlclient18, que depende do 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
O MySQL 5.1 era o padrão em 10.04, enquanto a versão padrão do MySQL em 12.04 é 5.5, é por isso que todos esses pacotes dependem dele indiretamente.
Se você realmente não deseja atualizar o MySQL, você deve encontrar pacotes php vinculados ao MySQL 5.1 - pacotes criados para 10.04 - ou você deve ativar a VM 10.04 e construir os seus próprios (reconstruindo os oficiais).
Por outro lado, a atualização do MySQL não deve excluir seus dados. Somente 'expurgar' fará isso.
Mas, só para garantir, o que você pode fazer é:
# /etc/init.d/mysql stop
# mv /var/lib/mysql /var/lib/mysql_orig
e então faça a atualização. Isto irá instalar o novo servidor mysql e criar um novo /var/lib/mysql com banco de dados vazio. Ele não afetará seus dados porque /var/lib/mysql_orig não é mencionado em nenhuma definição de pacote mysql-*. Após a atualização, faça:
# 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
Se você tiver espaço e tempo em disco suficientes, substitua mv por cp -ar, para que você tenha uma cópia dos seus dados MySQL caso algo dê errado com a atualização. Fazer backup é sempre uma boa escolha.
Depois disso, você também precisará executar o script mysql_upgrade para atualizar as tabelas mysql.* para o formato 5.5.
Além disso, verifique todas as diferenças na configuração - algumas das configurações do my.cnf foram renomeadas e alguns dos padrões foram alterados.
Responder2
Além de apenas PHP você também usará o seguinte módulo:php5-mysql. O que requer php common 5.5, o que força a atualização do servidor. Tente instalar o php5-mysqlnd em vez do php5-mysql.