ubuntu服务器16.04中mysql的默认密码


73

我已经安装了Ubuntu 16.04服务器。默认情况下,Mysql服务器已安装在其中。当我尝试使用访问mysql时mysql -u root -p,由于没有密码,我无法登录mysql。有没有默认密码?

我也尝试过用--skip-grant-tables,即使这样也不行。即使仅尝试登录mysql -u root也将失败。


1
请批准可以解决您的查询的答案,以便对社区有所帮助。
Shakti Phartiyal

1
我刚刚针对这个问题发布了新的工作答案。在18.04上,没有其他建议对我有用。 stackoverflow.com/questions/33991228/…–
斯图尔特


@Debashisenator,如果您发现我的回答有帮助,请接受我的回答。
莫兹·扎多克

Answers:



92

mysql-server在Ubuntu 18.10上进行了全新安装,无法使用默认密码登录。然后只有我知道默认情况下,root用户使用进行了身份验证auth_socket。因此,如在答案中将插件更改为时mysql_native_password,我们可以使用mysql默认密码

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

您可以在其中找到以下几行

user     = debian-sys-maint
password = password_for_the_user

然后:

$ mysql -u debian-sys-maint -p
Enter password: 

输入来自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; 

要么:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

要么:

//对于MySQL 5.7+

mysql>UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';

-更新-

有时您将需要重新启动mysql服务器。

sudo service mysql restart

要么

sudo systemctl restart mysql

您应该添加一些细节,以了解OP的操作错误以及该解决方案起作用的原因
schu34

您应该将该上下文添加为答案的编辑内容:)
schu34

3
执行此解决方案后,我必须重新启动mysql服务器。sudo service mysql restart
图克斯曼

在最新版本的ubuntu上安装许多mysql-servers软件包后,此答案对我来说是唯一的工作。谢谢。
Tuxman '19

对我来说很好。谢谢。
DomonLee

51

默认情况下,MySQL具有root用户的身份验证插件auth_socket,它要求系统用户名和db用户名相同。

具体来说,以root或的身份登录,sudo -i然后键入,mysql然后您将以mysql身份登录,root然后可以创建其他运行用户。

如果您的主机上没有root用户,我猜您是否应该被禁止以root用户身份登录mysql?


19

您可以简单地通过使用--skip-grant-tables运行服务器来重置root密码,并通过以root身份或使用sudo来运行以下命令而无需密码登录:

service mysql stop
mysqld_safe --skip-grant-tables &
mysql -u root

mysql> use mysql;
mysql> update user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit

# service mysql stop
# service mysql start
$ mysql -u root -p

3
完成此操作后,我收到一条错误消息,提示“未加载插件'unix_socket'”。解决方案:stackoverflow.com/a/37879449/2934081(在行update user set plugin="mysql_native_password"; 后添加update user)。
Amichai Schreiber,

1
这应该是正确的答案,因为先前的货币已贬值
Amorphous

16

尽管这是一个古老的问题,但我们中仍有几个人仍在努力寻找答案。至少我做到了。请不要遵循所有冗长的解决方案。通过在mysql命令前添加sudo,您可以简单地以root用户身份登录mysql而无需提供任何密码(假设它是全新安装,或者自安装以来没有更改密码)。 $sudo mysql -uroot -p mysql> 这是因为mysql在最新版本之一中更改了安全模型。

希望这可以帮助


12

请注意,在运行MySQL 5.7(及更高版本)的Ubuntu系统中,默认情况下,MySQL根用户设置为使用auth_socket插件而不是使用密码进行身份验证。您需要将其身份验证方法从auth_socket切换到mysql_native_password

正如@BeNiza所说,他们更改了安全模型。我做了以下步骤,它在ubuntu 18.04上适用于mysql 5.7.27

sudo apt install mysql-server

现在已安装MySQL数据库软件,但其配置尚未完成。

为了确保安装安全,MySQL附带了一个脚本,该脚本将询问我们是否要修改一些不安全的默认值。通过键入以下命令来启动脚本:

sudo mysql_secure_installation

您应该在每个提示下按下YENTER击键。

如果您使用弱密码,这将导致问题

您可以简单地以root用户身份登录mysql,而无需在mysql命令前添加sudo来提供任何密码。

sudo mysql

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password';

如果您设置了弱密码,则会看到以下错误:

错误1819(HY000):您的密码不符合当前的政策要求

mysql> FLUSH PRIVILEGES;

mysql> exit

注意:将root的MySQL用户配置为使用密码进行身份验证后,您将不再能够使用先前使用的sudo mysql命令访问MySQL。相反,您必须运行以下命令: mysql -u root -p

输入刚刚设置的密码后,您将看到My​​SQL提示。


谢谢,您让我开心!:)
1/9

7

在最新版本中,mySQL使用auth_socket,因此要登录,您必须了解自动生成的用户凭据。或者,如果您下载二进制版本,则在安装过程中,可以选择lagacy password

