Я запускаю сервер Debian 6 и использую его для размещения десятка веб-сайтов на основе LAMP. Я настроил его на отправку электронной почты мне всякий раз, когда становится доступно обновление программного обеспечения, и сегодня утром я получил уведомление о 6 новых доступных обновлениях, связанных с mySql:
mysql-сервер, mysql-client, mysql-common
и несколько других зависимостей. Я пытался запустить
apt-get update apt-get update
и все шло нормально, пока процесс обновления не встретил mysql-client. Я получаю следующую ошибку:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages will be upgraded:
mysql-client-5.5
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,772 kB of archives.
After this operation, 7,049 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Reading changelogs... Done
(Reading database ... 84121 files and directories currently installed.)
Preparing to replace mysql-client-5.5 5.5.38-1~dotdeb.0 (using .../mysql-client-5.5_5.5.46-0+deb6u1_amd64.deb) ...
Unpacking replacement mysql-client-5.5 ...
dpkg: error processing /var/cache/apt/archives/mysql-client-5.5_5.5.46-0+deb6u1_amd64.deb (--unpack):
trying to overwrite '/usr/share/man/man1/mysql.1.gz', which is also in package mysql-client-core-5.5 5.5.38-1~dotdeb.0
configured to not write apport reports
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Processing triggers for man-db ...
Errors were encountered while processing:
/var/cache/apt/archives/mysql-client-5.5_5.5.46-0+deb6u1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
У меня недостаточно опыта, чтобы полностью понять, что произошло. Я попытался запустить apt-get -f install, как было предложено в сообщении, но ничего не произошло. Я также попытался удалить mysql-client (идея была в том, «Я удаляю этот, а затем переустанавливаю его с нуля»), но эта операция не удалась с той же ошибкой. Я попытался очистить mysql, но система также не смогла выполнить эту операцию.
На данный момент я перезапустил службу, и теперь все вроде работает, но проблема с этим неудачным обновлением сохраняется.
Вот список всех пакетов, связанных с mysql, которые я установил на свой сервер:
~# dpkg -l | grep -i mysql
ii libdbd-mysql-perl 4.016-1 Perl5 database interface to the MySQL database
ii libmysqlclient16 5.1.73-1+deb6u1 MySQL database client library
ii mysql-client 5.5.46-0+deb6u1 MySQL database client (metapackage depending on the latest version)
ii mysql-client-5.5 5.5.38-1~dotdeb.0 MySQL database client binaries
ii mysql-client-core-5.5 5.5.38-1~dotdeb.0 MySQL database core client binaries
ii mysql-common 5.5.38-1~dotdeb.0 MySQL database common files, e.g. /etc/mysql/my.cnf
ii mysql-common-5.5 5.5.46-0+deb6u1 MySQL database common files, e.g. /etc/mysql/my.cnf
ii mysql-server 5.5.46-0+deb6u1 MySQL database server (metapackage depending on the latest version)
rc mysql-server-5.1 5.1.73-1+deb6u1 MySQL database server binaries and system database setup
iU mysql-server-5.5 5.5.46-0+deb6u1 MySQL database server binaries and system database setup
ii mysql-server-core-5.5 5.5.46-0+deb6u1 MySQL database server binaries
ii php5-mysql 5.4.45-1~dotdeb+6.1 MySQL module for php5
rc php5-mysqlnd 5.4.45-1~dotdeb+6.1 MySQL module for php5 (Native Driver)
ii phpmyadmin 4:3.3.7-10 MySQL web administration tool
Добавление результата удаления apt-get
~# apt-get remove mysql-server-5.5
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
mysql-server : Depends: mysql-server-5.1 but it is not going to be installed or
mysql-server-5.5 but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Может ли кто-нибудь помочь мне понять, как это исправить? Заранее спасибо, Симона
Как объяснил @M Somerville, существует конфликт между пакетами, ранее установленными репозиторием dotdeb, который вы используете, и официальным репозиторием debian, который теперь содержит более новую версию mysql 5.5.
Что вам нужно сделать, так это полностью удалить mysql 5.5, а затем установить последнюю версию, доступную в ваших репозиториях.
Это решило проблему для меня без потери данных / конфигурации:
apt-get remove mysql-client-5.5 mysql-client-core-5.5 mysql-client mysql-server-5.5 mysql-server
затем
apt-get install mysql-client mysql-server
В любом случае я не могу не подчеркнуть важность резервного копирования, прежде чем вы попробуете это сделать.
Удачи
9 декабря Debian осуществил обратный перенос MySQL 5.5.46 в squeeze-lts. Судя по тому, что вы говорите, похоже, что вы использовали репозиторий dotdeb, а также репозиторий Debian, а dotdeb содержит MySQL 5.5.38. Итак, теперь squeeze-lts содержит более поздний пакет для установленного вами пакета и пытается его установить. Но два репозитория, похоже, не согласны с именами пакетов / конфликтами / зависимостями, и поэтому обновление mysql-client-5.5 (присутствует в обоих репозиториях) конфликтует из-за пакета dotdeb mysql-client-core-5.5, который squeeze-lts ничего не знает (так что комментарий от wurtel не поможет, так как обновлять нечего).
В общем, я бы никогда не запустил принудительную установку, даже если что-то подсказывает, что вы должны это сделать :) Если вас устраивает версия 5.5.46 от squeeze-lts, то я предлагаю вам попробовать удалить любые пакеты версии 5.5.38, например, mysql-client-core-5.5, а не mysql-client, затем mysql-client-5.5, затем mysql-common - надеюсь, это будет возможно без конфликтов, хотя я не уверен, извините. Если это сработает, то ваша идея удаления и чтения действительно кажется хорошей, чтобы убедиться, что все установлено правильно.
Все это может произойти снова и снова, если dotdeb обновит свой репозиторий до более поздней версии, чем squeeze-lts, в общем, я бы посоветовал, если вы получаете что-то из стороннего репо, такого как dotdeb, закреплять пакеты оттуда, чтобы они не будет отменен изменениями в основном репозитории.