- 问题核心
- 原因
- 解决方案
1、问题核心
1.1核心问题
mysql服务启动,点开客户端navicat图形界面,打开数据库提示1045 Access denied for user
‘root’@’localhost’(using password:YES)。如下图:
链接1
链接21.2解决过程中其他并发问题
在cmd窗口解决1045问题时,由于MySQL5.7版本没有password这个字段了,password字段改成了authentication_string,所以会出现1054:Unknown column ‘password’ in ‘field list’.错误。如下图所示:
链接32、原因
2.1数据库密码被篡改了!
没错,就是这个原因。但是很多人会立马反驳,我自己的电脑一直用着好好的,怎么会被篡改了呢?黑客的手段厉害着呢,篡改你的数据库密码不是主要目的,目的是篡改后进入你的数据库备份数据库文件然后删除本地数据库,要挟你索要比特币才是主要目的。2.数据库权限变更了!
这个原因与你机器的账户权限变更有很大的关系3、解决方案(更改密码指定,5.7版本以上)
3.1方法一:重新设置root用户密码(推荐)
在Windows平台下操作步骤如下:1.编辑mysql配置文件my.ini
在[mysqld]这个条目下加入 skip-grant-tables 保存退出后重启mysql服务
skip-grant-tables 用于启动mysql后,关闭权限的检查更改权限,方便改root密码
但会降低数据库安全性,修改密码成功后需要注释掉(加#)。
2.Win+R,打开cmd命令窗口,并右键以管理员身份运行
3.重启mysql服务a.停止MySQL服务:
①方法一:进入服务管理器:如果是作为Windows服务运行的服务器,
开始菜单->控制面板->管理工具->服务
或 菜单栏右键->任务管理器->服务
或 此电脑右键->管理->服务和应用程序->服务
如果服务器不是作为服务而运行的,可能需要使用任务管理器来强 制停止它。但后续还是需要cmd命令窗口来运行后续更改操作(从启动服务开始)。
②方法二:(推荐)先在cmd窗口中切换到MySQL安装目录的bin目录下,
输入 :net stop mysql
b.启动MySQL服务:
输入:net start mysql4.使用mysql数据库
输入:**mysql -u root -p **<br /> **出现 password:的时候直接回车**<br /> 由于启动mysql后用 skip-grant-tables关闭了权限,在cmd里面输入mysql -u root -p就可以不用密码登录了,出现 password:的时候直接回车可以进入,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为没有grant权限。
5.进入mysql数据库
mysql> **use mysql;**<br /> Database changed
6.给root用户设置新密码
mysql> update user set password=password("新密码") where user="root";<br /> Query OK, 1 rows affected (0.01 sec)<br /> Rows matched: 1 Changed: 1 Warnings: 0<br />由于MySQL5.7以上版本没有password这个字段了,password字段改成 authentication_string.<br />即将上边的改为:<br />**update user set authentication_string=password("新密码") where user="root";**
7.刷新数据库
mysql> **flush privileges; Query OK, 0 rows affected (0.00 sec)8.退出mysql
mysql> quit;
Bye9.再次修改my.ini
改好之后,再修改一下my.ini这个文件,把我们刚才加入的 “skip-grant-tables”这行删除,保存退出再重启mysql服务,再重新用Navicat连接就可以了。10.或cmd运行脚本修改
①.创建1个文本文件,并将下述命令置于单一行中:
SET authentication_string FOR ‘root’@’localhost’ = PASSWORD(‘**‘);
用任意名称保存该文件。在本例中,该文件为D:\mysql1\mysql-installer-community-5.7.37.0-init.txt(文件路径在安装目录下)。
②.进入DOS命令提示:开始菜单->运行-> cmd
如果你将MySQL安装到了另一位置,请对下述命令进行相应的调整。
在DOS命令提示符下,执行命令:
D:>D:\mysql1\mysql-installer-community-5.7.37.0\bin\mysqld-nt —init-file=D:\mysql1\mysql-installer-community-5.7.37.0\bin\mysql-init.txt
在服务器启动时,执行由“—init-file”选项(作用:在启动时从指定的文件中读取SQL命令)命名的文件的内容,更改根用户密码。当服务器成功启动后,应删除init.txt文件。
③.停止MySQL服务器,然后在正常模式下重启它。如果以服务方式运行服务器,应从Windows服务窗口启动它。如果以手动方式启动了服务器,能够像正常情形下一样使用命令。
卸载原有的数据库,包括主程序、注册表和安装目录文件夹,但一定要备份D:\mysql1\mysql-installer-community-5.7.37.0\data数据库文件,这是你之前数据库表文件等,要恢复数据库必须备份下来,后面才可以恢复数据。此外,此文件夹是默认隐藏的。
3.2、方法二:卸载重装(保存原有数据库data备份)
复制data文件夹下面你之前创建的数据库,名字都是对应的,你有印象就能知道哪个是你创建的数据库,D:\mysql1\mysql-installer-community-5.7.37.0\data数据库文件下还有三个文件也是必须备份的,看图:
备份这些文件后,卸载原来的数据库程序并删除文件夹和注册表,重装数据库后关闭数据库服务,把备份的文件放入对应的位置,有重名的点击替换,然后再重启数据库服务。这个时候打开数据库,原来的数据库已经存在了。虽然表存在异常,但原来保存的新建查询,加上外部的sql脚本可以恢复原有表。
3.3、其他方法:
1.方法一: (推荐)
mysql> use mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('你的新密码') where USER=’root’;
mysql> FLUSH PRIVILEGES;
mysql> quit
2.方法二:
直接使用/etc/mysql/debian.cnf文件中[client]节提供的用户名和密码:
# mysql -udebian-sys-maint -p
Enter password: <输入[client]节的密码>
mysql> UPDATE user SET authentication_string=PASSWORD(’newpassword’) where USER=’root’;
mysql> FLUSH PRIVILEGES;
mysql> quit
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>
mysql>
3.方法三:
#Windows:
#1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程
#2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:\mysql\ , CMD进入命令行
#3. 运行 d:\mysql\bin\mysqld-nt --skip-grant-tables 启动mysql,关闭权限的检查
#4. 运行 d:\mysql\bin\mysqladmin -u root flush-privileges password "newpassword" 重设root密码
#5. 重新启动mysql服务