Peningkatan 16,04 merusak server mysql

127

Pemutakhiran saya secara keseluruhan berjalan dengan baik, tetapi saya masih memiliki masalah dengan server mysql yang tidak dapat diinstal, dan tidak ada yang saya coba untuk membuatnya berfungsi.

Ini adalah kesalahan yang saya lihat ketika mencoba menginstal / menginstal ulang:

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)

Saya sudah mencoba sepenuhnya menghapusnya, meskipun demikian upaya untuk menginstal MariaDB karena dependensi (?). Setiap saran tentang apa yang dapat saya lakukan untuk memperbaikinya akan sangat disambut.

EDIT: Sepertinya saya bukan satu-satunya: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279

TheGremlyn
sumber
Saya memiliki masalah yang sama di sini .
KernelPanic
1
Harus menghapus phpmyadmin, yang menyebabkan masalah ketergantungan entah bagaimana. Setelah menginstal ulang, semuanya berfungsi dengan baik lagi.
Hinrich
1
do-release-upgrade dari Ubuntu 14 hingga 16 melakukan upgrade yang tidak didukung dari MySQL 5.5 ke 5.7, sehingga diharapkan MySQL rusak setelahnya, seperti yang dilaporkan di sini: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug / ...
Marco Marsala
1
@MarcoMarsala Saya tidak tahu apakah kita bisa mengatakan itu diharapkan untuk MySQL akan rusak setelah Ubuntu 14 sampai 16 peningkatan, meskipun saya kira itu tergantung pada perspektif Anda. Untuk rata-rata pengguna, tentu saja tidak diharapkan untuk memutakhirkan pemutakhiran LTS seperti MySQL. Mengejutkan bahwa tidak ketahuan saat pengujian.
TheGremlyn
apt install phpmyadmin - pasang ulang perbaikan di atas tanpa perlu menyentuh mysql setelah ... go figure
Andy

Jawaban:

119

Instruksi @ andrew-beerman yang diposting di jalur yang benar, meskipun mereka tidak cukup jelas bagi saya dan tampaknya merekomendasikan lebih dari yang diperlukan. Saya menyatukan jawaban dari atas dan posting bermanfaat di utas bug.

Ini adalah langkah-langkah yang saya ambil untuk memperbaikinya:

  1. Back up Anda my.cnf filedi /etc/mysqldan menghapus atau mengubah nama itu

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Hapus folder /etc/mysql/mysql.conf.d/menggunakan

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Pastikan Anda tidak my.cnfmenyimpan file di tempat lain (saya lakukan di dir rumah saya!) Atau sedang /etc/alternatives/my.cnfdigunakan

    sudo find / -name my.cnf
    
  4. Cadangkan dan hapus /etc/mysql/debian.cnffile (tidak yakin jika diperlukan, tetapi untuk berjaga-jaga)

    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. Jika syslog Anda menampilkan kesalahan seperti "mysqld: Tidak dapat membaca dir dari '/etc/mysql/conf.d/'" buat tautan simbolik:

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

    Maka layanan harus dapat memulai sudo service mysql start.

Itu berhasil!

TheGremlyn
sumber
17
setelah semua operasi ini (saya lakukan sebelumnya) saya masih memiliki masalah kesalahan yang sama ...
Serge
5
Anda harus menghapus setiap my.cnf. * Dari direktori / etc / mysql. Carilah my.cnf.backup, my.cnf.fallback dan my.cnf.migrated - semua file ini juga harus dihapus (backup terlebih dahulu!)
hitzi
8
@SergiiP sudo find / -name "my.cnf"mungkin berguna.
starbeamrainbowlabs
1
mysql-server-core- harus berupa mysql-server-core-5.7. Kalau tidak bekerja seperti pesona. Terima kasih!
David Tay
1
+1. Anda telah membuat hari saya! Juga pagi dan sore hari! Saya terjebak.
Max Yudin
56

Hari ini saya mendapatkan masalah yang sama, setelah mencoba banyak solusi, saya menemukan bahwa masalahnya adalah perintah sudo systemctl disable mysql.serviceyang saya gunakan untuk menonaktifkan mulai otomatis MySQL, jadi untuk membuatnya berfungsi saya mengaktifkan kembali server MySQL menggunakan perintah sudo systemctl enable mysql.servicedan menjalankan lagi proses upgrade dan itu diakhiri dengan sempurna.

