这两天想做一个项目,需要把MySQL的版本更换为8.0。在更换版本的过程中遇到了一些问题,花费了很多时间才找到解决方法。现在将这些问题和解决方法记录下来,以后要更换版本时有个参考,也希望能给需要更换MySQL版本的朋友们一点帮助。
MySQL的卸载
-
建议卸载MySQL之前做好数据备份!!!
-
停止MySQL服务。win10可以直接在搜索框中搜索“服务”,打开找到MySQL,停止服务
-
卸载MySQL。在控制面板中找到MySQL并卸载(控制面板里没有就不用管了)
-
删除MySQL的安装目录。
-
清理C:\Program Files (x86)\MySQL文件夹与C:\ProgramData\MySQL,ProgramData可能是隐藏的,通过勾选 查看-隐藏的项目框 打开
-
清理注册表。找到如下文件夹并删除。"win+R"并输入"regedit"进入注册表编辑器,win10也可直接搜索注册表编辑器打开。一些文件夹找不到就不管它了。
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL
-
删除环境变量中的MySQL环境变量。
-
管理员身份运行cmd -> sc delete mysql 删除MySQL服务
MySQL的安装
-
到官网 https://www.mysql.com/ 下载mysql压缩包并解压到需要安装的位置
-
配置环境变量,在Path中新建,并添加mysql安装位置的bin文件夹
- 例如:E:\mysql\mysql-8.0.32-winx64\bin
-
在安装目录新建 my.ini 文件(和bin文件同级),内容如下:
[mysqld]
basedir=E:\mysql\mysql-8.0.32-winx64
datadir=E:\mysql\mysql-8.0.32-winx64\data
port=3306
skip-grant-tables -
管理员模式进入cmd,运行“ mysqld –install ”命令,出现出现 Service successfully installed 表示安装成功
-
输入 mysqld --initialize-insecure --user=mysql 初始化数据文件
-
输入net start mysql 重启mysql服务
-
输入 mysql –u root –p 进入mysql管理,由于my.ini中的skip-grant-tables跳过权限管理,输入密码时随意,也可为空(命令复制可能出问题,建议手打)
- 若出现 ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost:3306’ (10061),则输入mysqld --console,再管理员cmd重新mysqld --console(上一个窗口不要关闭)
- 若第一个窗口崩溃,出现:“7ff64e9a8408 mysqld.exe!my_print_stacktrace()[stacktrace.cc:429]”等问题时,在my.ini中增加一句:shared-memory
- 若出现 ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost:3306’ (10061),则输入mysqld --console,再管理员cmd重新mysqld --console(上一个窗口不要关闭)
-
修改密码。输入更新语句时结尾需要加分号 ;
update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host=‘localhost’
修改密码,其中123456为自定义密码---------mysql 8.0版本不可用MySQL 8.0 版本使用下列语句修改密码:
update user set authentication_string=‘’ where user=‘root’;
- 若出现“No database selected”,输入“use mysql”
alter user ‘root’@‘localhost’ identified by ‘123456’;
- 若出现“ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement”,则 flush privileges ;刷新权限后再重新设置密码
-
输入 flush privileges 刷新权限
-
删除my.ini中的“skip-grant-tables”(取消跳过权限管理)
-
重启mysql即可(net stop mysql net start mysql),也可通过 服务-MySQL 点击重启。至此MySQL重装完成
Navicat连接不上重装的MySQL
可能1:MySQL 端口不是3306
- 在mysql的命令行中输入: show global variables like ‘port’; 查看mysql端口,发现端口为0,而不是3306
- 继续输入:show variables like “skip_networking”; 发现状态为ON
- 原因为:在my.ini中设置跳过权限管理,导致skip_networking打开了,取消跳过即可。若是确实有跳过登录权限的需要,重启电脑,大概率解决问题!!
可能2:安装的MySQL版本为8.0,加密规则与mysql 5 版本不同,密码错误
- 在mysql命令行中输入
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;// “123456” 为自定义密码
- 若修改失败,则 “ select user,host from user; ” ,查看root对应的host。若不为“localhost”而是“ % ”,就将语句改为:
ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘password’;