考虑:

./mysqladmin -u root -p** '_redacted_'  

输出(包括输入密码):

输入密码: Mysqladmin: connect to server at 'localhost' failed错误 '用户'root'@'localhost'(使用密码:YES)拒绝访问'

我该如何解决这个问题?


当前回答

对于Ubuntu/Debian用户

(它可能适用于其他发行版,尤其是基于debian的发行版。)

运行以下命令以root身份连接(不需要任何密码)

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

如果你不想每次以根用户连接时都添加——defaults-file,你可以将/etc/mysql/debian.cnf复制到你的主目录:

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

然后:

sudo mysql

其他回答

啊,对我来说什么都没用!我有一台运行MariaDB 5.5.64的CentOS 7.4机器。

我必须这么做,在YUM安装MariaDB之后;

systemctl restart mariadb
mysql_secure_installation

mysql_secure_installation将带您完成许多步骤,包括“设置根密码?”[Y / n]”。只要输入“y”并输入密码。随你怎么回答其他问题。

然后你可以用你的密码,使用

mysql -u root -p

它会存活下来

systemctl restart mariadb

的关键

然后,我检查了/bin/mysql_secure_installation源代码,看看它是如何神奇地改变根密码的,而这里的其他答案都不能。导入位是:

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"

...上面写着SET Password=…而不是SET authentication_string = PASSWORD....因此,本版本(5.5.64)的正确步骤是:

使用mysql -u root -p登录,使用您已经设置的密码。

或者,停止数据库并启动它:

mysql_safe --skip-grant-tables --skip-networking &

从mysql>提示符:

use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;

停止运行mysqld_safe。重启MariaDB。以root用户登录:mysql -u -p。请使用新密码。

如果您愿意,您可以一次设置所有的根密码。我认为这是明智的:

mysql -u root -p

(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;

这将执行更新所有的根密码:即,“localhost”,“127.0.0.1”,和“::1”

将来,当我去RHEL 8或其他什么时候,我会试着记得检查/bin/mysql_secure_installation,看看那些家伙是怎么做的,谁是为这个操作系统配置MariaDB的人。

在尝试了所有其他答案后,这是最后对我有用的:

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

我发现答案在博客文章解决:错误“访问拒绝用户' root ' @ ' localhost '”的MySQL - codementor。科技(媒介)。

我在这里的位置:

UBUNTU 21.04 PHP 5.6.40-57 MYSQL 5.7.37

我们来配置一下

nano /etc/mysql/mysql.conf.d/mysqld.cnf

在底部,写下这个

skip-grant-tables

重新加载它

service mysql restart

根据MariaDB官方文档,在MariaDB 10.4.3及以后版本中,默认安装了unix_socket身份验证插件。

为了禁用它,并恢复到前面的mysql_native_password认证方法,在my.cnf文件的[mysqld]部分中添加下面的行:

[mysqld]
unix_socket=OFF

然后运行:

mysql_install_db --auth-root-authentication-method=normal

然后启动mysqld

这个命令可以正常工作:

mysqladmin -u root password CHANGEME

有关更多信息,请参见配置mysql_install_db恢复到以前的身份验证方法。

我试图利用Mac上的Docker桌面来运行5.7.35和这个Docker -compose。Yml配置允许它工作:

特别是这一行…

命令:default-authentication-plugin = mysql_native_password

...这招奏效了

version: '3.3'
services:
  mysql_db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'your_password'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - ~/your/volume/path:/var/lib/mysql