最近、Ubuntu 16.04の新規インストールを行いました。 mysql-server
とmysql-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
もできない状態になっています!
私がいる状況をどのように修正しますか?ローカルパッケージリポジトリのメタデータが破損した場合、どうすれば修復できますか?
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)
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
の依存関係であり、既にインストールされているが、構成されていないということです。したがって、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
)と主張しました。
apt
にremove
を指定すると、パッケージ、構成ファイル、および自動インストール中に問題となる可能性のあるその他のアイテムが残る場合があります。
apt
にpurge
を指定するときは、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を使用してそこからインストールする必要があります(すべて自動化されているため、それほど苦痛はありません)。
最初の投稿の問題は、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
できた。
これはあなたにとって正しい解決策です
まず、mysql-serverのすべてのパッケージを削除する必要があります。
警告:次の手順でデータが削除されます!最初にバックアップを行ってください!
Sudo rm -rf /var/lib/mysql
次にインストールします:
Sudo apt-get install lamp-server^
または、次のことができます。
Sudo apt-get install mysql-server
このエラーは、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
に移動する必要がありました。
これを見た
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
とそのシンボリックリンクを探します。これらを削除すると、パージ後の再インストールの問題が解決するように見えました。