问题描述
我的本地环境是:
-
新鲜的Ubuntu 16.04
-
使用PHP 7
-
安装了MySQL 5.7
sudo apt-get install mysql-common mysql-server
当我尝试通过MySQL登录MySQL时:
mysql -u root -p
我遇到了3个步骤的周期性问题。
1)首先是一些套接字问题
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
解决方案:重新启动PC。
导致另一个错误:
2)拒绝访问
ERROR 1698 (28000): Access denied for user 'root'@'localhost'.
可能的问题? “root”用户的密码错误!
解决方案:reset root password with this tutorial。
使用正确的密码和有效的套接字,将出现最后一个错误。
3)不正确的auth插件
mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"
在这里我停了下来,或者又以某种方式回到了1)。
最佳方法
我有解决办法!
在步骤2)重置root密码时,还将auth插件更改为mysql_native_password
:
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.首先,运行以下bash命令
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.套接字问题(根据您的评论)
当您看到套接字错误时,社区提供了两种可能的解决方案:
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
可能导致”missing file”或slt错误。
mysql -uroot -h127.0.0.1
效果更好。
跳过套接字问题
我发现了许多创建mysqld.sock
文件,更改访问权限或对其进行符号链接的方法。毕竟这不是问题。
跳过my.cnf
文件
问题也不存在。如果不确定,请使用this might help you。
次佳方法
您可以尝试以下操作,它对我有用。
启动服务器:
sudo service mysql start
现在,转到sock文件夹:
cd /var/run
备份袜子:
sudo cp -rp ./mysqld ./mysqld.bak
停止服务器:
sudo service mysql stop
还原袜子:
sudo mv ./mysqld.bak ./mysqld
启动mysqld_safe:
sudo mysqld_safe --skip-grant-tables --skip-networking &
初始化mysql shell:
mysql -u root
更改密码:
因此,首先选择数据库
mysql> use mysql;
现在在下面两个查询中输入:
mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root';
现在,一切都会好的。
mysql> flush privileges;
mysql> quit;
检查:
mysql -u root -p
完成!
N.B, After login please change the password again from phpmyadmin
现在检查hostname/phpmyadmin
Username: root
Password: 123456
有关更多详细信息,请检查How to reset forgotten password phpmyadmin in Ubuntu
第三种方法
您可以尝试以下步骤:
停止Mysql Service 1st sudo /etc/init.d/mysql stop
以root用户身份登录,无需密码sudo mysqld_safe --skip-grant-tables &
登录mysql终端后,您需要执行更多命令:
use mysql;
UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';
flush privileges;
sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown
重新启动mysql服务器后如果仍然遇到错误,则必须访问:Reset MySQL 5.7 root password Ubuntu 16.04
第四种方法
默认情况下,mysql
命令使用UNIX套接字连接到MySQL。
如果使用的是MariaDB,则需要在服务器端加载Unix Socket Authentication Plugin。
您可以通过编辑[mysqld]
配置来做到这一点,如下所示:
[mysqld]
plugin-load-add = auth_socket.so
根据分布,配置文件通常位于/etc/mysql/
或/usr/local/etc/mysql/
第五种方法
对于Ubuntu 18.04和mysql 5.7
-
步骤1:sudo mkdir /var /run /mysqld;步骤2:sudo chown mysql /var /run /mysqld步骤3:sudo mysqld_safe –skip-grant-tables&退出(如果卡住,请使用quit)
登录到MySQL没有密码
-
步骤4:sudo mysql –user = root mysql步骤5:SELECT用户,authentication_string,插件,主机from mysql.user;步骤6:通过’root’与mysql_native_password标识另一个用户’root’@’localhost’
现在登录
-
mysql -u root -p
第六种方法
尝试:sudo mysql_secure_installation
在Ubuntu 18.04中工作