$ ./mysqladmin -u root -p ' 编辑 '
输入密码:
mysqladmin:在“ localhost”处连接到服务器失败错误:
“对用户“ root” @“ localhost”的访问被拒绝(使用密码:是)
我怎样才能解决这个问题?
~/.my.cnf
文件,请尝试删除。
-p
选项,mysql将提示输入密码。
$ ./mysqladmin -u root -p ' 编辑 '
输入密码:
mysqladmin:在“ localhost”处连接到服务器失败错误:
“对用户“ root” @“ localhost”的访问被拒绝(使用密码:是)
我怎样才能解决这个问题?
~/.my.cnf
文件,请尝试删除。
-p
选项,mysql将提示输入密码。
Answers:
/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
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
set PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
,是在步骤5之后完成的。这是命令提示符输出的MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
sudo systemctl restart mariadb
我发现的所有解决方案都比必要的复杂得多,没有一个对我有用。这是解决我的问题的解决方案。无需重新启动mysqld或以特殊特权启动它。
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
通过单个查询,我们将auth_plugin更改为mysql_native_password并将root密码设置为root (可以在查询中随意更改)
现在您应该可以使用root登录了。更多信息可以在mysql文档中找到
(使用Ctrl + D或通过键入exit退出mysql控制台)
我尝试了许多步骤来纠正此问题。有许多解决此问题的方法的资源,很难从废话中滤除它的含义。我终于在这里找到了一个很好的解决方案:
步骤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用户身份连接到数据库,该用户不需要密码。
$ mysql -u root
您将立即看到数据库外壳提示。
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 start mysql
对于MariaDB,请使用:
$ sudo systemctl start mariadb
现在,您可以通过运行以下命令确认新密码已正确应用:
$ mysql -u root -p
现在,该命令将提示您输入新分配的密码。输入它,您应该可以按预期访问数据库提示。
结论
现在,您具有对还原的MySQL或MariaDB服务器的管理访问权限。确保您选择的新的超级用户密码是安全的,并将其放在安全的地方。
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
对我来说是如此的救命!
上面的答案都没有帮助我解决这个问题,所以这是我找到的解决方案。
相关部分:
在运行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
(可能适用于其他发行版,尤其是基于Debian的发行版)
运行以下命令以root
(不使用任何密码)的身份进行连接
sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
如果您不想--defaults-file
每次都添加为root
,则可以将其复制/etc/mysql/debian.cnf
到主目录中:
sudo cp /etc/mysql/debian.cnf ~/.my.cnf
然后:
sudo mysql
在尝试了所有其他答案之后,这终于对我有用
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;
我在这篇文章中找到了答案:https : //medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06
skip-grant-table
(my.conf或in mysql
命令)的其他答案无效。我可以使用服务帐户(askubuntu.com/a/120769/169836),但UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';
无法正常工作。只有在使用插件部分时,事情才起作用。谢谢〜
对于新的Linux用户,这可能是一项艰巨的任务。让我用mysql 8更新它(当前可用的最新版本是2018年9月12日的8.0.12)
而已。
在您的MySQL工作台中,您可以转到左侧的侧栏,在“管理”下选择“用户和特权”,在“用户帐户”下单击“ root”,在右侧部分单击“帐户限制”选项卡以增加最大查询,更新等,以及然后单击“管理角色”标签,然后选中相应的框以授予帐户访问权限。希望有帮助!
我这样做是为了在OSx中的MySQL初始设置中设置我的根密码。打开一个终端。
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
gh-对我没有任何帮助!我有一台运行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;
这将对所有根密码执行更新:即,“ localhost”,“ 127.0.0.1”和“ :: 1”
将来,当我使用RHEL8或您拥有的产品时,我会尽量记住检查/ bin / mysql_secure_installation并查看其工作方式,这些人是为此操作系统配置mariadb的。
如果您像我一样,但以上所有建议均失败,请继续卸载计算机上所有版本的mysql,使用此命令sudo find / -name "mysql"
以及rm -rf
所有带有mysql名称的文件或目录搜索所有剩余的mysql文件(您应跳过与之相关的文件编程语言库)。现在安装新版本的MySQL并享受。注意:您将丢失所有数据,因此请先权衡一下您的选择。
解: 放弃!
告诉我一下,我花了整整两天的时间试图使MySQL无法正常工作,始终卡有权限错误,但该错误中的任何内容均未解决。到了这样的地步,我想如果我继续下去,我会发疯的。
出于耐心等待,我仅使用450KB就发送了安装SQLite的命令,并且从单词go开始就可以正常工作。
如果您没有圣徒的耐心,请使用SQLite并节省大量时间,精力,痛苦和存储空间。