16.04 upgrade přerušil mysql-server

113

Celková inovační upgrade se mi podařilo, ale zůstávám s kriticky neustálým problémem, že mysql-server se nedokáže sám nainstalovat, a nic, co jsem se snažil, to zvládne.

Jedná se o chybu, kterou vidím při pokusu o instalaci / reinstalaci:

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)

Zkoušel jsem to úplně odstranit, ačkoli se to pokouší nainstalovat MariaDB kvůli závislostem (?). Jakékoli návrhy ohledně toho, co mohu udělat, abych to napravil, by byly vítané.

EDIT: Zdá se, že nejsem jediný: Odkaz

    
dané TheGremlyn 22.04.2016 19:53

8 odpovědí

112

Pokyny @ andrew-beerman poslané jsou na správné cestě, i když nejsou pro mě zcela jasné a zdá se, že doporučuji víc než je nutné. Zapojil jsem odpověď z výše uvedeného a užitečný příspěvek do chyby.

Toto jsou kroky, které jsem udělal, abych to opravil:

  1. Zálohujte svémy.cnf file v/etc/mysql a odstraňte nebo přejmenujte

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Odstraňte složku/etc/mysql/mysql.conf.d/ pomocí

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Ověřte, že nemáte soubormy.cnf ukrytý někde jinde (udělal jsem to ve svém domovském adresáři) nebo v/etc/alternatives/my.cnf použití

    sudo find / -name my.cnf
    
  4. Zálohujte a odstraňte/etc/mysql/debian.cnf souborů (není-li to nutné, ale pouze pro případ)

    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. V případě, že váš syslog zobrazí chybu jako "mysqld: Nelze číst adresář '/etc/mysql/conf.d/'" vytvořit symbolický odkaz:

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

    Služba by pak měla začít ssudo service mysql start.

To fungovalo!

    
odpověděl TheGremlyn 25.04.2016 15:38
54

Dnes jsem dostal stejný problém. Po vyzkoušení mnoha řešení jsem zjistil, že problémem byl příkazsudo systemctl disable mysql.service, který jsem použil k vypnutí automatického spuštění služby MySQL, a proto jsem ho znovu zapnul a znovu aktivoval server MySQL pomocí příkazusudo systemctl enable mysql.service a znovu spustit proces upgradu a dokonale skončil.

    
odpověděl Naruto Biju Mode 26.04.2016 00:37
17

Pokyny zde byly opraveny na mém serveru: Odkaz

  

Chápu bolest v tom, že váš systém má nekonzistentní stav   ale nechte se starat o celou situaci a postupujte krok za krokem   aby systém byl čistý.

     

Nejprve se zobrazí aktuální stav všech mysql balíků na stroji   pomocí: dpkg -l | grep mysql (Vložte výstup s výjimkou posledního   sloupec)

     

První sloupec označuje aktuální stav balíčku. Tady jsou   možné možnosti:

     

ii) Instalováno rc) Byly odebrány konfigurační soubory (to by mělo být stav   ze všech balíčků, které jste odebrali pomocí příkazu "apt-get remove"   neodebírat konfigurační soubory pod / etc)

     

Aby to fungovalo, musíte spustit "apt-get purge"   ve výše uvedeném seznamu nevidíte žádné balíčky.

     

Nezapomeňte, že některé balíky typu non-mysql-server   python-mysql.connector a python-mysqldb, pokud jsou nainstalovány, nemusí být   protože nemají žádný vliv na tuto situaci, ale pokud   odstraněny mohou způsobit potíže s použitím aplikací.

     

Rozhodně se pokusíme znovu navštívit naše dokumenty a uvidíme, jak to můžeme   chránit uživatele před touto potížemi. Děkuji za sdílení   Vaše zpětná vazba s námi podrobně.

    
odpověděl Andrew Beeman 23.04.2016 00:05
17

Vaše chybová zpráva obsahuje tento řádek:

