我当地的环境是:

  • fresh Ubuntu 16.04
  • 使用PHP7
  • 安装了MySQL 5.7

    sudo apt-get install mysql-common mysql-server
    

当我try 登录MySQL(通过CLI)时:

mysql -u root -p

我遇到了一个有3个步骤的循环问题.

1) 首先是插座问题

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Solution: restarting PC.

这导致了另一个错误:

2) 拒绝访问

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

可能的问题?"root"用户的密码错误!

Solution: 100.

有了正确的密码和工作套接字,最后一个错误出现了.

3) 不正确的身份验证插件

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

在这里,我停下脚步,或者不知何故又走了起来.

推荐答案

我有办法了!

When resetting root password at step 2), also change the auth plugin to 100:

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

这让我成功登录!


完整代码解决方案

1.运行bash命令

1. first, run these bash commands

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2.然后运行mysql命令=>手动将其复制粘贴到cli

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3.运行更多bash命令

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4.插座问题(来自您的 comments )

当您看到一个socket错误时,一个社区提供了两种可能的解决方案:

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

(感谢@Cerin)

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(感谢@Peter Dvukhrechensky)


盲路和可能的边缘错误

使用127.0.0.1而不是localhost

mysql -uroot # "-hlocalhost" is default

可能导致"文件丢失"或slt错误.

mysql -uroot -h127.0.0.1

效果更好.

跳过套接字问题

我找到了很多方法来创建mysqld.sock个文件、更改访问权限或将其符号链接.这毕竟不是问题所在.

Skip the my.cnf file

这个问题也不存在.如果你不确定,this might help you.

Mysql相关问答推荐

S优化联接更新的最佳方式是什么?

使用由其中一个表的列规定的条件连接两个表

MySQL连接序列

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

计算符合字段值只能包含一种事件类型这一事实的记录

MySQL 搜索列字段字符串

获取每个参数的记录,不重复

使用sql查找源和最终目的地

访问 nodejs、mysql 和 json 中的嵌套对象数组

SQL从字典中的键获取值

如何在 MYSQL 中使用多个表进行插值

SQL从具有相同列的行中 Select 最后一行

通过 Gorm 查询模型

更改整数时间到日期格式 MM/DD/YY,如 python 中的 datetime.fromtimestamp

如何使用 laravel 连接 mysql?

MySQL 添加一个 NOT NULL 列

在 MYSQL 中按枚举字段排序

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

从 MySQL JSON 数据类型中提取不带引号的值

在 MySQL 中存储 IPv6 地址