MySQL 5.7的默认根密码是什么

时间:2015-11-30 03:57:56

标签: mysql linux passwords password-recovery mysql-5.7

在使用root ID进行全新安装后无法登录MySQL数据库,并且像其他较旧的MySQL版本一样无法使用密码/

14 个答案:

答案 0 :(得分:90)

从linux上安装MySQL-community-server 5.7之后,您需要从/var/log/mysqld.log中找到临时密码以root身份登录。

  1. grep 'temporary password' /var/log/mysqld.log
  2. 运行mysql_secure_installation更改新密码
  3. 参考:http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html

答案 1 :(得分:71)

那里有很多答案说要重新安装mysql或使用一些组合

mysqld_safe --skip-grant-tables

和/或

UPDATE mysql.user SET Password=PASSWORD('password')

和/或其他......

......这些都不适合我

这里有什么对我有用,在Ubuntu 18.04上,从顶部

特别感谢this answer让我摆脱对此的沮丧......

$ sudo apt install mysql-server
$ sudo cat /etc/mysql/debian.cnf

请注意以下行:

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!

答案 2 :(得分:14)

MySQL 5.7更改了安全模型:现在,MySQL root登录需要sudo

最简单(也是最安全)的解决方案是创建新用户并授予所需的特权。

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

答案 3 :(得分:6)

如果你想安装无人值守的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';"

答案 4 :(得分:6)

MySQL服务器5.7已默认安装在我的新Linux Mint 19上。

但是,MySQL root的密码是什么?事实证明:

默认安装使用auth_socket进行身份验证,代替密码!

如果使用相同的用户名登录Linux系统,则允许无密码登录。要以MySQL根user的身份登录,可以使用sudo:

sudo mysql --user=root

但是如何更改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;

将“我”与“根”进行比较:

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';

一个good explanation.

更多details from the MySQL manual

答案 5 :(得分:1)

Mysql在安装时会生成一个默认的临时密码,因此首先要使用mysql,您需要从/var/log/mysqld.log中存在的日志文件中获取该密码。因此,请遵循以下过程-

grep“临时密码” /var/log/mysqld.log

mysql_secure_installation-这是更改mysql密码并进行某些其他更改(例如删除临时数据库,允许或禁止对root用户的远程访问,删除匿名用户等)所必需的。

答案 6 :(得分:0)

我刚刚在机器上安装了Linux Mint 19(基于Ubuntu 18.04)。我从存储库( sudo apt install mysql-server )中安装了MySQL 5.7,令人惊讶的是,在安装过程中,安装程序没有提示输入 root 密码。结果,我无法登录MySQL。我在这里和那里搜索了谷歌,并尝试了在网上找到的各种答案,包括上面接受的答案。我将其卸载(用名称中的 mysql 清除所有dpkgs),然后从默认的Linux Mint存储库中重新安装。没有效果。

经过数小时的无效工作之后,我决定从官方页面重新安装MySQL。我打开了apt repo的MySQL下载页面(https://dev.mysql.com/downloads/repo/apt),然后单击右下角的 Download 按钮。

接下来,使用dpkg运行它:

sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

在安装设置中,选择要安装的MySQL版本。默认选项是8.0,但我将其更改为5.7。单击确定退出。之后,您的软件源中将有一个新的MySQL存储库。

更新您的仓库:

sudo apt update

最后,安装MySQL:

sudo apt install mysql-server

现在提示我提供 root 密码!希望它对具有相同经验的其他人有所帮助。

答案 7 :(得分:0)

我要遇到同样的问题,而我唯一能做到的就是走这条路:

drop user admin@localhost; flush privileges; create user admin@localhost identified by 'admins_password'

这使我可以重新创建我的用户名,并输入一个密码作为用户名

答案 8 :(得分:0)

在我的情况下,数据目录是使用--initialize-insecure选项自动初始化的。因此/var/log/mysql/error.log不包含临时密码,但是:

  

[警告] root @ localhost是使用空密码创建的!请   考虑关闭--initialize-insecure选项。

有效的是:

shell> mysql -u root --skip-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

详细信息:MySQL 5.7 Reference Manual > 2.10.4 Securing the Initial MySQL Account

答案 9 :(得分:0)

这些答案都不适用于Ubuntu Server 18.04.1和MySQL 5.7.23。我花了很多时间尝试手动设置密码和auth插件失败,在日志中找到密码(密码不存在),等等。

该解决方案实际上非常简单:

sudo mysql_secure_installation

使用sudo执行此操作非常重要。如果您尝试不进行提升操作,则会要求您输入根密码,而您显然没有该密码。

答案 10 :(得分:0)

似乎是为了避免开发人员锁定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

轰!

答案 11 :(得分:0)

尝试了很多之后,我可以使用以下命令(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 &

我得到了mysqld不存在的错误。因此,退出,然后再次键入相同的命令。

最后一条命令

        sudo /etc/init.d/mysql start

有时不起作用。仅在重新启动计算机之后。

答案 12 :(得分:0)

Ubuntu 20.04开始使用MySql 8.0 :您可以通过以下方式设置密码:

  1. 使用sudo mysql -u root

    登录mysql
  2. 更改密码:

USE mysql;
UPDATE user set authentication_string=NULL where User='root';
FLUSH privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'My-N7w_And.5ecure-P@s5w0rd';
FLUSH privileges;
QUIT

现在您应该可以使用mysql -u root -p(或使用用户名root的phpMyAdmin)和您选择的密码登录。

P,S:

您还可以使用用户debian-sys-maint登录,密码被写入文件/etc/mysql/debian.cnf

答案 13 :(得分:0)

要以非交互模式(从脚本)执行此操作:

systemctl start mysqld
MYSQL_ROOT_TMP_PSW=$(grep 'temporary password' $logpath/mysqld.log |sed "s|.*: ||")

## POPULATE SCHEMAS WITH ROOT USER
/usr/bin/mysql --connect-expired-password -u root -p${MYSQL_ROOT_TMP_PSW} < "$mysql_init_script"

这是初始化脚本的头部

SET GLOBAL validate_password_policy=LOW;
FLUSH privileges;

SET PASSWORD = PASSWORD('MYSQL_ROOT_PSW');
FLUSH privileges;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH privileges;

...

然后重启服务systemctl restart mysqld