mysql 安装时不要求输入 root 密码

spq*_*pqa 67 mysql root password software-installation

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

安装后,ERROR 1045当我尝试登录时遇到rootmysql_secure_installation抛出相同的错误。我purged 和autoremoved 然后重新安装,但它不起作用。

我怎么能解决这个问题?如果我在安装过程中没有设置root密码,我可以设置它吗?

这是我的安装日志:

将安装以下附加软件包:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server-5.7
  mysql-server-core-5.7
推荐套餐:
  mailx tinyca
将安装以下新软件包:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server mysql-server-5.7
  mysql-server-core-5.7
0 个升级,6 个新安装,0 个删除,0 个未升级。
需要获得 0 B/17,9 MB 的档案。
此操作后,将使用 160 MB 的额外磁盘空间。
你要继续吗?[是/否] 是
预配置包...
选择以前未选择的软件包 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) 的触发器...

L. *_*mes 70

您可以在不知道当前密码的情况下通过启动 mysql 而不加载授权表来恢复或设置 root 密码。

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

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

$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld
$ sudo mysqld_safe --skip-grant-tables&
Run Code Online (Sandbox Code Playgroud)

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

$ sudo mysql --user=root mysql
Run Code Online (Sandbox Code Playgroud)

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

mysql> update user set Password=PASSWORD('new-password') where user='root';
flush privileges;
Run Code Online (Sandbox Code Playgroud)

在 MySQL 5.7 或以上

mysql> update user set authentication_string=PASSWORD('new-password') where user='root';
flush privileges;
Run Code Online (Sandbox Code Playgroud)

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

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

停止mysql:

$ sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)

启动mysql(正常):

$ sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

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

$ sudo mysqladmin shutdown
Run Code Online (Sandbox Code Playgroud)

  • 在 mysql 5.7.12 中,用户表中没有名为 password 的列。因此以下命令对我有用。更新用户集 authentication_string=PASSWORD('new-password') where user='root'; (11认同)
  • 我仍然收到`ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)` (8认同)
  • 在执行 `FLUSH PRIVILEGES;` 之前,再执行一个查询:`UPDATE user SET plugin='mysql_native_password';` 以便 MySQL 服务器使用其本地密码插件进行身份验证。 (5认同)

d a*_*s y 45

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

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

sudo mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)

它会显示:

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

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

Enter current password for root (enter for none): (这里按回车)

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

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

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

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


对于 Ubuntu 18.04 或mysql-server5.7.22 版,此方法将不起作用

要在 Ubuntu 18.04 中设置 root 密码,首先按照前三个命令或LD James 的回答的前两个步骤然后运行,

mysql> alter user 'root'@'localhost' identified by '<password>';
Run Code Online (Sandbox Code Playgroud)

设置root用户密码!

或者

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

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

sudo mysql -u root -p
Enter password: (press enter as no password is set)
Run Code Online (Sandbox Code Playgroud)

之后可以轻松运行查询

ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Run Code Online (Sandbox Code Playgroud)

  • 这个问题的问题是用户无法获得您提到的提示,因为他不知道“root 的当前密码”。 (3认同)
  • 对于 ubuntu 18.04 或 debian 9+,它不会使用空白密码连接,即使在为 root 重置通行证后,它仍然拒绝连接 (2认同)

小智 23

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

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

  • 我能够通过全新安装的 `apt install mysql-server` 进行确认,而无需在 18.04 上指定密码。症状和解决方法与所描述的完全一样。 (4认同)

Dim*_*Dak 22

安装后只需:

  1. sudo mysql (是的,没有用户没有通行证)

  2. 您现在在 mysql 控制台中。执行:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_new_pass';

  3. FLUSH PRIVILEGES;

就是这样。您现在可以像往常一样下次进入控制台:

mysql -u root -pmy_new_pass
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了许多其他答案,但这个答案适用于 Amazon EC2 (5认同)
  • 这是 WSL Ubuntu(Windows 上的 Linux)的正确答案。 (3认同)
  • 这是在谷歌云上的 ubuntu 18.04 新安装上对我有用的唯一答案。 (3认同)
  • 在 Ubuntu 19.04 上为我工作。我确实运行了 mysql_secure_myinstallation,但似乎没有设置 root 密码。 (2认同)
  • 我尝试了几十种解决方案。这是最简单的,也是唯一有效的。 (2认同)

小智 6

  1. 有一个默认用户帐户。

    $ vim /etc/mysql/debian.cnf 
    
    Run Code Online (Sandbox Code Playgroud)

    您将像这样从中获得此帐户:

    user     = debian-sys-maint
    password = nUZTARYslBsASzpw
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你用这个账号登录

    $ mysql -u debian-sys-maint -p
    
    Run Code Online (Sandbox Code Playgroud)
  3. 编辑你的root密码

    mysql> show databases?
    
    mysql> use mysql;
    
    mysql> update user set authentication_string=PASSWORD("new_password") where user='root';
    
    mysql> update user set plugin="mysql_native_password";
    
    mysql> flush privileges;
    
    mysql> quit;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重启mysql

    $ /etc/init.d/mysql restart;
    
    Run Code Online (Sandbox Code Playgroud)

然后你可以mysql -u root -p用你以前的设置。