
PHP를 최신 버전(5.5)으로 업그레이드하려고 합니다. 현재 PHP 버전은 ubuntu 12.04 LTS와 함께 번들로 제공되는 5.3.6입니다. 문제는 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 패키지가 mysql-common에 의존하는 libmysqlclient18에 의존한다는 것입니다.
# 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을 가동하고 공식 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-mysql 대신 php5-mysqlnd를 설치해보세요.