在Linux Debian版本中安装SQL

sudo apt install mysql-server

了解密码

sudo cat /etc/mysql/debian.cnf

现在登录

mysql -u debian-sys-maint -p

使用来自的密码 debian.cnf

如何查看可用的用户记录:

USE mysql
SELECT User, Host, plugin FROM mysql.user;

现在您可以创建一个新用户。使用以下命令:

use mysql;
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
flush privileges;

列出特定mysql用户的授权

SHOW GRANTS FOR 'username'@'localhost';

如何撤销特定mysql用户的所有授予

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@'localhost';

从用户帐户列表中删除/删除特定用户

DROP USER 'username'@'localhost';

有关更多命令:

$ man 1 mysql

请不要重设root用户的密码,而要创建一个新用户并授予权限。这是最佳做法。


6

从Ubuntu 20.04开始,使用默认的MariaDB 10.3软件包,这些是必需的步骤(混合了该线程的先前答案):

  1. 以root用户身份登录到mysql: sudo mysql -u root
  2. 更新密码:
USE mysql;
UPDATE user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
UPDATE user set plugin="mysql_native_password" where User='root';
FLUSH privileges;
QUIT
  1. sudo service mysql restart

之后,您可以使用新密码连接到本地mysql: mysql -u root -p


5
  1. 首先你应该停止mysql
  2. 使用此命令 sudo mysqld_safe --skip-grant-tables --skip-networking &
  3. 然后输入mysql -u root 尝试这种方式,我已经解决了我的问题,这种方法。

没用 我必须创建/ var / run / mysqld,但是最终出现了另一个错误。pid文件/var/run/mysqld/mysqld.pid中的mysqld_safe mysqld终止。syslog说:无法创建UNIX套接字锁定文件/var/run/mysqld/mysqld.sock.lock。不得不将mysql:mysql拖到/ var / run / mysqld文件夹中,然后就可以了!
法比恩·哈达迪

由于第二点不存在用于UNIX套接字文件的mysqld_safe目录'/ var / run / mysqld',我收到错误消息
Satish Gadhave

5

带有MySql 8.0Ubuntu 20.04开始:该函数PASSWORD不再存在,因此正确的方法是:

  1. 使用登录到mysql sudo mysql -u root

  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:

您也可以使用user登录debian-sys-maint,密码在文件中/etc/mysql/debian.cnf


4

对我有用的唯一选择是此链接中描述的选择。

总而言之(以防网站崩溃),它说:

安装MySQL:

sudo apt update
sudo apt install mysql-server

在下一个提示符下,将要求您设置MySQL root用户的密码。完成该操作后,脚本还将要求您删除匿名用户,限制root用户对本地计算机的访问并删除测试数据库。您应该对所有问题回答“是”(是)。

sudo mysql_secure_installation

然后

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';
FLUSH PRIVILEGES;

之后,您可以退出:

exit

现在,您可以轻松地使用(记住输入您的very_strong_password)登录:

mysql -u root -p
# type the password now.

经过数小时的尝试,以上是我唯一的选择。


3

我认为另一个值得一看的地方是/var/lib。如果去那里,您会看到三个具有“有趣”权限的mysql文件夹:

user   group 
mysql  mysql

这是解决root密码问题的方法:

跑步后

sudo apt-get purge mysql*
sudo rm -rf /etc/mysql

我还运行了以下命令(而不是将my_username放在您的用户名中):

cd /var/lib
sudo chown --from=mysql <my_username> mysql* -R
sudo rm -rf mysql*

接着:

sudo apt-get install mysql-server

这提示我选择一个新的root密码。希望对您有所帮助


删除/ etc / mysql可以防止在19.04中重新安装mysql-server
gpothier

您所说的19.04没有任何意义。除上述步骤外,我认为您在做错什么。此外,仅供参考:“ Ubuntu 19.04将在2019年4月18日发布”,今天是2019
Leo Skhrnkv

另外,问题说“ ubuntu服务器16.04中mysql的默认密码”,我在那里看不到19.04
Leo Skhrnkv

应该说19.04 beta。您是正确的,这可能不适用于16.04。在19.04 Beta中,(重新)安装mysql-server不会提示输入root密码。我确实清除了mysql-server *,而不是mysql *(这将导致太多软件包被卸载),并且/ etc / mysql目录是由mysql-common创建的,因此手动删除它而不删除该软件包将阻止mysql-服务器安装。
gpothier

1

只需运行 sudo dpkg-reconfigure mysql-server-5.7

您可以通过运行找到已安装的版本 dpkg --get-selections | grep mysql-server


8
该命令没有提供设置根密码的选项
Stewart

该命令没有给设置root密码的选项
迪帕克·加尔格

该命令没有提供设置根密码的选项
Uzair Hayat


-1

如果您使用安装mysql apt install mysql
您可以使用登录到mysql sudo mysql

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.