16.04 업그레이드로 mysql-server가 끊어졌습니다.


127

내 전반적인 업그레이드는 잘 진행되었지만 mysql-server 자체를 설치할 수 없다는 치명적인 문제가 남아 있으며 작동하지 않습니다.

이것은 설치 / 재설치 할 때 나타나는 오류입니다.

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

의존성 (?)으로 인해 MariaDB를 설치하려고 시도했지만 완전히 제거하려고했습니다. 이 문제를 해결하기 위해 내가 할 수있는 일에 대한 제안은 가장 환영받을 것입니다.

편집 : 내가 유일하지 않은 것 같습니다 : https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279


나는 여기에 같은 문제가 있습니다 .
KernelPanic

1
어떻게 든 종속 문제를 일으키는 phpmyadmin을 제거해야했습니다. 다시 설치 한 후 모든 것이 다시 작동합니다.
Hinrich

1
Ubuntu 14에서 16으로 do-release-upgrade는 지원되지 않는 MySQL 5.5에서 5.7로 업그레이드를 수행하므로 다음과 같이보고 된대로 MySQL이 손상 될 것으로 예상됩니다. bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug /…
Marco Marsala

1
@MarcoMarsala 우분투 14에서 16으로 업그레이드 한 후에 MySQL이 손상 될 것으로 예상 할 수 있는지 모르겠지만 , 나는 그것이 관점에 달려 있다고 생각합니다. 일반 사용자에게는 MySQL과 같은 LTS 업그레이드가 반드시 필요한 것은 아닙니다. 그러나 테스트 중에 포착되지 않은 것은 놀라운 일입니다.
TheGremlyn

apt install phpmyadmin-후에 mysql을 만질 필요없이 위의 문제를 다시 고치십시오 ... go go
Andy

답변:


119

@ andrew-beerman이 게시 한 지침은 올바른 길에 있지만 명확하지 않으며 필요한 것 이상을 권장하는 것 같습니다. 위의 답변과 버그 스레드의 유용한 게시물을 정리했습니다.

이 문제를 해결하기 위해 취한 단계는 다음과 같습니다.

  1. 당신의 백업 my.cnf file인을 /etc/mysql제거하거나 이름을 변경

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. 다음을 /etc/mysql/mysql.conf.d/사용 하여 폴더 를 제거하십시오.

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. 당신이하지 않아도 확인 my.cnf다른 곳에 은닉 파일을 (나는! 내 홈 디렉토리에서했던) 또는 /etc/alternatives/my.cnf사용

    sudo find / -name my.cnf
    
  4. /etc/mysql/debian.cnf파일 백업 및 제거 (필요한 경우는 아니지만 경우에 따라)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. syslog에 "mysqld : '/etc/mysql/conf.d/'의 디렉토리를 읽을 수 없습니다"와 같은 오류가 표시되는 경우 기호 링크를 작성하십시오.

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    그런 다음 서비스는로 시작할 수 있어야합니다 sudo service mysql start.

작동했습니다!


17
이 모든 작업을 수행 한 후에도 (이전에 수행 했음) 여전히 동일한 오류 문제가 있습니다 ...
Serge

5
/ etc / mysql 디렉토리에서 모든 my.cnf. *를 제거해야합니다. my.cnf.backup, my.cnf.fallback 및 my.cnf.migrated를 찾으십시오. 이러한 파일도 모두 제거해야합니다 (먼저 백업!)
hitzi

8
@SergiiP sudo find / -name "my.cnf"가 도움 이 될 것입니다.
starbeamrainbowlabs

1
mysql-server-core-는 mysql-server-core-5.7이어야합니다. 그렇지 않으면 매력처럼 일했습니다. 감사합니다!
David Tay

1
+1. 당신은 내 하루를 만들었습니다! 또한 아침과 저녁! 나는 붙어 있었다.
Max Yudin

56

오늘 같은 문제가 발생했습니다. 많은 솔루션을 시도한 후 문제가 sudo systemctl disable mysql.serviceMySQL 자동 시작을 비활성화하는 데 사용한 명령 이라는 것을 알았습니다. 그래서 작동하려면 명령을 사용하여 MySQL 서버를 다시 활성화 sudo systemctl enable mysql.service하고 업그레이드 프로세스를 다시 실행하십시오. 완벽하게 종료되었습니다.


5
나는이 같은 문제에 부딪 쳤고 같은 수정이 나를 위해 일했다.
Allen

5
나를 위해 일했다. 여기에있는 모든 솔루션을 수행했지만 mysql 은이 작업을 수행했습니다.
Błażej Michalik

6
여기에서도 동일합니다-이것은 최상위 게시물이어야합니다.
a1phanumeric

