考虑:
./mysqladmin -u root -p** '_redacted_'
输出(包括输入密码):
输入密码:mysqladmin:连接到“localhost”的服务器失败错误:“用户'root'@'localhost'的访问被拒绝(使用密码:YES)'
我怎样才能解决这个问题?
~/.my.cnf
文件,请尝试删除。
-p
选项,mysql 将提示输入密码。
我发现的所有解决方案都比必要的复杂得多,而且没有一个对我有用。这是解决我的问题的解决方案。无需重新启动 mysqld 或以特殊权限启动它。
sudo mysql
-- for MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
-- for MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');
通过单个查询,我们将 auth_plugin 更改为 mysql_native_password 并将 root 密码设置为 root(请随时在查询中更改)。
现在您应该可以使用 root 登录了。更多信息可以在 MySQL documentation 或 MariaDB documentation 中找到。
(使用 Ctrl + D 或键入 exit 退出 MySQL 控制台。)
根据您的发行版,打开并编辑 /etc/my.cnf 或 /etc/mysql/my.cnf。在 [mysqld] 下添加 skip-grant-tables Restart MySQL 现在应该可以使用以下命令登录 MySQL mysql -u root -p Run mysql> flushprivileges;通过 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword' 设置新密码;返回 /etc/my.cnf 并删除/注释 skip-grant-tables 重新启动 MySQL 现在您将能够使用新密码登录 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
以前的答案都没有帮助我解决这个问题,所以here's the solution I found。
相关部分:
在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中,root MySQL 用户默认设置为使用 auth_socket 插件进行身份验证,而不是使用密码。这在许多情况下允许更高的安全性和可用性,但是当您需要允许外部程序(例如,phpMyAdmin)访问用户时,它也会使事情变得复杂。为了使用密码以 root 身份连接到 MySQL,您需要将其身份验证方法从 auth_socket 切换到 mysql_native_password。为此,请从终端打开 MySQL 提示符: sudo mysql 接下来,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:SELECT user,authentication_string,plugin,host FROM mysql.user;输出+------------------+------------------ --------------+-----------+------------ + |用户 |身份验证字符串 |插件 |主持人 | +------------------+------------------ -------------+------------------------+------------+ |根 | | auth_socket |本地主机 | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |本地主机 | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |本地主机 | | debian 系统维护 | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password |本地主机 | +------------------+------------------ -------------+------------------------+------------+ 4 行 in set (0.00 sec) 在本例中,您可以看到 root 用户实际上使用 auth_socket 插件进行身份验证。要将 root 帐户配置为使用密码进行身份验证,请运行以下 ALTER USER 命令。请务必将密码更改为您选择的强密码,并注意此命令将更改您在步骤 2 中设置的 root 密码: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;输出+------------------+------------------ --------------+-----------+------------ + |用户 |身份验证字符串 |插件 |主持人 | +------------------+------------------ -------------+------------------------+------------+ |根 | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password |本地主机 | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |本地主机 | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |本地主机 | | debian 系统维护 | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password |本地主机 | +------------------+------------------ -------------+------------------------+------------+ 4 行 in set (0.00 sec) 您可以在此示例输出中看到 root MySQL 用户现在使用密码进行身份验证。一旦你在你自己的服务器上确认了这一点,你就可以退出 MySQL shell:exit
ubuntu 20.04
上的 mysql Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
。干杯
unix_socket
。
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 'BY 'MYPERSONALPASSWORD'' at line 1
我刚刚粘贴了这一行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MYPERSONALPASSWORD';
我尝试了许多步骤来纠正这个问题。这个问题的可能解决方案有很多来源,很难从胡说八道中过滤掉意义。我终于找到了一个好的解决方案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
第三步:不做权限检查重启数据库服务器
如果您在不加载有关用户权限的信息的情况下运行 MySQL 和 MariaDB,它将允许您以 root 权限访问数据库命令行,而无需提供密码。这将允许您在不知情的情况下访问数据库。
为此,您需要停止数据库加载存储用户权限信息的授权表。因为这有点安全风险,您还应该跳过网络以防止其他客户端连接。
在不加载授权表或启用网络的情况下启动数据库:
sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的 & 号将使此进程在后台运行,因此您可以继续使用终端。
现在您可以以 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 密码。
第四步:修改root密码
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)
密码已更改,因此您现在可以停止数据库服务器的手动实例并像以前一样重新启动它。
第五步:正常重启数据库服务器
本教程进一步介绍了重新启动数据库的步骤,但我使用的唯一部分是:
对于 MySQL,使用:
sudo systemctl start mysql
对于 MariaDB,使用:
sudo systemctl start mariadb
现在,您可以通过运行来确认新密码已正确应用:
mysql -u root -p
该命令现在应该提示输入新分配的密码。输入它,您应该可以按预期访问数据库提示。
结论
您现在拥有对恢复的 MySQL 或 MariaDB 服务器的管理访问权限。确保您选择的新 root 密码安全可靠,并将其保存在安全的地方。
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
对我来说真是救命稻草!
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
mysqld_safe
,因为我似乎在尝试杀死它然后获取mysql 服务再次正常运行(尽管完全重启 Linux 似乎可以解决问题)。
-bash: mysqld_safe: command not found
AlmaLinux release 8.5
在尝试了所有其他答案之后,这最终对我有用:
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;
我在博文 Solved: Error “Access denied for user ‘root’@’localhost’” of MySQL — codementor.tech(中)中找到了答案。
skip-grant-table
(my.conf 或 mysql
命令)的其他答案无效。我可以使用服务帐户 (askubuntu.com/a/120769/169836) 进入,但 UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';
不起作用。只有在使用插件部分时才起作用。谢谢~
对于 Ubuntu/Debian 用户
(它可能适用于其他发行版,尤其是基于 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 运行,它将无法工作。因此,请确保您的命令是;
sudo mysql -uroot -p
对于新的 Linux 用户来说,这可能是一项艰巨的任务。让我用 MySQL 8 更新它(现在可用的最新版本是 8.0.12,截至 2018 年 9 月 12 日)
在“/etc/mysql/mysql.conf.d/”打开“mysqld.cnf”配置文件。将 skip-grant-tables 添加到 [mysql] 文本的下一行并保存。重启 MySQL 服务为“sudo service mysql restart”。现在您的 MySQL 无需任何身份验证。使用 mysql -u root -p 连接到 MySQL 客户端(也称为 mysql-shell)。目前还没有需要输入的密码。运行 SQL 命令刷新权限;现在将密码重置为 ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPassword';现在让我们回到正常状态;从“mysqld.cnf”中删除该行“skip-grant-tables”并重新启动服务。
而已。
mysql -u root -p
仍然要求输入密码 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
就我而言,在 Debian 10 下,错误
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
被(好方法)解决了
sudo mysql -u root -p mysql
坏方法:
mysql -u root -p mysql
我这样做是为了在 OS X 中初始设置 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
在您的MySQL Workbench中,您可以转到左侧边栏,在管理下选择“用户和权限”,单击用户帐户下的根目录,在右侧部分中单击“帐户限制”选项卡以增加最大查询、更新等,然后单击选项卡“管理角色”并选中复选框以授予帐户访问权限。
呃 - 对我没有任何帮助!我有一台运行 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) 的正确程序是:
使用您已设置的密码,使用 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
。使用您的新密码。
如果需要,您可以一次设置所有 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”
以后我去RHEL 8 或者你有什么的时候,我会尽量记住检查/bin/mysql_secure_installation,看看那些人是怎么做的,是谁配置的此操作系统的 MariaDB。
使用 sudo 更改您的密码:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'insert_password';
来源:Phoenixnap - Access denied for user root localhost
修复 macOS
从 https://downloads.mysql.com/archives/community/ 安装 MySQL(8.x 是最新的,但请确保该版本与 macOS 版本兼容)为 root 提供密码(让
我的站在这里:
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
如果您像我一样,并且之前答案中的所有信息都失败了,请继续卸载您机器上所有版本的 MySQL,使用命令 sudo find / -name "mysql"
和 rm -rf
每个文件搜索所有剩余的 MySQL 文件或附加了“mysql”名称的目录(您应该跳过与编程语言库相关的文件)。
现在安装新版本的 MySQL 并享受。注意:您将丢失所有数据,因此请先权衡您的选择。
有时在安装时会设置默认密码 - 作为 mentioned in the documentation。这可以通过以下命令来确认。
sudo grep 'temporary password' /var/log/mysqld.log
如果您没有足够的权限,可能会发生这种情况。
键入 su
,输入 root 密码,然后重试。
窗户:
cd \Ampps\mysql\bin :
mysql.exe -u root -pmysql
在 mysql 启动后(你可以看到类似 mysql> 的 shell)使用这个查询:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
再次尝试使用 root 访问
如果您像我一样通过 Google 访问此页面,而以前的解决方案都不起作用,那么结果证明是我 100% 愚蠢的错误。我没有连接到服务器。一旦连接,一切都一帆风顺。
如果它有助于了解我的设置,我正在使用 Sequel Pro 并尝试使用 NPM 包 mysql 与 Node 连接到它。我认为我不需要实际连接(除了运行 Sequel Pro),因为我已经在我的应用程序中这样做了。
https://i.stack.imgur.com/e8eQq.png
我在设置 mysql-8 zip
版本时遇到了同样的错误。最后,切换到无缝运行的 installer
版本。在安装过程中,会提示您设置 root
密码。一旦设置,它肯定会工作。
https://i.stack.imgur.com/gT1Jt.png
根据 MariaDB official documentation,在 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
如需更多信息,请参阅 Configuring mysql_install_db to Revert to the Previous Authentication Method。
我试图利用 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
在尝试了以下答案后:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');
和类似的答案,我的终端仍然向我抛出以下错误:
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在附近使用的正确语法...
所以在网上研究之后,这行解决了我的问题,让我更改root用户密码:
sudo mysqladmin --user=root password "[your password]"
要检查的一件事是来自主机的过滤器。默认情况下它可能是“localhost”。您是否尝试从远程客户端连接?将此更改为“%”。
https://i.stack.imgur.com/bXtV5.png
“-p”参数不希望参数名称和值之间有空格。
代替
./mysqladmin -u root -p 'redacted'
利用
./mysqladmin -u root -p'redacted'
要不就
./mysqladmin -u root -p
这将提示您输入密码。
解决方法:放弃!
听我说。我花了大约整整两天的时间试图让 MySQL 工作无济于事,总是遇到权限错误,这些问题的答案都没有解决。到了这样的地步,我想如果我继续下去,我会发疯的。
出于让它工作的耐心,我发送了安装 SQLite 的命令,只使用了 450 KB,它从一开始就完美运行。
如果您没有圣人的耐心,请使用 SQLite 并为自己节省大量时间、精力、痛苦和存储空间..!
不定期副业成功案例分享