" mysql -u root"在Ubuntu上从5.6升级到5.7后,无法正常工作

时间:2016-05-05 02:07:41

标签: mysql ubuntu

我刚刚将Ubuntu从15.10升级到16.04,将MySQL从5.6升级到5.7。

我以前没有root密码(它只是一个本地开发虚拟机)。我无法做到" mysql -u root"作为一个没有特权的用户,但是当我更改为root ubuntu用户时,我可以毫无问题地启动mysql客户端。两个用户的mysql二进制文件是相同的,所以那里没有任何诡计。

user@ubuntu:~$ mysql -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
user@ubuntu:~$ sudo -u root -i
root@ubuntu:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.12-0ubuntu1 (Ubuntu)

更改主机设置(localhost与127.0.0.1)没有任何影响。 mysql.user表的内容是:

+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+
| Host      | User             | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin                | authentication_string                     | password_expired | password_last_changed | password_lifetime | account_locked |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+
| localhost | root             | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 | auth_socket           |                                           | N                | 2016-05-04 21:46:45   |              NULL | N              |
| ubuntu    | root             | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password |                                           | N                | 2016-05-04 21:46:45   |              NULL | N              |
| 127.0.0.1 | root             | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password |                                           | N                | 2016-05-04 21:46:45   |              NULL | N              |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+-----------------------+-------------------+----------------+

关于如何更好地调试此处发生的事情的任何想法都将非常感激。

3 个答案:

答案 0 :(得分:3)

我发现了问题!

在升级期间,MySQL添加了auth_socket插件类型。这种调整意味着当连接到localhost时,我不能简单地添加" -uroot"标记并期望它工作,因为MySQL将当前用户的名称与请求的mysql名称进行比较。来自MySQL的更有用的错误消息在这里很不错。

来自MySQL documentation

  

如果登录名为stefanie的本地主机上的用户使用选项T调用B来通过套接字文件进行连接,则服务器使用mysql对客户端进行身份验证。该插件确定--user=valerie选项值(auth_socket)与客户端用户的名称(--user)不同,并拒绝连接。如果名为valerie的用户尝试相同的操作,则插件会发现用户名和MySQL用户名都是stephanie并允许连接。但是,如果使用不同的协议(例如TCP / IP)建立连接,则插件即使valerie也拒绝连接。

答案 1 :(得分:0)

除非您为自己的帐户设置了密码,否则使用-p标记无效。您必须reset your root password

答案 2 :(得分:-2)

我建议使用int* ptr = malloc(sizeof (*ptr)); bool b = *ptr == 0; // always true? ,所有单词或mysql -uroot,这样您就可以选择输入密码或设置密码。