3
나도 일 했어! 정말 고맙습니다. 명시 적으로 실행하려면 sudo systemctl enable mysql.service다음을 실행하십시오 sudo apt install -f.
페르난도 팔라 디니

이것이 내가해야 할 전부입니다. @naruto에서 설명한 것처럼 자동 시작을 비활성화했습니다. 자동 시작을 활성화하고 "sudo apt upgrade"을 실행했습니다. 이제 수정되었습니다. 최고 답변이어야합니다. 이것은 훨씬 간단하고 표준이며 문제가 발생하기 쉬운 솔루션입니다.
잭 홀트

20

오류 메시지에 다음 줄이 포함되어 있습니다.

subprocess installed post-installation script returned error exit status 1

그러나 이것은 installed post-installation script이름으로 언급되지 않았습니다. 많은 생각을 한 후에, 나는 그 이름이 (내 경우)라는 것을 알았습니다 /var/lib/dpkg/info/mysql-server-5.7.postinst.

이 파일 sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst또는 선호하는 편집기 로이 파일을 엽니 다 .

상단 변화 라인 3 (정도)에서 다음 set -eset -x파일을 저장합니다. (옵션 -e은 "오류시 종료"이며, -x"명시 적으로 실행 된 명령 표시 "를 의미합니다)

실행합니다 sudo dpkg --configure -a --log /tmp/dpkg.log (--log 옵션은 선택 사항 임). apt upgrade업그레이드 할 유일한 패키지라는 것을 알고 있다면 간단하게 실행할 수도 있습니다.

이제 mysql-server-5.7.postinstbash 스크립트 의 자세한 결과를 얻을 수 있으며 무엇이 잘못되었는지 파악할 수 있습니다.

필자의 경우 (재실행)에 실패했지만 mysql_upgrade사용자 정의 된 mysql 설치에는 필요하지 않았습니다. 나는 전에, 성공적으로 수동으로 실행했으며 모든 것이 잘 되었다고 확신 했습니다.

그래서 나는 321 행을 시작했습니다 (이전 mysqld 릴리스의 경우 281 행을 시도하십시오).

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

이전에 실패한 sudo apt upgrade(다시 실행) 명령이 성공적으로 완료되었으며 dpkg가이 패키지의 오류 상태를 제거했습니다.

이제 (위에서 언급 한) set -x을 다시 설정할 수 있습니다 set -e. 그리고 선택적으로 mysql-upgrade 줄을 주석 해제하십시오.

mysql 데이터 파티션을 비표준 위치로 옮긴 경우 추가 작업이 필요할 수 있습니다. /var/lib/mysql/datasymlink를 통해 다른 드라이브 로 이동했습니다 . 그런 다음 postinst스크립트 조작 전에 기호 링크를 일시적으로 제거해야 할 수도 있습니다 . 그런 다음 패키지 업그레이드를 실행 한 후 다시 만드십시오.

mysqld 데비안 패키지의 다음 마이너 버전 업그레이드 후에 /var/lib/dpkg/info/mysql-server-5.7.postinst스크립트 에 대한이 문제가 다시 나타날 수 있습니다.


: 나는 모든 것을 정화하고 지역 사회 MySQL의 서버 버전을 다운로드 및 수동으로 여기에서 설치 결국 dev.mysql.com/downloads/mysql
RyanNerd

정확히 같은 일이 저에게 일어 났고 당신의 발걸음이 그것을 해결했습니다. 내 mysql_upgrade 호출은 320 행에 있습니다. postinst 스크립트에서 호출 할 때 왜 0이 아닌 값을 반환하는지 설명 할 수 있습니까?
emiliopedrollo

@emiliopedrollo 아니요 여기서 설명 할 수 없습니다. 그러나 최근 패키지 관리자가 설치 후 스크립트를 보강했기 때문에 줄 번호가 320이라고 생각합니다. 다른 요일에 소프트웨어 업데이트 프로그램의 마지막 실행 (새로운 mysql-deb-package 포함) 중에 같은 것을 관찰했습니다. .
knb

감사! 함께 set -e내가 정확한 문제를 해결할 수 있었다 - MySQL은 지정된 우분투 시스템 사용자에 대한 액세스 권한이 없습니다 않았다 /etc/mysql/debian.cnf . 그래서이 사용자를 MySQL에 추가하고 권한을 부여하고 dpkg다시 실행 하면 작동했습니다!
Allen Hamilton

17

여기에있는 지침은 내 서버에서 수정했습니다 : https://bugs.mysql.com/bug.php?id=72722

시스템이 일관성이없는 상태에 있다는 고통을 이해할 수 있지만 전체 상황에 대해 걱정하지 않고 시스템을 깨끗하게하기 위해 단계별로 조치를 취합니다.

