# MYSQL 在 windows 下的简单安装和配置

# 一:前言

主要是便于工作中的开发工作,有时候我们项目中连接数据库的时候, 不一定能跟客户的数据库连通,所以需要把客户的数据库 down 下来一个 备份在自己电脑上创建一个本地的数据库 ,因此基于这个背景下记录一下在本机安装 MYSQL 的步骤以及一些注意事项。

# 二:下载 MYSQL

去官网下载 MYSQL 即可,MYSQL 的安装方式有很多,官网提供有 exe 文件的安装 ,笔记本电脑各软件商店也有一键式安装,在这里我们模拟给一个不通网的环境下安装 MYSQL。

# 三:开始安装

# 1. 下载压缩包

因为是不通网的环境,我们下载压缩包,然后上传到我们的目标服务器(windows 或者 linux)

# 2. 安装(windows)

1. 将压缩包解压到对应的位置,解压后目录如下

2. 以管理员身份打开 cmd 窗口,进到 bin 目录下(切记:管理员身份,不然到 mysqld --install mysql 指令时必失败)

3. 手动创建配置文件 my.ini 并放入 bin 目录下,内容如下:

# 设置 mysql 的安装目录  
basedir=D:\\xxxxxxx
 
# 设置 mysql 数据库的数据的存放目录  
 
datadir=D:\\xxxxxx

4. 新建 data 文件夹

在此说明一下:上图的解压后项目结构中有 data 文件夹是因为在此步骤自己新建的

5. 执行命令 mysqld --initialize,刚新建的 data 目录下会生成很多文件,其中有一个.err 的文件,打开获取临时密码,找到有一行是 A temporary password 开头的,结尾冒号后面就是临时密码。

若此步骤出现执行报错 ( 由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。 )

原因是缺少文件,从 链接地址 下载然后放到 bin 目录下面重新执行命令即可。

6. 安装 mysql

执行命令

mysqld --install mysql

7. 执行命令

net start mysql

8. 配置环境变量:此电脑右键 —> 属性 —> 高级系统设置 —> 环境变量

将 MySQL 文件夹的 bin 目录的路径复制,点击右侧新建,添加到环境变量。

在用户变量中,选中 path 那行

9. 执行以下命令连接 mysql

mysql -u root -p

会提示输入密码,密码就是你刚刚文件中的临时密码

10. 修改密码

进入 mysql 后执行以下命令

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

退出命令 : exit

重新登录 : mysql -u root -p

11. 开启远程连接

依次执行以下语句或命令

CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

# 四:注意事项

说明:后期可能会更新此部分,此部分记录一些后续可能遇到的问题

# 1. 第一个问题:时区问题

本地安装的初衷就是为了调试代码方便,但是在上述步骤完成之后,导入了客户的数据库之后,在项目启动连接的时候出现了如下报错。

The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrec...

问题在哪呢?
答案是:mysql 默认的是美国的时区,而我们中国大陆要比他们迟 8 小时,采用 + 8:00 格式。

解析:使用的数据库是 MySQL,SpringBoot2.1 在你没有指定 MySQL 驱动版本的情况下它自动依赖的驱动是 8.0.12 很高的版本,这是由于数据库和系统时区差异所造成的,在 jdbc 连接的 url 后面加上 serverTimezone=GMT 即可解决问题,如果需要使用 gmt+8 时区,需要写成 GMT%2B8,否则会被解析为空。再一个解决办法就是使用低版本的 MySQL jdbc 驱动,5.1.28 不会存在时区的问题。

解决方案:此处只说明我自己的方案,可能有其他解决方案或者我这个方案并不一定成功有效。

#直接执行 sql
set global time_zone='+8:00'

如果依旧有问题,尝试在程序中 jdbc 驱动配置 url 加上 serverTimezone=UTC

# 2. 第二个问题,导表问题

可能会有这样的问题,从远程数据库导出的 sql 文件中所使用的角色与你项目中所使用的角色不是一个角色(mysql 安装后就是 root 角色),所以我们根据报错去创建角色并且给角色赋予权限即可。

当然,如果数据库已经有该角色了,则是该角色没有该表权限,给这个角色赋予上表权限即可。

具体的创建命令参考如下,扩展可自行百度。

#创建
CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
#赋权
grant all privileges on *.* to xxx@"%" identified by ".";
#刷新
flush privileges;