localhost错误化解措施,Linux下豆蔻梢头旦忘记了Mysql的root密码该怎么办数据库

数据库

我的操作系统是ubuntu18.04,以下是我的mysql版本:

windowslinux下安装mysql报1045等错误

以前在windows 下安装mysql
没怎么出现过问题,而在linux下安装的时候出现了一些问题,昨天在windows
安装的时候也出现了1045 错误,就个人经历来看这个问题就是
root用户密码的问题,所以将解决的方式总结如下:

下面十分简单的办法用来重置密码:

数据库 1

一、mysql登录报 1045 错误

mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user ‘root’@’localhost’ (using password: YES)’

我们看到上面的这个错误就是说 user 为root
host为localhost的密码有问题,所以我们就要看看
mysql数据库中user表中user为root,host为localhost的这个用户的密码。

解决办法:破解mysql密码

1、 service mysqld stop

// 停止mysql服务

2、mysqld_safe –skip-grant-tables

//
在mysql的配置文件如果是linux(centos)则在etc/my.cnf配置文件的mysqld_safe
下天添加skip-grant-tables,如果在windows下则在安装目录下的my.ini
配置文件的mysqld 下添加 skip-grant-tables,
skip-grant-tables是跳过授权表,这样配置之后保存
关闭,重新启动mysql服务

3、 mysql -uroot -p 回车

//
这样就进来了,这里有两个问题,也是我遇到的两种情况,一种是user表中有user为root的用户,一种是没有,如果有则进行如下处理:

(1)、use mysql;

// 使用mysql数据库

(2)、 delete from user where host=”localhost” and user=” “;

//
将host为localhost下的user为空的用户都删了,其实也可以把这里localhost改成
% 免得以后连接的时候连接不了,不过是后话在这里该不该都可以。

(3)、 update user set password=PASSWORD(“newpass”) where user=”root”;
// 如果你查询一下你会发现
mysql中的密码是加密保存的,所以修改密码不能向平时的sql一样
而要使用password(“新密码”)关键字来修改密码,新密码为password中的字符。

(4)、 flush tables;

//数据刷到磁盘

(5)、 flush privileges;

//更新权限

(6)、quit

//退出

(7)、将配置文件中 skip-grant-tables 注释/删掉 保存

(8)、service mysqld restart

// 再次启动服务 mysql -uroot -p新密码回车 ,这样应该可以了

1、编辑MySQL配置文件my.cnf

安装完成后,登录mysql的时候就出现了如下错误:

二、 接着上面3、mysql -uroot -p 回车 进入之后use表中没数据,即创建root用户做如下处理:

第一种情况,就是user中有root用户但是连接不上是在windows下遇到的,而user中什么都没有是在linux(centos)
下遇到的,具体处理如下:

在linux下安装了mysql之后出现错误,刚开始以为就是第一种这种情况,网上大多也都是这类文章于是就按照这篇文章进行了修改:linux下mysql
初次登陆修改密码
修改之后应该没错,但再次启动服务root登录还是不行,下面的就是出现的问题和解决过程:

1、查询看有没有user 为root的用户,或这说user中有没有用户。

mysqld_safe–skip-grant-tables&mysql-uroot mysql
mysql> select * from user;
Empty set (0.00 sec)
mysql> select USER();
+——–+
| USER()|
+——–+
| [email protected] |
+——–+
1 row in set (0.00 sec)

结果是没有root用户,user表里面是空的,还是第一次遇到这种问题的。

2、插入用户信息到 user表
由于 mysqld_safe
–skip-grant-tables里面是不能用grant的,于是想到了手动insert插入root用户:

**为了大家方便这里提供一些说明:第一个值是host,第二个为user这两项是必填项,password(“my_password”)这里进行密码的设置,MY_PASSWORD
就是新设的密码 ,而’Y’有28个,之后有1个enum和3个blob
可以为空,也就是这里的4个空字符,int类型有4个,默认值为0

INSERTINTO user VALUES(‘%’,’root’,password(‘MY_PASSWORD’),’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)

这里要主要的是第3个字段密码处要用password(‘密码’),因为mysql中密码是要经过编码的,不是直接字符串保存的。

