Ubuntu-12.04

在 ubuntu 12.04 LTS 中將 php 5.3.6 升級到 5.5 需要刪除 mysql?

  • November 24, 2014

我正在嘗試將 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,你應該找到與 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。它不會觸及您的數據,因為 /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 設置已重命名,一些預設設置已更改。

引用自:https://serverfault.com/questions/646621