Baru-baru ini saya melakukan instalasi baru Ubuntu 16.04. Saya juga menginstal mysql-server
dan mysql-client
(versi default mereka 5.7.12) via apt-get install
.
Karena 5.7.12 menunjukkan beberapa masalah, saya memutuskan untuk menghapus instalannya. Saya mencoba apt-get remove mysql-server mysql-client
dulu tetapi melihat bahwa artefak suka /etc/mysql
dan /var/lib/mysql
tidak dihapus.
Saya kemudian mencoba apt-get --purge removed mysql-server mysql-client
, tetapi tetap tidak ada perbedaan.
Jadi, saya menghapusnya secara manual (via rm -rf
). Saya juga secara manual menghapus semua *mysql*
file di bawah /usr/
yang berasal dari mysql-*
paket dependensi seperti mysql-common
.
Namun, sekarang, ketika saya ingin menginstal ulang mysql-server and -client
, saya menemukan bahwa saya tidak bisa.
Bahkan, sekarang saya dalam keadaan di mana saya tidak bisa apt-get remove mysql-server
atau tidak apt-get install mysql-server
!
Bagaimana cara memperbaiki situasi saya sekarang? Jika metadata repositori paket lokal saya rusak, bagaimana cara memperbaikinya?
Saya benci menginstal ulang OS yang diberkati dengan semua aplikasi dan lingkungan saya yang lain, sekali lagi hanya karena mysql-server
.
Sebagai contoh, berikut ini adalah kesalahan yang saya dapatkan saat mencoba menghapus 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)
Dan ketika mencoba menginstal, saya mendapatkan kesalahan ini:
$ 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)
Inilah output dari 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)
mysql-server-5.7
dalam keadaan yang buruk, cobalah untuk menginstal ulang:sudo apt-get install --reinstall mysql-server-5.7
.... invoke-rc.d: initscript mysql, action "start" failed. ...
yang saya dapatkan dengan rasa lain dari perintah instal.sudo apt-get remove --purge mysql-server-5.7
. Perhatikan bahwa ini benar-benarmysql-server-5.7
sedang kita bicarakan, bukanmysql-server
.Jawaban:
Diedit 10 Jan 2017 : Ini adalah ulasan utama dari posting ini untuk memperbaiki masalah serius dalam posting ini.
Kesalahan di Hati
Masalahnya adalah bahwa paket tersebut masih pada sistem dalam keadaan setengah terinstal dan setengah dikonfigurasi dan perlu dihapus secara eksplisit.
Apa yang sebenarnya dikatakannya adalah bahwa paket
mysql-server-5.7
tersebut merupakan dependensi untukmysql-server
, sudah diinstal, tetapi tidak dikonfigurasi. Jadi Anda perlupurge
menghapus remah roti yang ditinggalkan olehmysql-server-5.7
.Alasan
Ketika Anda menginstal perangkat lunak menggunakan
apt
, secara otomatis menangani dependensi untuk Anda juga.Ketika Anda menghapus paket tertentu, itu mungkin tidak menangani dependensi yang sama Dalam hal posting ini, ketergantungan itu adalah
mysql-server-5.7
.Anda dapat memeriksa untuk melihat status paket dengan mengeluarkan perintah berikut.
Biasanya jika Anda melihat kode
un
ataurc
di sebelah kiri nama paket, Anda dapat mengetahui apakah itu benar-benar paket yang rusak.Ketika saya mengalami masalah ini, itu dengan
libapache2-mod-php
danlibapache2-mod-php7.0
. Ini adalah output saya.Dalam kasus saya, ia mengklaim bahwa status paket saya tidak diketahui dan tidak diinstal (kode
un
) pada sistem saya.Ketika Anda memberitahu
apt
untukremove
sesuatu, itu dapat meninggalkan paket, file konfigurasi, dan item lainnya yang dapat menjadi masalah selama instalasi otomatis.Ketika Anda memberitahu
apt
untukpurge
sesuatu itu terjadi itu terbaik untuk menghilangkan remah roti yangremove
mungkin telah ditinggalkan.Saya awalnya menyatakan bahwa saya menganggap prosesnya masih berjalan, tetapi kemungkinan besar itu tidak aktif, atau mati.
Cara terbaik untuk memeriksa apakah layanan tersebut mengganggu penghapusan paket Anda adalah dengan memeriksa layanan itu terlebih dahulu.
1) Investigasi
mysql
layananDengan menggunakan kesalahan sistem yang diberikan kepada kami oleh
apt
, kami sebenarnya dapat menggunakansystemctl
untuk menyelidiki kesalahan dengan memeriksa statusmysql
layananDalam kasus kami, kami ingin melihat apakah mysql berjalan sehingga dapat mengetik
Anda akan melihat output ini jika layanan sedang berjalan
Catatan: Jika layanan ini mati, Anda akan melihat pesan singkat yang menunjukkan bahwa tidak ada layanan dengan nama yang berjalan dan kemudian melompat ke langkah 3.
2) Menghentikan
mysql
layanan menggunakansystemctl
catatan: [pola] harus nama yang terdaftar oleh
service
atauinitctl
. alasan saya menggunakanpattern
ini karenasystemctl
menggunakan pencocokan regex, jadi hati-hati jika Anda harus menggunakankill
argumen.di mana
pattern
mewakili nama daemon mysql / layanan. jika berhenti tidak berhasil cobaSebagai contoh
3) Menghapus Instalasi / Membersihkan
mysql
jika Anda harus benar-benar membersihkan, pastikan layanan atau proses dihentikan terlebih dahulu dan kemudian pastikan Anda menghapus file dan direktori yang tepat!
Catatan: Pastikan Anda menargetkan
mysql
versi yang benar . Misalnya, jika Anda menggunakan 5.5, sesuaikan nomor versi dengan tepat.PERINGATAN: langkah-langkah berikut akan menghapus data Anda! (perintah pertama harus dijalankan untuk membuat cadangan)
sumber: Bagaimana cara menghapus instalasi MySQL?
4) Memperbaiki paket yang rusak dan menangani dependensi yang hilang
Jika langkah-langkah sebelumnya tidak bekerja untuk Anda, Anda mungkin perlu untuk menjalankan
apt
dengan--fix-broken
pilihan untuk memperbaiki setiap kerusakan yang dilakukan.Pastikan untuk
apt update
pertama dan kemudianapt install
5) Ketika semuanya gagal, bangun dan instal
mysql
sendiriJika tidak ada yang di atas berfungsi, Anda harus mengunduh secara manual sumber, kompilasi, dan menggunakan make atau bash untuk menginstal dari sana (tidak separah kedengarannya karena semuanya otomatis).
sumber
rm
file milik paket.sudo rm -rf /var/lib/mysql
akan menghapus semua basis data Anda di lokasi default. Lakukan back up dulu!Masalah dengan posting pertama adalah Anda tidak dapat mengkonfigurasi ulang paket meta dengan baik bukan untuk item sql. Anda perlu menentukan item rilis saat ini.
Katakanlah gunakan;
Itu akan menampilkan daftar paket yaitu
"mysql-server-5.7" "mysql-server-core-5.7" atau yang lebih baru rilis
kemudian;
selesai
sumber
Ini solusi yang tepat untuk Anda
Pertama, Anda harus menghapus semua paket server mysql:
Kemudian instal:
Atau Anda dapat melakukannya:
sumber
saya melihat ini
sebagai petunjuk bahwa masih ada skrip start-up yang salah.
Cari
/etc/init.d/mysql
dan semua tautannya. Menghapus ini muncul untuk memperbaiki masalah saya menginstal ulang setelah pembersihan.sumber
Kesalahan ini juga terjadi ketika beralih dari MySQL ke MariaDB ( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 ).
File data biner MySQL tidak kompatibel dengan MariaDB jadi saya beralih kembali ke MySQL karena saya tidak punya waktu untuk mengacaukan mysqldump.
Pertama saya harus memindahkan data MariaDB dari
/var/lib/mysql
, kemudian menginstal MySQL dan kemudian memindahkan data asli saya dari/var/lib/mysql-5.7
(cadangan ini secara otomatis dibuat sebelum kesalahan) ke/var/lib/mysql
.sumber
Cobalah
apt-get -f install
untuk memperbaiki paket SQL Anda yang rusak dan jika Anda masih bermasalah dengan pengelola paket unduh kode sumber server SQL dan kompilasi !! Tapi coba perintah di atas dan gunakan jugadpkg -l | grep sql
untuk mengetahui manajer paket masih berpikir Anda SQL atau tidak ..sumber
apt-get -f install
sendiri, tanpa menentukan nama paket.apt-get install -f
, tidak ada perubahan.