安装时mysql不要求root密码

我使用apt install mysql-server在Ubuntu 16.04上安装MySQL,但在安装过程中,它没有要求root密码。

安装完成后,当我尝试以root身份登录时,我得到了ERROR 1045 ,并且mysql_secure_installation引发了同样的错误。 我purge d和autoremove d然后重新安装但它不起作用。

我怎么能解决这个问题? 如果我在安装期间未设置root密码,是否可以设置root密码?

这是我的安装日志:

 将安装以下附加软件包:
   libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server-5.7
   MySQL的服务器核心 -  5.7
推荐套餐:
   mailx tinyca
将安装以下新软件包:
   libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server mysql-server-5.7
   MySQL的服务器核心 -  5.7
 0升级,6新安装,0删除,0未升级。
需要获得0 B / 17,9 MB的档案。
执行此操作后,将使用160 MB的额外磁盘空间。
你想继续吗?  [是/否] y
预配置包...
选择以前未选择的包libaio1:amd64。
 (读取数据库...当前安装的227144个文件和目录。)
准备打开包装... / libaio1_0.3.110-2_amd64.deb ...
解包libaio1:amd64(0.3.110-2)...
选择以前未选择的包mysql-client-core-5.7。
准备解压缩... / mysql-client-core-5.7_5.7.12-0ubuntu1_amd64.deb ...
解压缩mysql-client-core-5.7(5.7.12-0ubuntu1)...
选择以前未选择的包mysql-client-5.7。
准备拆包... / mysql-client-5.7_5.7.12-0ubuntu1_amd64.deb ...
解压缩mysql-client-5.7(5.7.12-0ubuntu1)......
选择以前未选择的包mysql-server-core-5.7。
准备拆包... / mysql-server-core-5.7_5.7.12-0ubuntu1_amd64.deb ...
解压缩mysql-server-core-5.7(5.7.12-0ubuntu1)...
选择以前未选择的包mysql-server-5.7。
准备拆包... / mysql-server-5.7_5.7.12-0ubuntu1_amd64.deb ...
解压缩mysql-server-5.7(5.7.12-0ubuntu1)......
选择以前未选择的包mysql-server。
准备解压缩... / mysql-server_5.7.12-0ubuntu1_all.deb ...
解压缩mysql-server(5.7.12-0ubuntu1)......
处理libc-bin的触发器(2.23-0ubuntu3)......
处理man-db的触发器(2.7.5-1)......
 systemd的处理触发器(229-4ubuntu4)......
处理ureadahead的触发器(0.100.0-19)......
设置libaio1:amd64(0.3.110-2)...
设置mysql-client-core-5.7(5.7.12-0ubuntu1)......
设置mysql-client-5.7(5.7.12-0ubuntu1)......
设置mysql-server-core-5.7(5.7.12-0ubuntu1)......
设置mysql-server-5.7(5.7.12-0ubuntu1)......
 update-alternatives:使用/etc/mysql/mysql.cnf在自动模式下提供/etc/mysql/my.cnf(my.cnf)
检查是否需要更新。
 MySQL的安装已经升级到5.7.12,如果仍然需要运行mysql_upgrade,请使用--force
设置mysql-server(5.7.12-0ubuntu1)......
处理libc-bin的触发器(2.23-0ubuntu3)......

您可以通过启动mysql而不加载grant-tables来恢复或设置root密码,而无需知道当前密码。

请注意命令中的$ 。 这是指定在输入命令时看到的终端提示。 它显示的是一行文本,但实际键入的终端命令。 “ mysql> ”前缀也是一个提示符。 这是你在运行mysql时获得的提示。

这是执行此操作的cli (命令行):
(确保在执行步骤之前停止当前服务器 。一次只能运行一个服务器。)

 $ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld $ sudo mysqld_safe --skip-grant-tables& 

现在,您可以在没有密码的情况下以root身份登录并执行所有命令,因为在这种情况下,将root密码设置为root。

 $ sudo mysql --user=root mysql 

如果你有MySQL 5.6或更低版本,这是你将在mysql中执行的设置root密码:

 mysql> update user set Password=PASSWORD('new-password') where user='root'; flush privileges; 

在MySQL 5.7或更高版本中

 mysql> update user set authentication_string=PASSWORD('new-password') where user='root'; flush privileges; 

从那里,退出(杀死正在运行的msqld)mysql并正常启动它。

启动和停止mysql服务的注意事项:

停止mysql:

 $ sudo service mysql stop 

启动mysql(正常):

 $ sudo service mysql start 

杀死临时mysql安全模式会话:

 $ sudo mysqladmin shutdown 

在Ubuntu 16.04中安装mysql时不会要求输入密码,但是在成功安装后可以通过以下方式设置密码:

完成mysql安装后,运行命令:

 sudo mysql_secure_installation 

它将显示:

注意:建议在生产中使用所有MariaDB服务器运行本脚本的所有部分! 请仔细阅读每一步!

为了登录MariaDB以保护它,我们需要root用户的当前密码。 如果您刚刚安装了MariaDB,但尚未设置root密码,则密码将为空,因此您只需按Enter键即可。

Enter current password for root (enter for none): 此处按Enter键)

好的,成功使用密码,继续……

设置root密码可确保没有适当的授权,任何人都无法登录MariaDB root用户。

 Set root password? [Y/n] y (press 'y' to set new password) New password: Re-enter new password: 

密码更新成功! 重新加载权限表……成功!


对于UBUNTU 18.04或mysql-server version 5.7.22,这种方法不起作用

请按照以下步骤在18.04中设置root密码:

由于没有为root用户设置密码,只需使用空密码登录即可

 sudo mysql -u root -p Enter password: (press enter as no password is set) 

之后可以轻松运行查询

 ALTER USER 'root'@'locahost' IDENTIFIED BY ''; 

显然16.04(或任何5.7安装?)上的mysql-server安装允许root访问不是通过密码,而是通过auth_socket插件。 运行sudo mysql -u root (nb w / oa password)将为您提供mysql控制台,而以非root身份运行该命令会提示您输入密码。

似乎更改密码并没有太大的区别,因为auth后端甚至没有检查密码。 有一篇非常全面的文章介绍了如何更改插件并切换到密码validation 。

添加到主要答案,如果你被困在

mysqld_safe使用/ var / lib / mysql中的数据库启动mysqld守护程序

要记住的一件事是你必须使用另一个终端窗口输入以下命令。

 $ sudo mysql --user=root mysql 

如果您尝试在同一窗口中执行此操作,它将关闭mysqld安全模式进程。