考虑:
./mysqladmin -u root -p** '_redacted_'
输出(包括输入密码):
输入密码: Mysqladmin: connect to server at 'localhost' failed错误 '用户'root'@'localhost'(使用密码:YES)拒绝访问'
我该如何解决这个问题?
考虑:
./mysqladmin -u root -p** '_redacted_'
输出(包括输入密码):
输入密码: Mysqladmin: connect to server at 'localhost' failed错误 '用户'root'@'localhost'(使用密码:YES)拒绝访问'
我该如何解决这个问题?
当前回答
在Arch Linux上
软件包:mysql 8.0.29-1
对我有用的是:
Edit my.cnf file, normally can be found at /etc/mysql/my.cnf and append this skip-grant-tables at the bottom/end of the file. Restart mysql service by invoking sudo systemctl restart mysqld Ensuring mysql service has started properly by invoking sudo systemctl status mysqld Login to mysql using 'root' by invoking mysql -u root -p Flush privileges by invoking flush privileges; Create new user by CREATE USER 'root'@'localhost' IDENTIFIED BY 'rootpassword'; (If you plan to use this db with PHP), you should instead use this CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword'; Check whether your changes have reflected in db by invoking the following in sequence: use mysql; SELECT User, password_last_changed FROM user; Exit mysql console and comment/remove skip-grant-tables by editing my.cnf file (Refer to step 1 for the location) Restart the mysql service (Refer to step 2 and step 3)
就这些。
其他回答
打开并编辑/etc/my.cnf或/etc/mysql/my.cnf,具体取决于你的发行版。 在[mysqld]下添加skip-grant-tables 重新启动MySQL 你现在应该可以使用下面的命令MySQL -u root -p登录MySQL 运行mysql> flush特权; 设置新密码ALTER USER 'root'@'localhost' IDENTIFIED by 'NewPassword' 回到/etc/my.cnf,删除/comment skip-grant-tables 重新启动MySQL 现在你可以用新密码mysql -u root -p登录了
解决方法:放弃!
听我说完。我花了整整两天的时间试图让MySQL工作,但没有任何效果,总是被权限错误卡住,没有一个是通过这个问题的答案解决的。我想,如果我继续下去,我会疯掉的。
由于没有耐心,我发送了安装SQLite的命令,只使用了450 KB,它从一开始就工作得很好。
如果你没有圣人的耐心,那就使用SQLite吧,这样可以为你节省大量的时间、精力、痛苦和存储空间。
对于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
我尝试了很多步骤来纠正这个问题。这个问题有很多可能的解决方案,很难从废话中筛选出有意义的东西。我终于在这里找到了一个很好的解决方案:
步骤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而不加载用户权限信息,它将允许您使用根权限访问数据库命令行,而无需提供密码。这将允许您在不知情的情况下访问数据库。
为此,您需要停止数据库加载授权表,授权表存储用户特权信息。因为这有一点安全风险,所以您也应该跳过网络连接,以防止其他客户端连接。
启动数据库而不加载授权表或启用网络:
sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的&号将使此进程在后台运行,以便您可以继续使用您的终端。
现在您可以作为根用户连接到数据库,不需要输入密码。
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)]>
现在您拥有了根访问权限,您可以更改根密码。
步骤4:修改root用户密码
mysql> FLUSH PRIVILEGES;
现在我们可以修改根密码了。
对于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重置根密码。
[重要]这句话解决了我的问题:
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服务器的管理访问。确保你选择的新根密码是强大和安全的,并把它放在安全的地方。
使用sudo修改密码:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'insert_password';
来源:Phoenixnap -拒绝访问用户根localhost