3、接着在杀掉所有mysql进程,之后正常重启mysql,即可用root用户登录

到目前个人就遇到的问题总的就这两种,希望对你有用!!

以前在windows
下安装mysql
没怎么出现过问题,而在linux下安装的时候出现了一些问题,昨天在windows
安装的时…

  vi /etc/my.cnf
#编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [mysqld]
skip-grant-tables :wq! #保存退出 shutdown -r now #重启系统

数据库 2

2、进入MySQL控制台

因为安装的过程中没让设置密码,可能密码为空,但无论如何都进不去mysql。

  mysql -uroot -p #直接按回车,这时不需要输入root密码。

 

3、修改root密码

那么该怎么做呢,接下来就将这个解决方法自我总结记录一下。

  update mysql.user set password=password(‘123456’) where User=”root”
and Host=”localhost”; flush privileges; #刷新系统授权表

step1:在ubuntu的terminal(也即终端)上输入sudo vim
/etc/mysql/mysql.conf.d/mysqld.cnf,进入到这个配置文件,然后在这个配置文件中的[mysqld]这一块中加入skip-grant-tables这句话。

4、取消/etc/my.cnf中的skip-grant-tables

 1 [mysqld]
 2 #
 3 # * Basic Settings
 4 #
 5 user              = mysql
 6 pid-file          = /var/run/mysqld/mysqld.pid
 7 socket           = /var/run/mysqld/mysqld.sock
 8 port              = 3306
 9 basedir          = /usr
10 datadir          = /var/lib/mysql
11 tmpdir          = /tmp
12 lc-messages-dir   = /usr/share/mysql
13 skip-external-locking
14 character-set-server=utf8
15 collation-server=utf8_general_ci
16 skip-grant-tables

  vi /etc/my.cnf 编辑文件,找到[mysqld],删除skip-grant-tables这一行
:wq! #保存退出

作用就是让你可以不用密码登录进去mysql。

5、重启mysql

保存:wq,退出。输入:service mysql restart,重新启动mysql。

  service mysqld restart
#重启mysql,这个时候mysql的root密码已经修改为123456

 

6、进入mysql控制台

step2:在终端上输入mysql -uroot
-p,遇见输入密码的提示直接回车即可,进入mysql后,分别执行下面三句话:

  mysql -uroot -p #进入mysql控制台

1 use mysql;   然后敲回车
2 update user set authentication_string=password("你的密码") where user="root"  然后敲回车
3 flush privileges  然后敲回车

  密码 #输入密码

结果如下图:

OK。就这么简单。

数据库 3

然后输入quit,退出mysql。

 

step3:重新进入到mysqld.cnf文件中去把刚开始加的skip-grant-tables这条语句给注释掉。

 1 [mysqld]
 2 #
 3 # * Basic Settings
 4 #
 5 user              = mysql
 6 pid-file          = /var/run/mysqld/mysqld.pid
 7 socket           = /var/run/mysqld/mysqld.sock
 8 port              = 3306
 9 basedir          = /usr
10 datadir          = /var/lib/mysql
11 tmpdir          = /tmp
12 lc-messages-dir   = /usr/share/mysql
13 skip-external-locking
14 character-set-server=utf8
15 collation-server=utf8_general_ci
16 # skip-grant-tables

再返回终端输入mysql -uroot -p,应该就可以进入数据库了。

 

step4:如果此时还是报出错误,那么就需要返回step3中,把注释掉的那条语句重新生效(就是删除#符号),重新进入mysql中,先选择一个数据库(use
mysql),然后输入select user,plugin from user,看下图:

数据库 4

从图中可以看到在执行了select user,plugin from
user后,错误原因是因为plugin
root的字段是auth_socket,那我们改掉它为下面的mysql_native_password就行了。输入:

1 update user set authentication_string=password("ln122920"),plugin='mysql_native_password' where user='root'

然后回车执行以下,再输入select user,plugin from
user;回车,我们能看到root用户的字段改成功了。

数据库 5

 

最后quit退出。返回执行step3。

那么这个问题就完全解决了。

参考链接:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图