有很多答案建议重新安装mysql或使用一些组合方法。
mysqld_safe --skip-grant-tables
and / or
UPDATE mysql.user SET Password=PASSWORD('password')
和其他一些东西...
...对我都没有用
以下是在Ubuntu 18.04上为我工作的方法,从头开始
特别鸣谢这篇答案帮我解决了这个问题带来的挫败感...
$ sudo apt install mysql-server
$ sudo cat /etc/mysql/debian.cnf
Note the lines which read:
user = debian-sys-maint
password = blahblahblah
然后:
$ mysql -u debian-sys-maint -p
Enter password: // type 'blahblahblah', ie. password from debian.cnf
mysql> USE mysql
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> COMMIT; // When you don't have auto-commit switched on
要么:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
或者:
// For MySQL 5.7+
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';
然后:
mysql> FLUSH PRIVILEGES;
mysql> COMMIT; // When you don't have auto-commit switched on
mysql> EXIT
$ sudo service mysql restart
$ mysql -u root -p
Enter password: // Yay! 'new_password' now works!
auth_socket
。你有什么想法吗? - Matt RaibleFLUSH PRIVILEGES;
命令之前需要先执行 commit;
。 - EricUPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';
更改密码,因此您需要运行该命令而不是 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
。 - message在Linux上安装MySQL-community-server 5.7后,您需要在/var/log/mysqld.log中找到临时密码以root身份登录。
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
以更改新密码参考链接:http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
/var/log/mysqld.log
的人,只需运行sudo mysql_secure_installation
。请记得用sudo
运行该命令,否则将会收到“访问被拒绝”的错误提示。 - wpclevelMySQL 5.7更改了安全模型:现在需要使用sudo才能登录MySQL root。
最简单(也是最安全)的解决方案是创建一个新用户并授予所需的权限。
1. 连接到mysql
sudo mysql --user=root mysql
2. 为phpMyAdmin创建一个用户
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
参考 - https://askubuntu.com/questions/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7
我的新Linux Mint 19已经默认安装了MySQL服务器5.7。
但是,MySQL的root
密码是什么?事实证明:
默认安装使用auth_socket
进行身份验证,而不是密码!
它允许无需密码登录,前提是已使用相同的用户名登录Linux系统。要作为MySQL根user
登录,可以使用sudo:
sudo mysql --user=root
但是如何更改根密码呢?为了说明情况,我创建了一个名为“me”的新用户,拥有完全的特权,具体步骤如下:
mysql> CREATE USER 'me'@'localhost' IDENTIFIED BY 'my_new_password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'me'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
与 "root" 相比较:
mysql> SELECT user, plugin, HEX(authentication_string) FROM mysql.user WHERE user = 'me' or user = 'root';
+------+-----------------------+----------------------------------------------------------------------------+
| user | plugin | HEX(authentication_string) |
+------+-----------------------+----------------------------------------------------------------------------+
| root | auth_socket | |
| me | mysql_native_password | 2A393846353030304545453239394634323734333139354241344642413245373537313... |
+------+-----------------------+----------------------------------------------------------------------------+
因为它使用了auth_socket,所以无法更改root密码:执行SET PASSWORD
命令会失败,而mysql_secure_installation
则无法实现任何目标...
==> 要取消此替代身份验证模式并使MySQL的root
用户重新使用密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SOME_NEW_ROOT_PASSWORD';
一份 好的解释。
更多MySQL手册中的细节。
如果您想无人值守安装MySQL或Percona(例如在我的情况下使用Ansible),可以使用以下脚本:
# first part opens mysql log
# second part greps lines with temporary password
# third part picks last line (most recent one)
# last part removes all the line except the password
# the result goes into password variable
password=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n 's/.*root@localhost: //p')
# setting new password, you can use $1 and run this script as a file and pass the argument through the script
newPassword="wh@teverYouLikE"
# resetting temporary password
mysql -uroot -p$password -Bse "ALTER USER 'root'@'localhost' IDENTIFIED BY '$newPassword';"
find / -name mysqld 2>/dev/null
- hpaknia/var/log/mysqld.log
的日志文件中获取该密码。因此,请遵循以下过程:
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
看起来事情是设计成避免开发人员设置root用户,更好的解决方案应该是:
sudo mysql -u root
接下来创建一个普通用户,设置密码,然后使用该用户进行工作。
create user 'user'@'localhost' identified by 'user1234';
grant all on your_database.* to 'user'@'localhost';
select host, user from mysql.user;
然后尝试访问:
mysql -u user -p
砰!
经过多次尝试,我使用以下命令(适用于Ubuntu及其衍生版本)成功重置了默认密码:
sudo -i
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot
use mysql;
update user set authentication_string=password('YOURPASSWORD') where user='root';
update user set plugin="mysql_native_password" where User='root';
flush privileges;
quit;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
sudo /etc/init.d/mysql start
有时候不起作用,只有在重新启动电脑后才能正常运行。
对于Ubuntu Server 18.04.1和MySQL 5.7.23,以上回答都无法解决我的问题。我花了很多时间尝试手动设置密码和认证插件,查找日志中的密码(但并没有找到),结果一直失败。
实际上,解决方法非常简单:
sudo mysql_secure_installation
使用sudo
执行此操作非常重要。如果未提升权限,您将被要求输入root密码,而您显然没有这个密码。
sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb
sudo apt update
sudo apt install mysql-server
现在我被提示提供root密码!希望这能对其他遇到同样问题的人有所帮助。
mysql-server
,但最终发现官方提供的MySQL版本才是可行的。 - Inam Ul Huq
sudo mysql -u root
对我有用 - 我想更改它以便我只需使用mysql -u root
而无需输入密码) - Max Williams