web-dev-qa-db-ja.com

パージ後にmysql-serverを再インストールできません

最近、Ubuntu 16.04の新規インストールを行いました。 mysql-servermysql-client(デフォルトのバージョン5.7.12)をapt-get install経由でインストールしました。

5.7.12はいくつかの問題を示していたため、アンインストールすることにしました。最初にapt-get remove mysql-server mysql-clientを試しましたが、/etc/mysql/var/lib/mysqlなどのアーティファクトは削除されませんでした。

それからapt-get --purge removed mysql-server mysql-clientを試しましたが、それでも違いはありません。

そのため、それらを手動で削除しました(rm -rf経由)。また、*mysql*のような/usr/依存パッケージに由来するmysql-*の下にあるすべてのmysql-commonファイルを手動で削除しました。

しかし、今、mysql-server and -clientを再インストールしたいとき、できないことがわかりました。

実際、今はapt-get remove mysql-serverapt-get install mysql-serverもできない状態になっています!

私がいる状況をどのように修正しますか?ローカルパッケージリポジトリのメタデータが破損した場合、どうすれば修復できますか?

mysql-serverのためだけに、祝福されたOS全体を他のすべてのアプリと環境に再インストールするのは嫌です。

たとえば、次はmysql-serverを削除しようとしたときに表示されるエラーです。

$ apt-get remove  mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  mysql-server
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 159 kB disk space will be freed.
Do you want to continue? [Y/n] 
(Reading database ... 237601 files and directories currently installed.)
Removing mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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
Errors were encountered while processing:
 mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)

そして、インストールしようとすると、このエラーが発生します:

$ apt-get -f install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mysql-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/10.1 kB of archives.
After this operation, 159 kB of additional disk space will be used.
Selecting previously unselected package mysql-server.
(Reading database ... 237599 files and directories currently installed.)
Preparing to unpack .../mysql-server_5.7.12-0ubuntu1_all.deb ...
Unpacking mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

apt-get install -fの出力は次のとおりです。

$ apt-get install -f 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
28
Harry

2017年1月10日編集:これは、この投稿の重大な問題を修正するためのこの投稿の主要なレビューです。

心のエラー

問題は、パッケージがまだ半分インストールおよび半分構成された状態でシステム上にあり、明示的に削除する必要があることです。

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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

本当に言っているのは、パッケージmysql-server-5.7mysql-serverの依存関係であり、既にインストールされているが、構成されていないということです。したがって、mysql-server-5.7によって残されたパンくずリストを削除するには、purgeする必要があります。

Sudo apt purge mysql-server mysql-server-5.7

根拠

aptを使用してソフトウェアをインストールすると、依存関係も自動的に処理されます。

特定のパッケージを削除すると、それらの同じ依存関係が処理されない場合があります。この投稿の場合、その依存関係はmysql-server-5.7です。

次のコマンドを発行して、パッケージの状態を確認できます。

dpkg-query -l [package-name-here]

通常、パッケージ名の左側にunまたはrcというコードが表示されている場合、実際に壊れたパッケージであるかどうかを確認できます。

この問題が発生したときは、libapache2-mod-phpおよびlibapache2-mod-php7.0を使用していました。これは私の出力でした。

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-============================================================
un  libapache2-mod-php          <none>             <none>             (no description available)

私の場合、パッケージのステータスは不明であり、システムにインストールされていない(コードun)と主張しました。

aptremoveを指定すると、パッケージ、構成ファイル、および自動インストール中に問題となる可能性のあるその他のアイテムが残る場合があります。

aptpurgeを指定するときは、removeが残したパンくずをすべて削除するのが最善です。

元々、プロセスはまだ実行中であると想定していましたが、ほとんどの場合、非アクティブであるか、停止しています。

サービスがパッケージの削除を妨げているかどうかを確認する最良の方法は、最初にそのサービスを確認することです。

1)mysqlサービスの調査

aptから提供されたシステムエラーを使用して、systemctlサービスのステータスを確認することで、実際にmysqlを使用してエラーを調査できます。

