一、场景描述:
首先:原因是因为我在做一个项目的时候,创建表结构的时候显示报错“1067 - Invalid default value for ‘create_time‘错误”,这时候我意识到我的MySQL版本太低了,我当时是5.5,然后我就需要升级到MySQL5.7.
MySQL升级
首先科普一下:Mysql的升级方式分为两种:原地升级和逻辑升级。这两种升级方式,本质没有什么区别的。
只是在对数据文件的处理上有些区别而已。原地升级是直接将数据文件进行拷贝,而逻辑升级对数据文件的处理方式是通过逻辑导出导入,需要用到mysqldump。
逻辑升级大家都理解,这种方式在数据量比较大的情况下花费时间比较长。
二、步骤操作:
1.下载MySQL5.7.29 的zip包文件,下载地址:https://dev.mysql.com/downloads/mysql/(最新的mysql5.7的压缩包解压开你会发现,没有data目录和my.ini文件。)
2.解压到你想安装的路径下(与原5.6同路径就好)
3.将5.6 下的data文件和my.ini文件copy至5.7路径下()
4.移除MySQL5.6服务
4.1 为了避免执行权限问题,请用Win+R,以管理员身份运行
4.2:cd 到5.6的bin目录下,并执行如下命令(将现有的mysql关闭)
mysqld --remove MySQL5.6
4.3你可能会遇到以下问题service does not exist!!!:不着急,继续操作!!!
再次执行,至此,5.6服务被我们移除掉了这里总结一下,可能会有人不理解:就是你remove时不用加后缀5.几什么的,你直接输入remove MySQL就可以了!!!
5.添加新版本:
5.1 同样,cd到5.7 的bin目录下,并执行如下命令
mysqld --install mysql5.7
输入以下命令
net start mysql5.7
好啦,这里我就替大家踩了很多坑了,接下来我一一给大家列举出来,并且给出解决方法
首先是问题一:
这里一开始就是无法启动,原因是:我一开始是直接复制原来的my.ini配置文件到新版的mysql目录下,使用就无法启动
解决办法:
可直接复制该文件
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\tools\mysql-5.7.25-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
datadir=D:\\tools\mysql-5.7.25-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
问题二:
在cmd命令窗口中输入mysql,显示mysql 不是内部或外部命令!
这里是没有配置环境变量的原因,导致我每次要启动MySQL服务总是要cd到bin目录下才能识别的到!
这里教大家一下配置环境变量:
复制路径
找到环境变量的窗口
问题三:
在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问
对于出现拒绝访问root用户的解决方案
错误1045(28000):用户'root'@'localhost'(使用密码:YES)拒绝访问
首先解析此英文:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES);
解析的地方有两处:1.Access denied(拒绝访问);2.using password:NO/YES
出现access denied的原因有如下可能:
1)mysql的服务器停止:
若MySQL已经没有启动,重启MySQL服务器:systemctl restart mysqld
2)用户的端口号或者IP导致:
若用户的端口号与IP(3306/3307)不一致,打开my.ini文件进行编辑。全部编辑替换为: port=X
3)mysql的配置文件错误----my.ini等文件:
my.ini文件误输入无效内容,不知道到何处。复制替换该文件;有人已经对my.ini文件进行解释以及注释:https://blog.csdn.net/lienfeng6/article/details/78140404
4)root用户的密码错误(后面解决)
解决方案:
vim /etc/my.cnf文件;
在[mysqld]后添加skip-grant-tables(登录时跳过权限检查)
重启MySQL服务
net start mysql5.7
输入 mysql
进入mysql后,输入
use mysql;
登录mysql,输入mysql –uroot –p;直接回车(Enter)如果报:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
输入:
flush privileges;
最后记得把my.ini的skip-grant-tables删除或者注释掉!!!
6、升级
mysql:mysql_upgrade -uroot -p
这个过程MySQL5.7是把步骤3copy来的data数据加入的过程
关闭,重新启动即可,至此,你的MySQL升级就算完成了
验证以下:
最后给大家,说一下
为什么cmd中输入mysql,显示Welcome to the MySQL monitor. 意思就是直接进入了MySQL
这里官方文档给出了解释,你在请求mysql服务器时,window是默认ODBC
你自己要加上mysql -uroot -p
来进入你要的用户和密码!!!