昨天另外一个项目的小伙伴打来电话,说是他们项目节后准备在MYSQL上作一次数据迁移,打算先在本地WINDOWS上MYSQL测试后,再将整个计划拿来与老外讨论.目前遇到一个很奇葩的事情,原先MYSQL DBA 1个月前离职了,在离职交接中LINUX服务器上的MYSQL文档都发给项目组了,可是一台本地WINDOWS上的MYSQL由于不多有人使用,因此该DBA可能遗忘了交接这个MYSQL的文档.如今小伙伴急着用,因此让我帮忙重置MYSQL ROOT用户的密码. 哥这种半吊子MYSQL DBA也只好赶鸭子上架,在网络上查询资料发现方法大同小异, 多数是经过先SKIP GRANT TABLE,而后在另外一DOS下从新登陆MYSQL而后更改权限库中的ROOT密码;可是在该机器上测试时发现跳过权限检查后在另外一个DOS下登陆MYSQL总报错,通过反复测试发现下面的处理流程可用:mysql
1. 先用DOS命令' net stop mysql'关闭MYSQL服务,若是DOS命令不能使用则要先去环境变量中加入相似‘;%SystemRoot%\system32‘这类参数.sql
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 密码流程吧.spa
5. 用常规UPDATE语句去更新MYSQL USER表中ROOT的密码便可:命令行
update mysql.user set authentication_string=password('123456') where user='root' and Host ='localhost';
code
注意,MYSQL5.7以后USER 表中PASSWORD字段更改成authentication_string,因此这里咱们使用authentication_string.ip
6.更新成功以后是第三个要注意的地方,在MYSQL命令行输入 ' flush privileges',通知系统权限方面的改变.
7.最后退出,重启,发现修改为功.