首页 > 代码库 > MySQL WINDOWS下重置root用户密码过程
MySQL WINDOWS下重置root用户密码过程
昨天另一个项目的小伙伴打来电话,说是他们项目节后准备在MYSQL上做一次数据迁移,打算先在本地WINDOWS上MYSQL测试后,再将整个计划拿来与老外讨论.目前遇到一个很奇葩的事情,原先MYSQL DBA 1个月前离职了,在离职交接中LINUX服务器上的MYSQL文档都发给项目组了,但是一台本地WINDOWS上的MYSQL因为很少有人使用,所以该DBA可能遗忘了交接这个MYSQL的文档.现在小伙伴急着用,所以让我帮忙重置MYSQL ROOT用户的密码. 哥这种半吊子MYSQL DBA也只好赶鸭子上架,在网络上查询资料发现方法大同小异, 多数是通过先SKIP GRANT TABLE,然后在另一DOS下重新登录MYSQL然后更改权限库中的ROOT密码;但是在该机器上测试时发现跳过权限检查后在另一个DOS下登录MYSQL总报错,经过反复测试发现下面的处理流程可用:
1. 先用DOS命令‘ net stop mysql‘关闭MYSQL服务,如果DOS命令不能使用则要先去环境变量中加入类似‘;%SystemRoot%\system32‘这类参数.
2. 在DOS下切换到MYSQL安装文件的BIN文件夹下,输入命令‘mysqld --skip-grant-tables‘,注意,输入此命令后,正常情况下应为光标停止于下一行,如果DOS界面有提示信息则按信息提示进行处理.我遇到的情况是MYSQL安装文件夹下面DATA文件夹丢失,可能是因为误操作或者MYSQL升级成5.7所导致,所以使用SKIP命令会遇到问题,导致后面登录MYSQL失败.第一次发现该问题时,我首先手动分配了一个data的文件夹(手动分配会导致其他问题,在后面会详细描述).此时使用SKIP命令正常.
3. 这时我们需新打开一个DOS窗口,因为上一步输入SKIP命令后光标停止了,我们新打开DOS窗口,然后切换到MYSQL安装文件夹BIN目录下,输入MYSQL命令访问MYSQL.此时无需输入密码.
4.登录MYSQL成功后,我们输入‘USE MYSQL‘命令访问系统权限数据库.注意:在这里会遇到第二个问题,因为在第二步我第一次处理时选择手动分配DATA文件夹,所以系统中并没有权限数据库‘mysql‘,有考虑使用5.7之前版本的data文件但是觉得不靠谱,后来搜索资料后发现这种现象大多数是因为MYSQL升级导致的,使用以下命令,系统会自动创建data file及一些缺失的系统数据库:
mysqld --initialize-insecure --user=mysql
按照资料说法,初始化之后其实系统会建好默认数据库后默认将ROOT密码设置为空,但是我们已经到这一步了,还是继续尝试正常的修改ROOT 密码流程吧.
5. 用常规UPDATE语句去更新MYSQL USER表中ROOT的密码即可:
update mysql.user set authentication_string=password(‘123456‘) where user=‘root‘ and Host =‘localhost‘;
注意,MYSQL5.7之后USER 表中PASSWORD字段更改为authentication_string,所以这里我们使用authentication_string.
6.更新成功之后是第三个要注意的地方,在MYSQL命令行输入 ‘ flush privileges‘,通知系统权限方面的改变.
7.最后退出,重启,发现修改成功.
MySQL WINDOWS下重置root用户密码过程