Quindi questo è un problema molto complicato.
Perché da quello che hai descritto (molto dettagliato), ci sono ancora molte possibili cause di questo problema.
DOMANDA: Quindi ecco alcune domande riassunte per la tua (dalla mia esperienza):
- Il tuo
MySQL not running
è successo durante il tuo primo avvio (xampp start / xampp startmysql)? - Dopo aver installato xampp in Linux, hai personalizzato la configurazione di MySQL (predefinita etc/my.cnf)?
- SE PERSONALIZZATO Hai personalizzato la directory del database in una posizione diversa (predefinita /opt/lampp/var/mysql)?
- SE NON PERSONALIZZATO Come hai detto hai accesso alla riga di comando di mysql, hai provato a SQL il tuo database, o se il database non era nemmeno accessibile (il che significa che il server mysql, chiamato mysqld, non si è avviato correttamente)?
- Hai personalmente inizializzato/installato un database mysql (bin predefinito/mysql_install_db)?Ok, queste domande di cui sopra dovrebbero fornire un'idea di base per la risoluzione dei problemi.
SOLUZIONE:
Quindi questo dovrebbe essere il problema più semplice e potrebbe aiutarci a identificare meglio le cause dell'errore.
Controlla
a) nella configurazione MySQL (my.cnf) qual è il tuo utente in esecuzione? questo dovrebbe essere un parametro in [mysqld] user=... (mysql predefinito), assumiamo che la nostra configurazione sia impostata su mysql
b) disponi di un account per eseguire l'utente prova il comando terminale id -u mysql
, se restituisce un numero ID, allora l'account esiste, altrimenti dovrebbe dirti no such user
. Devi avere questo utente per eseguire il server mysql e scrivere il registro degli errori (guardando la seconda parte del record del tuo terminale, il tuo account dovrebbe esistere)
c) controlla la posizione del registro degli errori di configurazione di MySQL (my.cnf), dovrebbe essere in [mysqld] come parametro log-error=... se questo non è scritto, aggiungilo (deve essere in [mysqld]).
d) controlla ogni directory del percorso completo del tuo log che (ad esempio /var/log/mysql/error.log)
- /var dovrebbe avere
read
eexecute
autorizzazione per l'utente mysql (che è almeno ******r-x) passa crea file (esegui) autorizzazione - /var/log dovrebbe avere
read
eexecute
autorizzazione per l'utente mysql (che è almeno ******r-x) passa crea file (esegui) autorizzazione - /var/log/mysql dovrebbe avere
read
,write
eexecute
autorità per l'utente mysql (che è ******rwx) crea e scrivi un'autorizzazione file
Affinché il tuo file error.log possa essere creato qui, se ancora non funziona, prova a crearlo manualmente con il proprietario come mysql, il gruppo come mysql e l'autorità di 660.
ci sono diversi approcci per verificarlo
a) usa mysql.server (bin predefinito/mysql.server) per fare mysql.server status
comando. Se il tuo server MySQL è in esecuzione, dovrebbe mostrare SUCCESS! MariaDB è in esecuzione.
b) utilizzare top
comando per verificare se il servizio è in esecuzione o utilizzare top | grep "mysqld"
. mysqld
e mysqld_safe
dovrebbe in esso.
c) accedi alla riga di comando di mysql proprio come hai fatto nel record di terminale 4 (questo funziona in parte) e fai il comando SHOW DATABASES;
anche questo dovrebbe funzionare.
L'ho fatto
[[email protected] ~]# /opt/lampp/xampp status
Version: XAMPP for Linux 7.4.1
Apache is running.
MySQL is not running.
ProFTPD is running.
[[email protected] ~]# /opt/lampp/bin/mysql.server status
SUCCESS! MariaDB running (xxxx)
Quindi questo mostra che xampp sta recuperando lo stato del servizio in modo errato (come un altro post Il database MySQL viene avviato su Terminale ma non su XAMPP )
Potrei tracciare in dettaglio come funziona xampp, ma in /opt/lampp/xampp
script, ho trovato /opt/lampp/share/xampp/status
e /opt/lampp/share/statusraw
Vai oltre (entrambi /opt/lampp/share/xampp/status
e /opt/lampp/share/statusraw
file),
/opt/lampp/var/mysql/` /bin/hostname`.pid mysqld
Poiché il mio database è stato personalizzato in base alla directory localizzata, ciò significa che il file pid non sarà in /opt/lampp/var/mysql
, e questo stato tornerà sempre in modo errato.
Quindi, modificarlo nella mia posizione pid del database ha risolto il problema.