MySQL 5.7.30 的安装/升级(所有可能的坑都在这里)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL 5.7.30 的安装/升级(所有可能的坑都在这里)

楔子

由于之前电脑上安装的MySQL版本是比较老的了,大概是5.1的版本,不支持JSON字段功能。而最新开发部门开发的的编辑器产品,使用到了JSON字段的功能。因此需要升级MySQL版本,升级的目标版本是MySQL 5.7.30(虽然最新版本已经到8.x,但是5.7基本够用了)。发现在升级安装过程中,会有一些坑,所以使用本文记录一下。


卸载老版本


首先需要卸载老的版本,卸载其实也挺简单,只需要移除MySQL服务即可,首先打开CMD,然后cd到MySQL的bin目录,然后输入下面的命令移除MySQL服务:


mysqld --remove mysql
//需要注意的是: “msyql” 是服务名称,安装的时候如果没有指定服务名称,
//默认名称是MySQL(windows下不区分大小写);
// 如果安装的时候指定了名称,上面的名称需要修改为该指定的名称。


微信图片_20220424121821.pngremove msyql


需要注意的一点是,我们删除了MySQL服务之后,有可能在windows的服务的列表里面还有,保留在哪儿也没啥影响,但是如果你又洁癖,一定要删除,就需要去删除注册表中对应键,参考下图。当然对于我们升级来说,后续还需要安装windows服务,可以直接覆盖。

注册表的图


然后删除老的MySQL相关文件夹,以及删除相关的环境变量的配置。


需要注意的是,如果数据文件和MySQL程序在一个文件夹下,需要保留数据


安装5.7.30版本


接下来就是安装5.7.30版本,第一步是下载。


下载MySQL


下载地址是:https://dev.mysql.com/downloads/mysql/

点击上面链接,进入到下载页面,由于最新的版本是8.x,所以默认是8.x的版本。可以通过点击“Looking for the latest GA

version ”选择版本,然后下载免安装版本:


微信图片_20220424121840.png

下载


解压MySQL


下载完成后,解压到你想要安装的目录,比如我的目录是:

D:\Program Files (x86)\mysql-5.7.30-winx64


微信图片_20220424121844.png

目录


配置环境变量


在系统变量path后面追加D:\Program Files (x86)\mysql-5.7.30-winx64\bin,如图所示。


微信图片_20220424121849.png

环境变量


创建配置文件my.ini


5.7.30版本的安装包默认是不带配置文件my.ini的。所以需要创建自己创建一个my.ini的文件。手动创建my.ini文件,然后输入如下内容:


