在 ubuntu 12.04 LTS 中將 php 5.3.6 升級到 5.5 需要刪除 mysql?
我正在嘗試將 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 設置已重命名,一些預設設置已更改。