subprocess installed post-installation script returned error exit status 1

Totoinstalled post-installation script však není uvedeno jménem. Po mnoha hodinách jsem zjistil, že jeho jméno je (v mém případě)/var/lib/dpkg/info/mysql-server-5.7.postinst.

Otevřete tento soubor ssudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst nebo preferovaným editorem.

V horní části změňte řádek 3 (nebo tak):set -e toset -x, uložte soubor. (volba-e je "exit on errors",-x znamená "explicitně zobrazit příkaz provedený", pravděpodobně)

Spustitsudo dpkg --configure -a --log /tmp/dpkg.log (volba --log je volitelná). Můžete také jednoduše spustitapt upgrade, pokud víte, že to bude jediný balík, který bude upgradován.

Nyní získáte podrobný výstup skriptumysql-server-5.7.postinst bash a můžete zjistit, co se děje.

V mém případě se neúspěšně pokoušel (re-) spouštětmysql_upgrade, ale to nebylo zapotřebí pro vlastní přizpůsobenou instalaci mysql. Byl jsem jistý Spustil jsem je ručně dříve, úspěšně a všechno bylo v pořádku.

Takže jsem si vybral řádek 321 (pro starší verze mysqld zkuste řádek 281),

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

a příkaz, který selhal předtím,sudo apt upgrade (spusťte jej znovu), úspěšně dokončil a dpkg odstranil chybový stav tohoto balíčku.

Nyní můžete nastavitset -x naset -e (uvedeno výše). A volitelně odkomentujte řádek mysql-upgrade.

Máte-li přesunut váš diskový oddíl mysql do nestandardního umístění, může být zapotřebí další práce. Přesunula jsem můj z/var/lib/mysql/data na jiný disk přes symlink. Pak byste museli dočasně odstranit symbolickou vazbu před manipulací skriptupostinst. Potom jej znovu vytvořte po spuštění upgradu balíčku.

Po dalším upgradu balíčku mysqld debian se může tento problém s skriptem/var/lib/dpkg/info/mysql-server-5.7.postinst zobrazit znovu.

    
odpověděl knb 01.07.2016 14:03
3

V mém případě jsem si všiml, že / var / run / mysqld / neexistuje a mysqld nemůže vytvořit soubor mysqld.sock.

Tyto příkazy vyřešily můj problém:

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

Nyní:

systemctl start mysql

A mysql funguje znovu:)

    
odpověděl Leonardo Catalinas 27.04.2016 10:14
3

V mém případě bych mohl problém vyřešit přidáním

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

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

Pro více informací se podívat na moje odpověď (podle ChristophS) při stackoverflow.

    
odpověděl ChristophS 29.04.2016 14:30
1

Žádná z odpovědí na této stránce nepracovala pro mě.

Nakonec jsem se vydal na stránku ke stažení Oracle , stáhnoutmysql-apt-config_0.8.8-1_all.deb a nainstalovat MySQL z Oracle repo:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
    
odpověděl ostrokach 25.09.2017 19:19
0

Měl jsem stejný problém. Snažil jsem se znovu nainstalovat mysql několikrát, ale neuspěl.

Přišel jsem na to, že pro mě byl problém, že už běží další mysqlový proces.

Podrobněji:

Poté, co jsem si pečlivě přečetl protokoly v/var/log/mysql/error.log a zjistil:

  

[CHYBA] Nelze spustit server: Bind na portu TCP / IP: adresa je již v   použijte

     

[CHYBA] Máte již na mysli jiný mysqld server:   3306?

Zdá se, že jiná aplikace již používá port.

Zkontroloval jsem to pomocí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=

A zabil jsem spuštěný processudo kill -15 14706

Pak jsem spustil mysql:/etc/init.d/mysql start

Konečně mysql pracuje pro mě! Doufám, že někomu pomůže.

    
odpověděl milkovsky 20.08.2016 22:02