
我正在嘗試將 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,而 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 。它不會觸及您的數據,因為在任何 mysql-* 套件定義中根本沒有提到 /var/lib/mysql_orig 。升級後,執行以下操作:
# 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。