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

楔子

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

卸载老版本

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

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

remove msyql

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

注册表的图redis

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

须要注意的是,若是数据文件和MySQL程序在一个文件夹下,须要保留数据数据库

安装5.7.30版本

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

下载MySQL

下载地址是:dev.mysql.com/downloads/m… 点击上面连接,进入到下载页面,因为最新的版本是8.x,因此默认是8.x的版本。能够经过点击“Looking for the latest GA version ”选择版本,而后下载免安装版本: bash

下载

解压MySQL

下载完成后,解压到你想要安装的目录,好比个人目录是: D:\Program Files (x86)\mysql-5.7.30-winx64编辑器

目录

配置环境变量

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

环境变量

建立配置文件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是什么格式,能够另存为:

格式ANSI

my.ini注意事项二

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

好比笔者遇到的一个致使错误的参数是:

#table_cache=256 // 低版本的
table_open_cache=256 // 高版本的
复制代码

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

log_error=D:/mysql-5.7/error.log
复制代码

而后启动失败后,能够经过日志查看报错,好比:

错误日志

更多可能的错误参数:

unknown variable 'key-buffer=256M' //去掉改项便可。

unknown variable 'table-cache=512'  //修改成table_open_cache便可。

unknown variable 'thread-concurrency=8' //去掉改项,5.7已结废弃。
复制代码

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

服务没法启动

安装MySQL服务

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

mysqld --install [服务名称,默认是MySQL]
复制代码

截图以下:

安装服务

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

注意事项一

须要注意的是,有可能出现Install/Remove of the Service Denied! 的提示错误。 缘由:普通用户模式权限下的cmd安装mysql会出现这样的报错提示。经过管理员模式运行cmd便可:

管理员身份运行cmd
其余步骤若是出现没有执行权限的状况,也都请用管理员省份运行便可。

注意事项二

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

错误
这种错误是因为未安装 vcredist 引发的 下载 vcredist 地址: www.microsoft.com/zh-CN/downl… 安装,位置默认便可,安装成功以后,从新安装服务便可。

初始化MySQL

MySQL5.7是不带data目录的,因此须要初始化MySQL,生产data目录,也比较简单,执行以下命令便可:

mysqld --initialize-insecure --user=mysql
复制代码

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

console

console

--user=msyql 主要用于在linux或者unix系统下给与把data目录受权给mysql帐号,在windows 下能够没必要使用,带上也无所谓。

数据初始化参考连接:dev.mysql.com/doc/mysql-i…

初始化完成后,会生成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
复制代码

image.png

设置MySQL服务密码

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

密码

输入老的密码(经过前面操做,老密码为空),而后输入新的密码,确认新的密码,便可设置成功。

注意事项一

若是前面初始化的时候未初始化未空密码,又不当心忘记了初始化密码,会出现下面的问题,没法登录及修改密码: “Access denied for user 'root'@'localhost'”

经过以下步骤解决:

添加skip-grant-tables

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

image.png

重启MySQL服务

先中止MySQL服务,而后再启动MySQL服务,便可:

image.png

修改密码

首先登录mysql,此时不须要密码,以下:

登录

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

修改密码

而后退出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对数据进行升级(也建议使用改命令升级,否则后续出问题,可能会很差定位) dev.mysql.com/doc/refman/…

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

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

以上全文。

更多精彩内容,请关注公众号“ITman彪叔”。

ITman彪叔公众号
相关文章
相关标签/搜索