削除後にmysql-serverを再インストールできない

削除後に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-server実際、今はどちらもできない状態ですapt-get install mysql-server

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

という理由だけで、他のすべてのアプリや環境とともに、OS 全体をもう一度再インストールするのは嫌ですmysql-server

たとえば、削除しようとしたときに表示されるエラーは次のとおりです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)

答え1

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.7は の依存関係でありmysql-server、すでにインストールされているが、構成されていないということです。したがって、purgeによって残されたパンくずを削除するには、 を実行する必要がありますmysql-server-5.7

sudo apt purge mysql-server mysql-server-5.7

根拠

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

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

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

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

通常、コードunまたはrcパッケージ名の左側を見ると、実際に壊れたパッケージであるかどうかがわかります。

私がこの問題に遭遇したとき、それは と でしたlibapache2-mod-phplibapache2-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私の場合、パッケージのステータスが不明であり、システムにインストールされていない(コード)と表示されました。

apt何かを指示するとremove、自動インストール中に問題となる可能性のあるパッケージ、構成ファイル、その他の項目が残される可能性があります。

apt何かを実行するときは、残っている可能性のあるpurgeパンくずをすべて削除するのが最善です。remove

当初、プロセスはまだ実行中であると想定していると述べましたが、おそらく非アクティブ、つまり停止していたと思われます。

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

1)mysqlサービスの調査

によって提供されたシステムエラーを使用して、実際にサービスの状態をチェックすることでエラーを調査するaptことができます。systemctlmysql

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]

ここで、はpatternmysqlデーモン/サービス名を表します。stopが機能しない場合は、

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 を使用してそこからインストールする必要があります (すべて自動化されているため、思ったほど面倒ではありません)。

答え2

最初の投稿の問題は、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

終わり。

答え3

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

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

警告: 次の手順を実行するとデータが削除されます。まずバックアップを行ってください。

sudo rm -rf /var/lib/mysql

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

sudo apt-get install lamp-server^

または、次の操作を行うこともできます。

sudo apt-get install mysql-server

答え4

このエラーは、MySQLからMariaDBに切り替えたときにも発生しました(バグ:)。

MySQL バイナリ データ ファイルは MariaDB と互換性がなかったため、mysqldump を操作する時間がなかったため、MySQL に戻りました。

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

関連情報