Mode Naruto Biju
sumber
5
Saya berlari ke masalah yang sama ini dan perbaikan yang sama bekerja untuk saya.
Allen
5
Bekerja untukku. Apakah setiap solusi di sini, mysql bekerja setelah ini.
Błażej Michalik
6
Sama di sini - ini harus menjadi pos teratas.
a1phanumeric
3
Bekerja untuk saya juga! Terima kasih banyak. Untuk menjadi eksplisit, jalankan: sudo systemctl enable mysql.servicedan setelah itu jalankan sudo apt install -f.
Fernando Paladini
Ini yang harus saya lakukan. Saya telah menonaktifkan autostart seperti dijelaskan oleh @naruto. Saya mengaktifkan autostart dan menjalankan "sudo apt upgrade". Sekarang sudah diperbaiki. Harus menjadi jawaban teratas. Ini adalah solusi yang jauh lebih sederhana, lebih standar dan lebih sedikit masalah.
Jack Holt
20

Pesan kesalahan Anda berisi baris ini:

subprocess installed post-installation script returned error exit status 1

Namun, ini installed post-installation scripttidak disebutkan namanya. Setelah banyak mengutak-atik, saya mengetahui bahwa namanya adalah (dalam kasus saya) /var/lib/dpkg/info/mysql-server-5.7.postinst.

Buka file ini dengan sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst, atau editor pilihan Anda.

Di bagian atas, ubah baris 3 (atau lebih): set -euntuk set -x, menyimpan file. (opsi -eadalah "keluar dari kesalahan", -xberarti "secara eksplisit menunjukkan perintah dieksekusi", mungkin)

Jalankan sudo dpkg --configure -a --log /tmp/dpkg.log (opsi --log adalah opsional). Anda juga bisa menjalankannya apt upgradejika tahu itu akan menjadi satu-satunya paket yang akan ditingkatkan.

Sekarang Anda mendapatkan output verbose dari mysql-server-5.7.postinstskrip bash, dan Anda bisa mencari tahu apa yang salah.

Dalam kasus saya itu gagal mencoba (kembali) berjalan mysql_upgrade, tetapi itu tidak diperlukan untuk instalasi mysql saya yang disesuaikan. Saya yakin saya sudah menjalankannya secara manual sebelumnya, berhasil, dan semuanya baik-baik saja.

Jadi saya mengubah jalur 321 (untuk rilis mysqld lama, coba baris 281),

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

dan perintah yang telah gagal sebelumnya, sudo apt upgrade(jalankan lagi), selesai dengan sukses, dan dpkg menghapus status kesalahan untuk paket ini.

Sekarang Anda dapat mengatur kembali set -xke set -e(disebutkan di atas). Dan secara opsional batalkan komentar pada baris mysql-upgrade.

Pekerjaan tambahan mungkin diperlukan jika Anda telah memindahkan partisi data mysql Anda ke lokasi yang tidak standar. Saya memindahkan milik saya dari /var/lib/mysql/datake drive lain melalui symlink. Maka Anda mungkin harus menghapus tautan simbolis sementara, sebelum postinstmanipulasi skrip. Kemudian buat kembali setelah menjalankan pemutakhiran paket.

Setelah peningkatan versi minor berikutnya dari paket debian mysqld, masalah dengan /var/lib/dpkg/info/mysql-server-5.7.postinstskrip ini dapat muncul kembali.

knb
sumber
Saya akhirnya membersihkan semuanya dan kemudian mengunduh versi komunitas mysql-server dan menginstal secara manual dari sini: dev.mysql.com/downloads/mysql
RyanNerd
Hal yang persis sama terjadi pada saya, dan langkah Anda menyelesaikannya. Namun, panggilan mysql_upgrade saya ada di saluran 320. Bisakah Anda menjelaskan mengapa ia mengembalikan nilai nol ketika dipanggil dari skrip postinst?
emiliopedrollo
@emiliopedrollo Tidak, saya tidak bisa menjelaskannya di sini. Tapi saya pikir nomor baris sekarang 320 karena baru-baru ini pengelola paket telah menambah skrip postinstall, saya telah mengamati hal yang sama beberapa hari yang lalu, selama menjalankan terakhir dari software-updater (yang termasuk paket mysql-deb-baru) .
knb
Terima kasih! Dengan set -esaya dapat menyelesaikan masalah yang sebenarnya - MySQL tidak memiliki akses untuk pengguna sistem ubuntu yang ditentukan di /etc/mysql/debian.cnf . Jadi saya menambahkan pengguna ini ke MySQL dan memberikan hak istimewa, berlari dpkglagi dan berhasil!
Allen Hamilton
17

Petunjuk di sini memperbaikinya di server saya: https://bugs.mysql.com/bug.php?id=72722

