mysql8.0.18用什么jdk_升级最新技术 jdk11.0.4 mysql8.0.17

![](/api/file/getImage?fileId=5d5f57ab16199b2a52001b8a)

## 前言

话说我刚学java的时候,就爱用新技术,当时jdk 1.8 , mysql 5.6算最新了。一眨眼3~4年了,还在用oracle jdk 1.8 & mysql 5.7。。。

最近打算在服务器上做3个重要的变更

1. 开发环境和生产环境 全部改用jdk 11,其中生产环境用openjdk 11.0.4

2. mysql升级到社区版本8.0.17,其实对Mariadb也挺有好感,但目前还是只作为研究先。

3. 迁移日志表,最近发现日志表放在mysql中频繁写入读取,会严重占用内存。打算的方案1是日志全部写在mongodb,方案2是学nginx全部写日志文件。

补充一下为什么用jdk11不用12,因为jdk 11是长期支持版本,理论上可以支持到java 17为止。用到生产环境可以减少折腾带来的不稳定性。

## 折腾

windows下如何折腾就不赘述了,说下我另一台linux deepin下如何卸载旧版安装新版

### Mysql

#### 卸载5.7

```shell

# 卸载5.7

sudo apt-get autoremove --purge mysql-server

sudo apt-get autoremove mysql-server

sudo apt-get remove mysql-common

sudo dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

```

#### 安装8.0

先在这个页面https://dev.mysql.com/downloads/repo/apt/ 下载mysql-apt-config

安装命令

```shell

dpkg -i mysql-apt-config_0.8.13-1_all.deb

```

后面的选择非常关键了,如果选错容易gg

必须按照系统来,可以停在选择页面去百度下,每个代号是什么意思。总之我是deepin 15.11,对应的选择是deebian的第二个 意思是deebian 9

下一步是

```shell

sudo apt update

sudo apt install mysql-server

```

如果这里出来的内容里有mariadb就废废了,如果是mysql-server-8.0就对了。

选错的解决方法就是彻底卸载mysql-apt-config

```shell

dpkg -r mysql-apt-config_0.8.13-1_all.deb

dpkg --purge mysql-apt-config_0.8.13-1_all.deb

```

然后从头再过一遍

## 填坑

### navicat连mysql报错

错误信息:

`Authentication plugin 'caching_sha2_password'`

参考资料:

https://blog.csdn.net/qq_42006661/article/details/84074200

其实这个问题和linux下是一样的,首次安装必须要用命令行登录一次,并且修改一次密码。大致流程就是

```cmd

# 具体路径要根据实际安装情况

cd C:\Program Files\MySQL\MySQL Server 8.0\bin

# 账号密码登录

mysql -u root -p

# 修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '这里输入新密码';

# 退出mysql

exit

```

### 项目启动报时区错误(错误示范,将导致时间快8小时)

(写在前面,本条的解决方法为错误示范,正确示范参考下一条)

错误信息:`The server time zone value '�й���׼ʱ��' is unrecogni`

参考资料:

https://blog.csdn.net/Untara/article/details/89959311

根据网上大神说的是可能和旧版本卸载有关?这个我并不确定,但我选择用他推荐的方案2,修改mysql配置的连接url,末尾加上`serverTimezone=UTC`

例如:

```config

jdbc:mysql://localhost:3306/yzu?serverTimezone=UTC

```

### 写入数据的时间慢8小时,或者查询以前的数据的时间快8小时

这是一个坑中之坑,因为上一个报错,真正的原因是my.cnf没有默认时区(mysql8开始初始配置文件没有默认时区),如果直接给Java代码中的`jdbc:mysql`的`url`末尾加上serverTimezone=UTC,会导致用默认时区UTC时间,实际中国正确的时区是东八区,比UTC时间快8小时。一旦设置设置`jdbc:mysql`的`url`为UTC时间,会导致写入数据库数据中的时间慢8小时,如果以前时区正常的时候插入过正确的时间数据,现在查询就会快8小时。而且`jdbc:mysql`的`url`的优先级又比较高,即便百度了以后,改了mysql配置文件,是无效,因为jdbc连接的url的优先级更高。

所以使用下列方法解决问题之前,先把jdbc:mysql....后面的`serverTimezone=UTC`去掉,如果有的话!

下面提到的3个方案,任选一个即可。

#### 解决方案1

改变mysql配置文件 加入默认时区 东八区

```shell

vim /etc/my.cnf

# [mysqld]的末尾增加一条

default-time-zone = '+08:00'

# 保存并退出

:wq

# 重启mysql

systemctl restart mysql

```

#### 解决方案2

改变jdbc url 为 东八区

```config

jdbc:mysql://localhost:3306/yzu?serverTimezone=GMT%2B8

```

这里的GMT%2B8 其实就是GMT+8 代表GMT时间,东八区

用`%2B`来替代`+`,是因为+在配置文件属于特殊字符,不能正确识别,只有转义成`%2B`才可以正确识别

#### 解决方案3

改变jdbc url 为 上海时间

```config

jdbc:mysql://localhost:3306/yzu?serverTimezone=Asia/Shanghai

```

原理同方法2,只是从指定东八区,改为指定时区为上海

(至于为什么不是北京时间,我也不知道,可能也可以吧,没实验过。。。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值