Jag håller på att sätta upp en ny server och stöter hela tiden på det här problemet.
När jag försöker logga in på MySQL-databasen med root-användaren får jag felet:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Det spelar ingen roll om jag ansluter via terminalen (SSH), via PHPMyAdmin eller en MySQL-klient, t.ex. Navicat. Alla misslyckas.
Jag tittade i tabellen mysql.user och får följande:
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
Som du kan se bör root ha tillgång.
Servern är ganska enkel, eftersom jag har försökt att felsöka detta ett tag nu...
Den kör Ubuntu 16.04.1 LTS med Apache, MySQL och PHP, så att den kan vara värd för webbplatser, och iRedMail 0.9.5-1, så att den kan vara värd för e-post.
Inloggning i MySQL-databasen fungerar bra innan jag installerar iRedMail. Jag försökte också, bara installera iRedMail, men sedan root, fungerar inte heller...
Om någon kan berätta för mig hur jag löser mitt MySQL-inloggningsproblem eller hur jag installerar iRedMail, ovanpå en befintlig MySQL-installation. Och ja, jag försökte med Installationstips och jag kan inte hitta dessa variabler i konfigurationsfilerna.
I vissa system, som Ubuntu, använder mysql som standard UNIX auth_socket plugin.
Det betyder i princip att: db_användare som använder den kommer att vara "auth" med systemets användarlegitimation. Du kan se om din root
-användare är inställd på detta sätt genom att göra följande:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
Som du kan se i frågan använder root
-användaren insticksprogrammet auth_socket
.
Det finns två sätt att lösa detta:
mysql_native_password
.db_user
med din system_user
(rekommenderas).Option 1:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Option 2: (ersätt YOUR_SYSTEM_USER med ditt användarnamn)
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Kom ihåg att om du använder alternativ 2 måste du ansluta till mysql som ditt systemanvändarnamn (mysql -u YOUR_SYSTEM_USER
).
Note: På vissa system (t.ex. Debian Stretch) heter insticksmodulen 'auth_socket' ['unix_socket'] (https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/), så motsvarande SQL-kommando bör vara: 'UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';`
Uppdatering:
från @andy's kommentar verkar det som om mysql 8.x.x uppdaterat/ersatt auth_socket
för caching_sha2_password
Jag har inte ett system med mysql 8.x.x för att testa detta, men stegen ovan borde hjälpa dig att förstå problemet. Här är svaret:
En förändring från och med MySQL 8.0.4 är att det nya standardpluginet för autentisering är 'caching_sha2_password'. Den nya 'YOUR_SYSTEM_USER' kommer att ha detta autentiseringstillägg och du kan logga in från bash-skalet nu med "mysql -u YOUR_SYSTEM_USER -p" och ange lösenordet för den här användaren på prompten. Du behöver inte göra steget "UPDATE user SET plugin". För uppdatering av insticksmodulen för standardauth 8.0.4, se https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/.
Jag föreslår att du tar bort Mysql-anslutningen -
UPDATE-Detta är för Mysql version 5.5, om din version är annorlunda kan du ändra den första raden i enlighet med detta.
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
Och installera igen, men den här gången ställer du in ett root-lösenord själv. Detta kommer att spara mycket arbete.
sudo apt-get update
sudo apt-get install mysql-server
Du vill komma åt MySQL med root-användaren, men du har inte angivit root's korrekta lösenord.
Om du behöver sätta ett nytt lösenord för root har MySQL's webbplats bra dokumentation om hur du gör det: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Jag visar inte processen här eftersom MySql-dokumentationen på ovanstående länk är tydlig och kortfattad.