可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
So... I'm setting up a new server and keep running into this problem.
When I try to login to the MySQL database with the root user, I get the "ERROR 1698 (28000): Access denied for user 'root'@'localhost'" error.
It doesn't matter if I connect through the terminal(SSH), through PHPMyAdmin or a MySQL Client, e.g. Navicat. They all fail.
I looked in the mysql.user table and get the following:
+------------------+-------------------+ | 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 | +------------------+-------------------+
As you can see, root should have access.
The Server is quite simple, as I have tried to troubleshoot this for a while now..
It's running Ubuntu 16.04.1 LTS with Apache, MySQL and PHP, so that it can host websites, and iRedMail 0.9.5-1, so that it can host mail.
Login in to the MySQL database works fine before I install iRedMail. I also tried, just installing iRedMail, but then root, also doesn't work...
If someone could tell me how I fix my MySQL login problem or how I install iRedMail, on top of an existing MySQL install. And yes I tried the Installation Tips and I can't find those variables in the config files.
Any help is much appreciated :)
回答1:
The reason is that recent Ubuntu installation (maybe others also), mysql is using by default the UNIX auth_socket plugin.
Basically means that: db_users using it, will be "auth" by the system user credentias. You can see if your root user is set up like this by doing the following:
$ 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 | +------------------+-----------------------+
As you can see in the query, the root user is using the auth_socket plugin
There are 2 ways to solve this:
- You can set the root user to use the
mysql_native_password plugin - You can create a new
db_user with you system_user (recommended)
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: (replace YOUR_SYSTEM_USER with the username you have)
$ 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
Remember that if you use option #2 you'll have to connect to mysql as your system username (mysql -u YOUR_SYSTEM_USER)
Note: On some systems (e.g., Debian stretch) 'auth_socket' plugin is called 'unix_socket', so the corresponding SQL command should be: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
回答2:
If you could login with sudo but not without sudo then do:
$ sudo mysql -u root -p [mysql] use mysql; [mysql] update user set plugin='' where User='root'; [mysql] flush privileges; [mysql] \q
Once done, open a new shell, and then:
$ mysql -u root -p without sudo will work just fine.
回答3:
You want to access MySQL with root user but you're not providing root's correct password.
If you need to set a new password for root, MySQL's site has great documentation on how to do it: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
I'll not show the process in here because MySql documentation on the above link it's clear and concise.
回答4:
I would suggest to remove the Mysql connection -
UPDATE-This is for Mysql version 5.5,if your version is different ,please change the first line accordingly
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
And Install Again But this time set a root password yourself. This will save a lot of effort.
sudo apt-get update sudo apt-get install mysql-server
回答5:
I was having this issue on an Debian 8 VM that I was interacting with through Putty on my Windows 10 desktop.
I tried the various suggestions on here but nothing quite worked and I am running MariaDB on the Debian host. In the end I found that I couldn't start the db server in safe mode but I didn't need to and the following commands actually worked for me i.e. allowing a newly created MySql user to log into the MySql/MariaDB server:
sudo service mysql stop sudo mysql # logs in automatically into MariaDB use mysql; update user set plugin='' where user='your_user_name'; flush privileges; exit; sudo service mysql restart # restarts the mysql service
If the above doesn't quite work for you, follow the steps outlined in zetacu's post above (zetacu) then follow my steps.
Now you should be able to use a remote terminal client and securely log into mysql using the command:
mysql -u your_user_name -p
*type in the password when prompted