[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql安装目录
basedir=D:\Program Files (x86)\mysql-5.7.30-winx64
# 设置mysql数据库的数据存放目录
datadir=D:\Program Files (x86)\mysql-5.7.30-winx64\data
# 运行最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 参加新表时将使用的默认存储引擎
default-storage-engine=INNODB


此处会有一些坑,需要避免。


my.ini注意事项一


my.ini必须保存为ANSI格式(配置文件默认就是是ANSI编码格式,可能会不小心保存为其他格式,比如UTF-8),否正会出现后续的服务不能启动的情况。如果你不确定my.ini是什么格式,可以另存为:


微信图片_20220424121857.png

格式ANSI


my.ini注意事项二


如果是从低版本升级到5.7的版本,可能为了保留之前的配置,就直接把之前的配置文件拷贝过来。这个时候就要注意了,因为以前很多低版本的参数,已经不适合高版本的。如果不修改过来,就会导致后续的服务启动失败。

比如笔者遇到的一个导致错误的参数是:


#table_cache=256  // 低版本的
table_open_cache=256 // 高版本的


如果一定要保留老版本的配置,又对于新版本的参数修改不是很熟悉,那么可以再配置文件中把日志功能假设,这样再报错的时候,可以通过查看日志了解详情。如下配置日志路径即可:


log_error=D:/mysql-5.7/error.log


然后启动失败后,可以通过日志查看报错,比如:


微信图片_20220424121902.png

错误日志


更多可能的错误参数:


unknown variable 'key-buffer=256M' //去掉改项即可。
unknown variable 'table-cache=512'  //修改为table_open_cache即可。
unknown variable 'thread-concurrency=8' //去掉改项,5.7已结废弃。


windows 服务启动失败,不会把错误详情标识出来,只会简单说一句服务启动失败。只能通过配置日志文件来查看。


微信图片_20220424121910.png
微信图片_20220424121910.png服务无法启动

安装MySQL服务


最重要的一步就是安装MySQL服务。首先进入cmd界面,CD到MySQL的bin目录(注意此处一定要到bin目录下去执行),执行如下命令:


mysqld --install [服务名称,默认是MySQL]


截图如下:


微信图片_20220424121921.png

安装服务


执行命令后,会提示服务安装成功。


注意事项一


需要注意的是,有可能出现Install/Remove of the Service Denied! 的提示错误。

原因:普通用户模式权限下的cmd安装mysql会出现这样的报错提示。通过管理员模式运行cmd即可:


微信图片_20220424121925.png

管理员身份运行cmd


其他步骤如果出现没有执行权限的情况,也都请用管理员省份运行即可。



注意事项二


有些电脑会出现找不到MSVCP120.dll的错误:


微信图片_20220424121929.png

错误


这种错误是由于未安装 vcredist 引起的

下载 vcredist 地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=40784

安装,位置默认即可,安装成功之后,重新安装服务即可。


初始化MySQL


MySQL5.7是不带data目录的,所以需要初始化MySQL,生产data目录,也比较简单,执行如下命令即可:


mysqld --initialize-insecure --user=mysql


需要注意的是,有的文章介绍的是此处用 “mysqld --initialize”, “mysqld --initialize-insecure”和 “mysqld --initialize”的区别在于前者会创建一个空密码,而后者会创建一个随机密码。因此用 “mysqld --initialize”,最好加上 “--console”,可以把随机密码打印出来(注意 “--console”仅限于windows)


微信图片_20220424121935.png

console


微信图片_20220424121940.pngconsole


--user=msyql 主要用于在linux或者unix系统下给与把data目录授权给mysql账号,在windows 下可以不必使用,带上也无所谓。


数据初始化参考链接:https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/data-directory-initialization.html

初始化完成后,会生成data目录。


注意事项一


如果初始化出现错误:“--initialize specified but the data directory has files in it. Aborting. ” 那是因为你可能手动创建了data目录,并且里面包含了文件(比如升级可能这样操作),此时要做的就是删除data目录即可,至于升级,可以后续考虑。


此时说的data目录,是指 my.ini文件里面 指定的目录 ,未必是mysql安装文件下的目录:

datadir=D:\Develop\MySQL\mysql-8.0.12-winx64\data


启动MySQL服务


windows下启动MySQL服务,可以使用如下命令即可:


net start MySQL


微信图片_20220424121944.pngimage.png


设置MySQL服务密码


使用mysqladmin可以设置密码。启动MySQL服务之后,输入如下命令:


微信图片_20220424121947.png密码


输入老的密码(通过前面操作,老密码为空),然后输入新的密码,确认新的密码,即可设置成功。


注意事项一


如果前面初始化的时候未初始化未空密码,又不小心忘记了初始化密码,会出现下面的问题,无法登陆及修改密码:

“Access denied for user 'root'@'localhost'”

通过如下步骤解决:


添加skip-grant-tables


再配置文件my.ini中添加skip-grant-tables:


微信图片_20220424121952.png

image.png


重启MySQL服务


先停止MySQL服务,然后再启动MySQL服务,即可:


微信图片_20220424121957.pngimage.png


修改密码


首先登陆mysql,此时不需要密码,如下:


微信图片_20220424122000.png

登陆


通过sql语句修改密码,首先 use mysql ;然后update 更新密码:


微信图片_20220424122003.png

修改密码


然后退出mysql即可。


删除skip-grant-tables 重启MySQL服务


首先从my.ini中删除skip-grant-tables ,然后 net stop mysql, net start mysql 重启服务。


MySQL老数据升级到5.7


要升级老数据,如果是从5.x版本升级上来,基本上只需要把相关的数据文件拷贝到data文件夹下。需要注意的是,如果使用了 innodb,还需要把“ibdata”等文件拷贝过来。否正会报表不存在的情况:


error: 1146: Table 'a_content' doesn't exist


innodb是MYSQL数据库一种流行的数据库引擎,支持事务(行级),ibdata用来储存文件的数据,而库名的文件夹里面的那些表文件只是结构而已,由于新版的mysql默认试innodb,所以ibdata1文件默认就存在了,少了这个文件有的数据表就会出错。

如果升级过程中,存在数据损坏,可以使用repair命令进行修复:


repair table tablename


正常经过上述操作,就可以了,如果还有问题,可以尝试使用升级命令mysql_upgrade对数据进行升级(也建议使用改命令升级,不然后续出问题,可能会不好定位)

https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html


//升级mysql,mysql_upgrade检查不兼容的表,更新grant表;
mysql_upgrade -uroot -p


升级速度具体看data目录的大小情况而定。

以上全文。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
安全 关系型数据库 MySQL
mysql8安装
本文介绍了在 CentOS 7 上安装 MySQL 5.7 的详细步骤,包括下载、环境准备、系统配置、安装过程及启动方法。首先通过wget下载MySQL压缩包并解压至指定目录,接着进行主机名修改、依赖安装、用户与用户组创建、ulimit配置等环境准备工作。随后,对操作系统环境进行调整,如文件句柄和进程数的设置、内核参数优化、SELinux和防火墙的关闭等。最后,完成MySQL的安装配置,创建数据和日志目录,初始化MySQL,并设置启动脚本和环境变量,确保MySQL能够正常运行。
70 4
|
29天前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
512 67
|
22天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
184 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
6天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
19 3
|
7天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
15 2
|
8天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
9天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
45 2
|
21天前
|
SQL Oracle 关系型数据库
安装最新 MySQL 8.0 数据库(教学用)
安装最新 MySQL 8.0 数据库(教学用)
93 4
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
22天前
|
Ubuntu 关系型数据库 MySQL
Linux系统MySQL安装
【10月更文挑战第19天】本文介绍了在 Linux 系统上安装 MySQL 的步骤,包括安装前准备、安装 MySQL、启动 MySQL 服务、配置 MySQL 以及验证安装。适用于 Ubuntu/Debian 和 CentOS/Fedora 系统,提供了详细的命令示例。
118 1