Fórum Root.cz
Hlavní témata => Server => Téma založeno: martyd420 30. 03. 2020, 10:13:12
-
Ahoj,
prosím o pomoc s mysql :)
Měl jsem verzi 5.6, která mi fungovala (kubuntu 19.04)
Chtěl sjem kompletně přeinstalovat na 8.0, takže jsem udělal na všem mysql* purge, pak autoremove, autoclean a odstranil jsem /etc/mysql a /var/lib/mysql
Pak apt install mysql-server, jenže tady už to nebaběhlo.
Vygooglil jsem mysqld --initialize --user=mysql, vytvořil jsem tedy zpět adresáře, chown mysql:mysql. Po tomto začalo mysqld hlásit
Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.
ok, tak jsem zkusil
mkdir /var/run/mysqld
chown mysql:mysql /var/run/mysqld
chmod 755 /var/run/mysqld
a hurá, spustilo se to.
problém je v tom, že to jde spustit pouze tímto postupem, tzn
mkdir /var/run/mysqld
chown mysql:mysql /var/run/mysqld
chmod 755 /var/run/mysqld
mysqld
pokud dám service mysql start, tak adresář /var/run/mysqld zmizí a opakuje se chyba s tím, že nejde vytvořit mysqld.sock.lock
ta složka by se dle init.d/mysql měla vytvářet pomocí
test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld
což ale zahlásí
install: cannot change owner and permissions of „/var/run/mysqld“: Adresář nebo soubor neexistuje
Zkušel jsem do init.d scriptu přidat vytvoření té složky mkdir && chown && chmod, ale taky se nevytvoří.
Už nějak nevím co s tím..
-
Zdravím.
Podrobnější informace, proč se mysql nespouští bývají ve /var/log/mysql/*.log
Tam nic podrobnějšího není?
A opravdu tam máte init.d, nebo je tam systemd?
--
Mareg
-
je tam systemd, takže ty scripty, které si to instaluje do /etc/init.d jsou k ničemu?
/var/log/mysql obsahuje jen prázdný error.log
Našel jsem tedy /usr/lib/systemd/system/mysql.service ve kterém je:
# MySQL systemd service file
[Unit]
Description=MySQL Community Server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
User=mysql
Group=mysql
PIDFile=/run/mysql/mysqld.pid
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/sbin/mysqld
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=777
LimitNOFILE=10000
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
v /usr/share/mysql/mysql-systemd-start je kontrola existence datadir a my.cnf, ale nezdá se, že by jakákoli úprava mysql.service, nebo mysql-systemd-start měla vliv na to, co se děje.. Snad se to tím spouští, zkusil jsem si do mysql-systemd-start dát echo "1" > /tmp/mysql.test, ale nezapsalo se nic..
nemám tam žádné data, klidně bych to přeinstaloval, ale pokaždé to skončí stejně...
-
Měl jsme to tu rozepsané, ale nějak se to ztratilo :-(.
Tak stručně.
Zkuste
systemct start mysql
systemct status -l myslq
ve /var/log/mysql stále nic není?
--
Mareg
-
martyd@system-device:/etc/apparmor.d/disable$ sudo systemctl start mysql
Job for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.
sudo journalctl -xe
bře 30 12:09:16 system-device systemd[1]: mysql.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The unit mysql.service has entered the 'failed' state with result 'exit-code'.
bře 30 12:09:16 system-device systemd[1]: Failed to start MySQL Community Server.
-- Subject: A start job for unit mysql.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- A start job for unit mysql.service has finished with a failure.
--
-- The job identifier is 12595 and the job result is failed.
martyd@system-device:/etc/apparmor.d/disable$ sudo systemctl status -l mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2020-03-30 12:12:02 CEST; 643ms ago
Process: 21330 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=1/FAILURE)
bře 30 12:12:02 system-device systemd[1]: mysql.service: Service RestartSec=100ms expired, scheduling restart.
bře 30 12:12:02 system-device systemd[1]: mysql.service: Scheduled restart job, restart counter is at 5.
bře 30 12:12:02 system-device systemd[1]: Stopped MySQL Community Server.
bře 30 12:12:02 system-device systemd[1]: mysql.service: Failed with result 'exit-code'.
bře 30 12:12:02 system-device systemd[1]: Failed to start MySQL Community Server.
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=1/FAILURE)
je pravděpodobně po řádku: mysqld --verbose --help --innodb-read-only 2>&1 > /dev/null
error.log je prázdný.. :(
-
nejde mi to editovat.. že tam je ta cesta k apparmor, to jsem jen zkoušel dle podobného problému co jsem dohledal zakázat pravidla pro mysqld, ale beze změny..
-
Apparmor hlídá i přístup k dalším souborům/adresářům.
Neměnil jste třeba i "datadir"?
-
Neměnil, nefunkční stav nastal ihned po instalaci mysql-server s default nastavením. (a s každým reinstlallem i se smazáním/etc/mysql a /var/lib/mysql se to opakuje.. )
Předchozí verzi jsem taky provozoval bez jakýchkoli změn v nastavení.
-
Dál bohužel už jen hledání přes google a zkoušení.
Osobně bych se snažil získat oprávnění k editaci toho souboru
/usr/share/mysql/mysql-systemd-start
a zjistit co přesně se mu nepodaří.
A když uděláte
cd /var/log
grep -rn mysql-systemd-start *
tak se také nepodaří nic najít?
--
Mareg
-
A když uděláte
cd /var/log
grep -rn mysql-systemd-start *
tak se také nepodaří nic najít?
--
Mareg
Je tam
syslog:8060:Mar 30 11:11:16 system-device mysql-systemd-start[16763]: tutoje
což je echo "tutoje" :) co jsem si tam na test připsal. Pak za spuštěním mysqld mám echo "tutouzneni" a tam už to nedojde :)
tedy by to mělo znamenat, že se ukončí ten init script ještě před spuštěním mysqld a k tomu je jediná příležitost v ověření existence my.cfg a datadiru. Když podmínky zkouším samostatně, tak ale projdou ok...
Zatím se smířím s tím ručním spouštěním v @reboot cronu, ale díky za snahu pomoct :)
-
zkus příkaz:
mysql_install_db --user=mysql --datadir=/var/lib/mysql
to znovu vytvoří složky a čistou databázi
-
že se ukončí ten init script
..ale ty tam žádný init script nemáš. V recentních ubuntu už je systemd.
Hoď sem ještě výstup tohodle:
mysqld --verbose --help --innodb-read-only
to je ten command co ti failuje v tom execPre
EDIT: dej to spíš do nějakého gistu, pastebinu, nebo tak někam.
-
..ale ty tam žádný init script nemáš. V recentních ubuntu už je systemd.
To už jsme řešili výše, tím init scriptem nemyslím init systém, ale prostě ten inicializační script, který připraví spuštění mysqld
Hoď sem ještě výstup tohodle:
mysqld --verbose --help --innodb-read-only
Stejné, jako jsem popisoval výše.
Pokud připravím /var/run/mysqld, tak se to bez chyb spustí.
Pokud to ručně nepřipravím, skončí to chybou s nemožností vytvořit mysqld.sock.lock
Spuštění přes systemctl pak odstraní složku /var/run/mysqld a skončí opět chybou nelze vytvořit mysqld.sock.lock.
Nicméně aktuálně mám mysql běžící, funkční.
Nebyla to cílená oprava, spíš výstřel naslepo.
1) pravděpodobně to souviselo i s tím apparmor. Po přesunutí toho mysql profilu do disabled a downgradu mysql se to přes systemctl spustilo, zapsalo něco jako "For more details, see /etc/mysql/FROZEN" a ukončilo. V tom souboru pak bylo info, že mám novější datové soubory, než verze mysql. + rozbité závislosti - nešlo to odinstalovat (což jsem udělal asi já celodenními pokusy..)
Nakonec tedy
sudo dpkg --configure -a
sudo apt remove mysql-server
sudo apt remove mysql-server-8.0
sudo apt purge mysql-*
sudo apt remove mysql-*
sudo apt autoremove
sudo apt autoclean
sudo apt install mysql-server mysql-client -y
sudo systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-03-30 17:28:54 CEST; 6min ago
Main PID: 28031 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 4915)
Memory: 381.3M
CGroup: /system.slice/mysql.service
└─28031 /usr/sbin/mysqld
Asi tedy erupce na slunci...
sudo apt install mysql-server mysql-client -y
ráno rozbilo systém a večer nainstalovalo mysql :)
-
ještě dodám, ač tomu nerozumím,
sudo apt purge mysql-*, ani sudo apt remove mysql-*
odstranilo spoustu věcí, ale nezasáhlo balíčky mysql-server-8.0 a mysql-server, proto je tam odinstalovávám samostatně..