$ ./ mysqladmin -u root -p ' 编辑'
输入密码:
mysqladmin:在' localhost'连接到服务器失败的错误:
'访问被拒绝用户&root;' @' localhost' (使用密码:是)'
我该如何解决这个问题?
答案 0 :(得分:345)
我发现的所有解决方案都比必要的复杂得多,而且没有一个对我有用。这是解决我的问题的解决方案。无需重新启动mysqld或以特殊权限启动它。
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
通过单个查询,我们将 auth_plugin 更改为 mysql_native_password 并将root密码设置为 root (随时更改)它在查询中)
现在您应该可以使用root登录了。更多信息可以在mysql documentation
中找到(使用 Ctrl + D 退出mysql控制台或输入退出)
答案 1 :(得分:213)
/etc/my.cnf
或/etc/mysql/my.cnf
。skip-grant-tables
[mysqld]
mysql -u root -p
mysql> flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
mysql -u root -p
答案 2 :(得分:29)
我尝试了很多步骤来纠正这个问题。对于这个问题有很多可能解决方案的来源很难从废话中过滤出来。我终于找到了一个很好的解决方案here:
第1步:确定数据库版本
$ mysql --version
您会在MySQL中看到这样的输出:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
或者像MariaDB这样的输出:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
记下您正在运行的数据库和版本,因为您稍后会使用它们。接下来,您需要停止数据库,以便手动访问它。
第2步:停止数据库服务器
要更改root密码,必须事先关闭数据库服务器。
你可以通过以下方式为MySQL做到这一点:
$ sudo systemctl stop mysql
对于MariaDB:
$ sudo systemctl stop mariadb
步骤3:在没有权限检查的情况下重新启动数据库服务器
如果在不加载有关用户权限的信息的情况下运行MySQL和MariaDB,它将允许您使用root权限访问数据库命令行而不提供密码。这将允许您在不知情的情况下访问数据库。
为此,您需要停止数据库加载存储用户权限信息的授权表。因为这有一点安全风险,所以您也应该跳过网络以防止其他客户端连接。
启动数据库而不加载授权表或启用网络:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的&符号将使此过程在后台运行,以便您可以继续使用终端。
现在您可以以root用户身份连接到数据库,root用户不应该要求输入密码。
$ mysql -u root
您将立即看到数据库shell提示符。
MySQL提示
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDB提示
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
现在您拥有root访问权限,您可以更改root密码。
第4步:更改根密码
mysql> FLUSH PRIVILEGES;
现在我们可以实际更改root密码。
对于 MySQL 5.7.6及更新版以及 MariaDB 10.1.20及更新版,请使用以下命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
对于 MySQL 5.7.5及更早版本以及 MariaDB 10.1.20及更早版本,请使用:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
请务必使用您选择的新密码替换new_password
。
注意:如果ALTER USER
命令不起作用,则通常表示问题更严重。但是,您可以尝试UPDATE ... SET
重置root密码。
[重要]这是修复我的特定问题的具体行:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
请记住在此之后重新加载授权表。
在任何一种情况下,您都应该看到确认命令已成功执行。
Query OK, 0 rows affected (0.00 sec)
密码已更改,因此您现在可以停止数据库服务器的手动实例并按原样重新启动它。
步骤5:正常重启数据库服务器
本教程进一步重新启动数据库,但我使用的唯一部分是:
对于MySQL,请使用: $ sudo systemctl启动mysql
对于MariaDB,请使用:
$ sudo systemctl start mariadb
现在,您可以通过运行以下方式确认已正确应用新密码:
$ mysql -u root -p
该命令现在应该提示新分配的密码。输入它,您应该按预期访问数据库提示符。
<强>结论强>
您现在可以恢复对MySQL或MariaDB服务器的管理访问权限。确保您选择的新root密码强大且安全,并将其保存在安全的地方。
答案 3 :(得分:21)
运行以下命令以root身份连接(没有任何密码)
sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
答案 4 :(得分:14)
以上答案均无助于我解决这个问题,所以here's the solution I found。
相关部分:
在运行MySQL 5.7(及更高版本)的Ubuntu系统中,默认情况下,MySQL根用户设置为使用auth_socket插件而不是使用密码进行身份验证。在许多情况下,这可以提高安全性和可用性,但是当您需要允许外部程序(例如phpMyAdmin)访问用户时,也会使事情复杂化。
为了使用密码以root用户身份连接到MySQL,您需要将其身份验证方法从auth_socket切换到mysql_native_password。为此,请从您的终端打开MySQL提示:
sudo mysql
接下来,通过以下命令检查每个MySQL用户帐户使用哪种身份验证方法:
SELECT user,authentication_string,plugin,host FROM mysql.user;
输出
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
在此示例中,您可以看到root用户实际上使用auth_socket插件进行了身份验证。要将根帐户配置为使用密码进行身份验证,请运行以下ALTER USER命令。确保将密码更改为您选择的强密码,并注意此命令将更改您在步骤2中设置的根密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后,运行FLUSH PRIVILEGES,告诉服务器重新加载授权表并使新的更改生效:
FLUSH PRIVILEGES;
再次检查每个用户使用的身份验证方法,以确认root不再使用auth_socket插件进行身份验证:
SELECT user,authentication_string,plugin,host FROM mysql.user;
输出
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
在此示例输出中,您可以看到MySQL根用户现在使用密码进行身份验证。在您自己的服务器上确认后,您可以退出MySQL Shell:
exit
答案 5 :(得分:13)
尝试了所有其他答案之后,这终于对我有用
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;
答案 6 :(得分:12)
对于新的Linux用户而言,这可能是一项艰巨的任务。让我用mysql 8更新它(当前可用的最新版本是2018年9月12日的8.0.12)
就是这样。
答案 7 :(得分:12)
根据我的经验,如果您不使用sudo运行,将无法正常工作。因此,请确保您的命令是;
sudo mysql -uroot -p
答案 8 :(得分:4)
在MySQL工作台中,您可以转到左侧边栏,在管理选择&#34;用户和权限&#34;下,单击用户帐户下的根,右侧部分单击选项卡&#34;帐户限制&#34 34;增加最大查询,更新等,然后单击选项卡&#34;管理角色&#34;并选中复选框以授予帐户访问权限。希望有所帮助!
答案 9 :(得分:2)
我这样做是为了在OSx中初始设置MySQL时设置我的root密码。打开一个终端。
sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'
关闭终端并打开一个新终端。 以下是在Linux中工作,以设置root密码。
sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables
(sudo mysqld_safe --skip-grant-tables:这在第一次对我不起作用。但是第二次尝试,出来就是成功。)
然后登录MySQL
mysql -u root
FLUSH PRIVILEGES;
现在更改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
重启MySQL:
sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start
答案 10 :(得分:1)
有时安装时会设置默认密码 - 如docs中所述。这可以通过以下命令确认。
sudo grep 'temporary password' /var/log/mysqld.log
答案 11 :(得分:0)
我试图在 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
答案 12 :(得分:0)
根据 Mariadb official documentation,在 MariaDB 10.4.3 及更高版本中,默认安装了 unix_socket
身份验证插件。
要禁用它并恢复到之前的 mysql_native_password
身份验证方法,请在 [mysqld]
文件的 my.cnf
部分添加以下行:
[mysqld]
unix_socket=OFF
然后运行:
mysql_install_db --auth-root-authentication-method=normal
然后开始mysqld
此命令将正常工作:
mysqladmin -u root password CHANGEME
答案 13 :(得分:0)
从https://downloads.mysql.com/archives/community/安装MySQL(8.x是最新的日期,但请确保该版本与Mac OS版本兼容)
在安装过程中提供root
的密码(让<root-password>
为密码)(不要忘记记住密码!)
选择使用旧密码加密选项(这是我曾经使用过的并且没有尝试过使用使用强密码加密选项)
搜索并打开 MySQL.prefPane (使用搜索工具)
/private/etc/my.cnf
从终端打开一个名称为/etc/my.cnf
(vi /etc/my.cnf
)的新文件或现有文件,添加以下内容:
[mysqld]
skip-grant-tables
按如下所示重新启动mysqld:
ps aux | grep mysql
kill -9 <pid1> <pid2> ...
(所有与mysql相关的进程的抓取pid) mysqld
自动重新启动
通过从终端运行以下命令来验证是否已设置该选项:
ps aux | grep mysql
> mysql/bin/mysqld ... --defaults-file=/private/etc/my.cnf ... (output)
运行以下命令进行连接(让mysql-<version>-macos<version>-x86_64
为安装mysql的文件夹。要获取实际文件夹,请运行ls /usr/local/
并复制文件夹名称):
/usr/local/mysql-<version>-macos<version>-x86_64/bin/mysql -uroot -p<root-password>
答案 14 :(得分:0)
答案 15 :(得分:0)
U-对我没有任何帮助!我有一台运行mariadb 5.5.64的CentOS 7.4计算机。
在从yum安装mariadb之后,我要做的就是这个
# systemctl restart mariadb
# mysql_secure_installation
mysql_secure_installation
将带您完成多个步骤,包括“设置root密码?[Y / n]”。只需说“ y”并输入密码即可。根据需要回答其他问题。
然后您可以使用
输入密码# mysql -u root -p
它将生存
# systemctl restart mariadb
密钥
然后,我检查了/bin/mysql_secure_installation
源代码,以了解它如何神奇地更改了root密码,并且这里没有其他答案。导入位是:
do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"
...它说SET Password=...
,而不是SET authentication_string = PASSWORD...
。因此,此版本(5.5.64)的正确过程是:
login using mysql -u root -p , using the password you already set.
Or, stop the database and start it with:
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
。使用新密码。
如果需要,可以一次设置所有root密码。我认为这是明智的:
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;
这将对所有root密码执行更新:即“ localhost”,“ 127.0.0.1”和“ :: 1”的密码
将来,当我使用RHEL8或有什么功能时,我会尽力记住检查/ bin / mysql_secure_installation并查看其工作方式,这些人是为此操作系统配置mariadb的。
>答案 16 :(得分:0)
好的,我知道这是一个老话题,但是如果您像我一样通过Google访问此页面,但上述解决方案均无效,那么结果就是我的错误是100%愚蠢。 我没有连接到服务器。连接后,一切运行顺利。
如果有助于了解我的设置,我正在使用Sequel Pro,并尝试使用NPM软件包mysql与Node连接。我认为我不需要真正连接(除了运行Sequel Pro),因为我已经在我的应用程序中进行了连接。
答案 17 :(得分:0)
如果您没有足够的权限,可能会发生这种情况。
键入su
,输入root密码,然后重试。
答案 18 :(得分:0)
如果您和我一样,但以上所有建议均失败,请继续卸载计算机上所有版本的mysql,并使用此命令sudo find / -name "mysql"
和rm -rf
搜索每个文件或目录中所有剩余的mysql文件。并附有mysql名称(您应跳过与编程语言库相关的文件)。现在安装MySQL的新版本并享受。注意:您将丢失所有数据,因此请先权衡一下选择。
答案 19 :(得分:0)
在我的Debian 10版本中,错误
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
被(GOOD WAY)解决了
sudo mysql -u root -p mysql
坏路:
mysql -u root -p mysql
答案 20 :(得分:-1)
“-p”参数不要求参数名称和值之间有空格。
代替
$ ./mysqladmin -u root -p 'redacted'
使用
$ ./mysqladmin -u root -p'redacted'
或者只是
$ ./mysqladmin -u root -p
这将提示您输入密码。
答案 21 :(得分:-3)
解决方案:放弃!
告诉我,我花了整整两天的时间试图使MySQL无法正常工作,始终停留在权限错误上,这些错误都没有被该线程的答案解决。到了这样的地步,我想如果我继续下去,我会发疯的。
出于耐心等待,我仅使用450KB发送了安装SQLite的命令,并且从单词go开始就可以正常工作。
如果您没有圣徒的耐心,请使用SQLite并节省大量时间,精力,痛苦和存储空间。.
答案 22 :(得分:-4)
'访问被拒绝用户'root'@'localhost'(使用密码:YES)' 只有在最近更改了密码但没有对phpmyadmin的config.inc.php文件进行更改时才会发生此错误。
所以我通过将密码更改为/XAMPP/xamppfiles/phpmyadmin/config.inc.php文件解决了我的问题。