Saya bisa memahami rasa sakit memiliki sistem Anda dalam keadaan tidak konsisten tetapi jangan khawatir tentang seluruh situasi dan mengambilnya langkah demi langkah untuk mendapatkan sistem bersih.

Pertama mari kita lihat keadaan saat ini dari semua paket mysql pada mesin menggunakan: dpkg -l | grep mysql (Silakan tempel output tidak termasuk kolom terakhir)

Kolom pertama menunjukkan status paket saat ini. Berikut ini beberapa opsi yang mungkin:

ii) rc yang diinstal

Agar ini berfungsi, Anda harus menjalankan 'apt-get purge <pkg-name>' hingga Anda tidak melihat paket apa pun dalam daftar di atas.

Harap diingat bahwa beberapa paket non-mysql-server seperti python-mysql.connector dan python-mysqldb, jika diinstal, tidak perlu dihapus karena tidak memiliki pengaruh pada situasi ini tetapi jika dihapus dapat menyebabkan masalah pada aplikasi yang menggunakannya.

Kami pasti akan mencoba mengunjungi kembali dokumen kami untuk melihat bagaimana kami dapat melindungi pengguna dari masalah ini. Terima kasih telah berbagi tanggapan Anda secara detail dengan kami.

Andrew Beeman
sumber
2
Terima kasih untuk dpkg -l | grep mysql . Itu membantu untuk memahami arah.
Max Yudin
perintah itu salah untuk membersihkan itu harus sudo apt-get purge <pkg-name>saya perbaiki dengan edit tetapi: Saya menggunakan karakter unicode untuk <karena kalau tidak itu tidak akan ditampilkan. Berhati-hatilah ketika menyalin perintah ini
Toskan
3

Dalam kasus saya, dengan strace, saya melihat bahwa / var / run / mysqld / tidak ada dan mysqld tidak dapat membuat file mysqld.sock.

Perintah-perintah ini memecahkan masalah saya:

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

Sekarang:

systemctl start mysql

Dan mysql bekerja lagi :)

Leonardo Catalinas
sumber
Saya sarankan Anda menambahkan baris ini ke / usr / share / mysql / mysql-systemd-start mulai dari baris 25, maka Anda tidak perlu membuat ulang direktori ini setelah setiap reboot (maaf baris kembali tidak berfungsi dalam komentar ini) : if [! -d / run / msyqld]; kemudian mkdir -p -m0755 / run / mysqld || {echo "Tidak dapat membuat / menjalankan / mysqld"; keluar 1; } chown mysql: mysql / run / mysqld || {echo "Tidak dapat chown / run / mysqld"; keluar 1; } fi
scoobydoo
3

Dalam kasus saya, saya bisa menyelesaikan masalah dengan menambahkan

# 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,

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

Untuk lebih jelasnya lihat jawaban saya (oleh ChristophS) di stackoverflow.

ChristophS
sumber
0

Saya memiliki masalah yang sama. Saya mencoba menginstal ulang mysql beberapa kali, tetapi tidak berhasil.

Saya menemukan bahwa masalah bagi saya adalah, bahwa proses mysql lain sudah berjalan.

Secara detail:

Setelah saya membaca dengan seksama login /var/log/mysql/error.log, dan menemukan:

[GALAT] Tidak dapat memulai server: Mengikat pada port TCP / IP: Alamat sudah digunakan

[GALAT] Apakah Anda sudah memiliki server mysqld lain yang berjalan di port: 3306?

Sepertinya aplikasi lain sudah menggunakan port.

Saya memeriksanya menggunakan 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=

Dan saya membunuh proses yang berjalan sudo kill -15 14706

Lalu saya mulai mysql: /etc/init.d/mysql start

Akhirnya mysql bekerja untuk saya! Saya harap ini membantu seseorang.

milkovsky
sumber
0

Tidak ada jawaban di halaman ini yang berfungsi untuk saya.

Saya akhirnya pergi ke halaman unduhan Oracle , mengunduh mysql-apt-config_0.8.8-1_all.deb, dan menginstal MySQL dari repo Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
ostrokach
sumber
2
isntall-> installsalah ketik. SO bodoh tidak mengizinkan saya untuk memperbaiki satu karakter.
Csaba Toth
Mengapa Anda pergi ke oracle untuk mengunduh mysql
Sinscary
@Sinscary Jawaban ini dari beberapa waktu lalu, tapi itu mungkin karena mereka memiliki versi yang lebih baru daripada manajer paket sistem?
ostrokach
0

Saya memiliki masalah pada beberapa server sekarang. Perbaikannya adalah menjalankan apt install phpmyadmin --reinstall

yang menyelesaikan di atas (tanpa perlu menyentuh mysql sesudahnya)

Andy
sumber