Sudo systemctl status [pattern]

この場合、mysqlが実行されているかどうかを確認したいので、次のように入力できます。

systemctl status mysql.service

サービスが実行されている場合は、この出力が表示されるはずです

systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-01-10 23:10:06 EST; 1h 3min ago
 Main PID: 1206 (mysqld)
   CGroup: /system.slice/mysql.service
           └─1206 /usr/sbin/mysqld

注:サービスが停止している場合、その名前のサービスが実行されていないことを示す短いメッセージが表示され、ステップ3にスキップします。

2)mysqlを使用してsystemctlサービスを停止する

注:[パターン]は、serviceまたはinitctlでリストされた名前でなければなりません。 patternを使用する理由は、systemctlが正規表現の一致を使用するためです。したがって、kill引数を使用する必要がある場合は注意してください。

Sudo systemctl stop [pattern]

patternはmysqlデーモン/サービス名を表します。停止が機能しない場合は試してください

Sudo systemctl kill [pattern]

例えば

Sudo systemctl stop mysql

3)mysqlのアンインストール/削除

完全にパージする必要がある場合は、最初にサービスまたはプロセスが停止していることを確認してから、正しいファイルとディレクトリを削除していることを確認してください!

注:正しいmysqlバージョンをターゲットにしていることを確認してください。たとえば、5.5を使用している場合、バージョン番号を適切に調整します。

警告:次の手順はデータを削除します! (バックアップを行うには、最初のコマンドを実行する必要があります)

ソース: MySQLをアンインストールする方法

tar -zcvf ~/msql_backup.tar.gz /etc/mysql /var/lib/mysql 
Sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
Sudo rm -rfv /etc/mysql /var/lib/mysql
Sudo apt autoremove
Sudo apt autoclean

4)壊れたパッケージを修正し、不足している依存関係を処理する

上記の手順がうまくいかなかった場合は、apt--fix-brokenオプションを付けて実行し、損傷を修復する必要がある場合があります。

apt updateを最初に、次にapt installを確認してください

Sudo apt update    
Sudo apt install mysql-server mysql-client --fix-broken --fix-missing

5)他のすべてが失敗した場合、mysql自分をビルドしてインストールします

上記のいずれも機能しない場合は、ソースを手動でダウンロードし、コンパイルし、makeまたはbashを使用してそこからインストールする必要があります(すべて自動化されているため、それほど苦痛はありません)。

78
user383919

最初の投稿の問題は、SQLアイテムではなくメタパッケージを適切に再構成できないことです。現在のリリース項目を指定する必要があります。

使用と言います。

apt search mysql-server

つまり、パッケージのリストが表示されます

「mysql-server-5.7」「mysql-server-core-5.7」以降のリリース

その後;

dpkg-reconfigure --force mysql-server-5.7 mysql-server-core-5.7

できた。

7
e8hffff

これはあなたにとって正しい解決策です

まず、mysql-serverのすべてのパッケージを削除する必要があります。

警告:次の手順でデータが削除されます!最初にバックアップを行ってください!

Sudo rm -rf /var/lib/mysql

次にインストールします:

Sudo apt-get install lamp-server^

または、次のことができます。

Sudo apt-get install mysql-server
3
Rohan

このエラーは、MySQLからMariaDBに切り替えるときにも発生しました( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 )。

MySQLバイナリデータファイルはMariaDBと互換性がないため、mysqldumpを台無しにする時間がなかったため、MySQLに切り替えました。

最初にMariaDBデータを/var/lib/mysqlから移動し、次にMySQLをインストールしてから、元のデータを/var/lib/mysql-5.7(エラーの前に自動的に作成された)から/var/lib/mysqlに移動する必要がありました。

0
baptx

これを見た

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.

間違った起動スクリプトがまだ存在していた手がかりとして。

/etc/init.d/mysqlとそのシンボリックリンクを探します。これらを削除すると、パージ後の再インストールの問題が解決するように見えました。

0
ghatzhat