먼저 다음을 사용하여 머신에서 모든 mysql 패키지의 현재 상태를 볼 수 있습니다. dpkg -l | grep mysql (마지막 열을 제외한 출력을 붙여 넣으십시오)

첫 번째 열은 패키지의 현재 상태를 나타냅니다. 가능한 옵션은 다음과 같습니다.

ii) Installed rc) 제거 된 config-files 유지 (이것은 / etc에서 config-file을 제거하지 않는 'apt-get remove'로 제거한 모든 패키지의 상태 여야합니다)

이 작업을 수행하려면 위 목록에 패키지가 표시되지 않을 때까지 'apt-get purge <pkg-name>'을 실행해야합니다.

python-mysql.connector 및 python-mysqldb와 같은 일부 my-mysql-server 패키지는 설치되어 있으면이 상황에 영향을 미치지 않으므로 제거하지 않아도되지만 제거하면 패키지를 사용하는 응용 프로그램에 문제가 발생할 수 있습니다.

우리는 문서를 다시 방문하여 사용자가이 문제에 빠지지 않도록 어떻게 보호 할 수 있는지 알아볼 것입니다. 의견을 보내 주셔서 감사합니다.


2
감사합니다 dpkg -l | grep mysql . 방향을 이해하는 데 도움이되었습니다.
Max Yudin

명령이 제거에 잘못되었습니다 sudo apt-get purge <pkg-name>. 편집으로 수정해야하지만 <그렇지 않으면 표시되지 않기 때문에 유니 코드 문자를 사용 했습니다. 이 명령을 붙여
넣은

3

필자의 경우 strace를 사용하면 / var / run / mysqld /가 존재하지 않고 mysqld가 mysqld.sock 파일을 만들 수 없다는 것을 알았습니다.

이 명령은 내 문제를 해결했습니다.

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

지금:

systemctl start mysql

그리고 mysql은 다시 작동합니다 :)


25 행부터 시작하여 / usr / share / mysql / mysql-systemd-start에이 행을 추가하는 것이 좋습니다. 다시 부팅 할 때마다이 디렉토리를 다시 만들 필요가 없습니다 (죄송 합니다만이 설명에서는 행이 반환되지 않습니다) : 만약 [ ! -d / run / msyqld]; 그런 다음 mkdir -p -m0755 / run / mysqld || {echo "/ run / mysqld를 만들 수 없습니다"; 1 번 출구; } chown mysql : mysql / run / mysqld || {echo "/ run / mysqld를 숨길 수 없습니다"; 1 번 출구; } fi
scoobydoo

3

내 경우에는 추가하여 문제를 해결할 수 있습니다.

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

/etc/apparmor.d/local/usr.sbin.mysqld

자세한 내용 은 stackoverflow 에서 내 ChristophS의 답변을 살펴보십시오 .


0

나는 같은 문제가 있었다. mysql을 여러 번 다시 설치하려고 시도했지만 성공하지 못했습니다.

나는 나를 위해 문제가 다른 mysql 프로세스가 이미 실행 중이라는 것을 알았습니다.

세부 사항 :

주의 깊게 로그인 한 후 /var/log/mysql/error.log다음을 발견했습니다.

[오류] 서버를 시작할 수 없음 : TCP / IP 포트에 바인딩 : 이미 사용중인 주소

[오류] 다른 mysqld 서버가 이미 포트 : 3306에서 실행되고 있습니까?

다른 응용 프로그램이 이미 포트를 사용하고있는 것 같습니다.

나는 그것을 사용하여 확인했다 ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

그리고 나는 달리는 과정을 죽였다. sudo kill -15 14706

그런 다음 mysql을 시작했습니다. /etc/init.d/mysql start

마지막으로 mysql이 나를 위해 일합니다! 누군가에게 도움이되기를 바랍니다.


0

이 페이지의 답변 중 어느 것도 나를 위해 일하지 않았습니다.

결국 Oracle 다운로드 페이지로 이동하여 mysql-apt-config_0.8.8-1_all.debOracle repo에서 MySQL을 다운로드 하고 설치했습니다.

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server

2
isntall-> install오타. 바보 같은 SO 하나의 문자를 수정할 수 없습니다.
Csaba Toth

왜 오라클에 가서 mysql을 다운로드
하셨습니까?

@Sinscary이 답변은 잠시 후의 것이지만 아마도 시스템 패키지 관리자보다 최신 버전 이었기 때문일 것입니다.
ostrokach

0

몇 대의 서버에서 문제가 발생했습니다. 수정은 apt install phpmyadmin --reinstall을 실행하는 것이 었습니다.

위의 문제를 해결했습니다 (나중에 mysql을 만질 필요가 없습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.