
Ich versuche, PHP auf die neueste Version (5.5) zu aktualisieren. Meine aktuelle PHP-Version ist 5.3.6, gebündelt mit Ubuntu 12.04 LTS. Das Problem ist, dass ich nichts anderes aktualisieren möchte, nur PHP. Obwohl ich apt-get ausdrücklich sage, welches Paket ich aktualisieren möchte, bestehe ich darauf, MySQL 5.1 zu entfernen und MySQL 5.5 zu installieren. Hier ist der Befehl, den ich verwende:
sudo apt-get --only-upgrade install php5-common
Ich habe auch versucht
sudo apt-get upgrade php5-common
und die Antwort, die ich bekomme, ist diese:
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
warum passiert das? ist PHP von MySQL abhängig, was völlig verrückt wäre. Was, wenn ich ja sage, würde apt-get dann meine aktuellen MySQL-Daten löschen, während es sie entfernt? da dies eine laufende Instanz ist, kann ich nicht riskieren, Daten zu verlieren (ich würde vielleicht ein Backup machen, aber das bedeutet, dass die Site stundenlang gewartet werden muss, was mir nicht gefällt)
Antwort1
Das Problem besteht darin, dass das php5-mysql-Paket von libmysqlclient18 abhängt, was wiederum von mysql-common abhängt:
# 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 war Standard in 10.04, während die Standard-MySQL-Version in 12.04 5.5 ist, weshalb alle diese Pakete indirekt davon abhängig sind.
Wenn Sie MySQL wirklich nicht aktualisieren möchten, sollten Sie PHP-Pakete finden, die mit MySQL 5.1 verknüpft sind – Pakete, die für 10.04 erstellt wurden – oder Sie sollten eine 10.04-VM starten und Ihre eigene erstellen (indem Sie die offiziellen neu erstellen).
Andererseits sollte ein MySQL-Upgrade Ihre Daten nicht löschen. Dies kann nur durch „purge“ erreicht werden.
Um auf Nummer sicher zu gehen, können Sie Folgendes tun:
# /etc/init.d/mysql stop
# mv /var/lib/mysql /var/lib/mysql_orig
und führen Sie dann das Upgrade durch. Dadurch wird ein neuer MySQL-Server installiert und ein neues /var/lib/mysql mit einer leeren Datenbank erstellt. Ihre Daten werden dadurch nicht berührt, da /var/lib/mysql_orig in keiner MySQL-*-Paketdefinition erwähnt wird. Führen Sie nach dem Upgrade Folgendes aus:
# 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
Wenn Sie genügend Speicherplatz und Zeit haben, ersetzen Sie mv durch cp -ar, damit Sie eine Kopie Ihrer MySQL-Daten haben, falls beim Upgrade etwas schief geht. Eine Datensicherung ist immer eine gute Wahl.
Danach müssen Sie auch das Skript mysql_upgrade ausführen, um mysql.*-Tabellen auf das Format 5.5 zu aktualisieren.
Überprüfen Sie außerdem alle Unterschiede in der Konfiguration – einige der my.cnf-Einstellungen wurden umbenannt und einige der Standardeinstellungen haben sich geändert.
Antwort2
Neben reinem PHP verwenden Sie auch das folgende Modul:php5-mysql. Dafür ist PHP Common 5.5 erforderlich, wodurch der Server zu einer Aktualisierung gezwungen wird. Versuchen Sie, php5-mysqlnd statt php5-mysql zu installieren.