JDBC调用Mysql8.0.13问题解决

一、Windows 10 上安装 MySQL 8.0.13

最新版本可以上官网在 MySQL 下载 中选择 Microsoft Windows(x86,64-bit) ,ZIP Archive 下载。无需在该网站注册信息。下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 F:\Mysql\mysql-8.0.13-winx64 下。

接下来我们需要配置下 MySQL 的配置文件

打开刚刚解压的文件夹 F:\Mysql\mysql-8.0.13-winx64 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=F:\\Mysql\\mysql-8.0.13-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=C:\\web\\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

接下来我们来启动下 MySQL 数据库:

以管理员身份打开 cmd 命令行工具,切换目录:

cd /d  F:\Mysql\mysql-8.0.13-winx64\bin

初始化数据库:

mysqld --initialize --console

执行完成后,会输出 root 用户的初始默认密码,如:

...
2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ
...

APWCY5ws&hjQ就是初始密码,后续登录需要用到,记得在关闭当前命令行之前先复制下来。

继续,在F:\Mysql\mysql-8.0.13-winx64\bin目录下:

执行数据库的安装、初始化mysql数据库的数据存放目录data以及mysql服务的启动。

mysqld install
mysqld --initialize-insecure 
net start mysql	

如果在执行第三条语句net start mysql出现:

发生系统错误 2。
系统找不到指定的文件。

原因:你服务的路径和安装的路径不一致造成的,之前安装过mysql后卸载的机器容易出现这样的问题。

解决方法:修改一下注册表。首先进入命令行,输入regedit,回车,进入注册表编辑器。选择 HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> services -> MySQL, 修改ImagePath的路径,为你的安装路径, 比如 F:\Mysql\mysql-8.0.13-winx64\bin\mysqld MySQL


二、登录 MySQL

如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:

mysql -u root -p

如果出现:

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

从错误的提示中可以看出MySQL服务没有启动,因此只需要启动MySQL服务就可以了

直接采用net start MySQL 就可以启动MySQL服务,但如果输入命令后仍然出现错误 :

服务名无效
请键入 NET HELPMSC 2185 以获得更多帮助。

原因:服务名不一致引起。在自定义安装的过程默认服务名可能会加上MYSQL的版本数字。

解决方案:系统搜索进入服务,找到其中的MySQL服务,检查其服务名是否有数字后缀,如:MYSQL80。此时再输入net start MySQL80,如果发生如下错误:

发生系统错误 5。
拒绝访问。

原因:权限不够

解决方案:以管理员身份运行CMD,系统搜索cmd之后右击以管理员的方式运行。

以上错误都不发生的正常情况如下:按回车确认会得到以下响应:

Enter password:

将我们刚刚复制下来初始密码输入,如果正确的话,就已经 成功进入数据库中了。命令提示符会一直以 mysq> 加一个闪烁的光标等待命令的输入, 输入 exit退出登录。

接下来我们来修改下 MySQL 数据库的登录密码:

正常的修改密码方法如:

mysql> use mysql;  
mysql> update user set password=password('123456') where user='root' and host='localhost';  
mysql> flush privileges;  

执行报错的话:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

我们可以用如下语句执行:

set password '123456'

成功的话,执行show databases;能够看到当前所以的数据库。


三、连接SQLYog

如果一切顺利的话,只需要在SQLYog中新建一个MYSQL连接,填入主机地址:localhost,用户名:root,密码:123456,端口:3306就可以了。

如果端口不对,可以用命令行进入数据库通过以下指令查询得到:

show global variables like 'port';

如果配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变成caching_sha2_password了(8.0版本开始出现的问题)。

解决方法:windows 下cmd 登录 mysql -u root -p 登录你的 mysql 数据库,然后执行这条SQL(注意分号):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';

用新密码到SQLYog登录。


四、JDBC中调用Mysql出现的问题

本人一直使用的是5.x版本的mysql进行开发,不料在这次的项目开发中JDBC加载数据库时,出现了从未有过的问题,一慌之下就卸载重载了(天知道我当时怎么想的…)

由于本人用的是8.0版本数据库,所以JDBC调用时需要注意如果出现以下问题(这个问题也是我重装8.0版本吧的根源…):

SunCertPathBuilderException: unable to find valid certification path to requested target

原因:可能是由于选择使用SSL的方式访问数据库,没有有效证书

解决方案:配置驱动类的url时,将uesrSSL设为false。

ds.setUrl("jdbc:mysql://localhost:3306/software_project?serverTimezone=UTC&userSSL=false");

需要补充的时,8.0的Mysql也支持开发者这么使用。修改之后依旧出现如下问题:

java.sql.SQLException: Unknown system variable 'query_cache_size'

原因:mysql-connecter-java的版本过低,很显然是数据库驱动程序与数据库版本不对应 。

解决方法:导入mysql-connecter-java-8.0.13.jar,如果使用maven管理的话在pom.xml中添加:


    mysql
    mysql-connector-java
    8.0.13

没想到我在使用maven管理的时候,下载这个版本的竟然没成功(maven导包经常由于网络原因没有下成功,网上建议换成阿里源的我尝试了,效果不是很理想),于是手动上官网下载放入maven的存库中我的路径是C:\Users\user\.m2\repository\mysql\mysql-connector-java\8.0.13,避免中间有坑,这里直接贴上网址。

之后,我们连接数据库驱动时需要注意:

驱动类改成com.mysql.cj.jdbc.Driver,指定时区改成serverTimezone=UTC

BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
//ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/software_project?serverTimezone=UTC&userSSL=false");
ds.setUsername("root");
ds.setPassword("123456");

如果已经确定导入最近mysql-connecter-java包还出现如下错误:

java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver)

原因:必需的jar没有包含在应用程序服务器上部署的Artifact配置中

解决方案:进入Project Structure 将该jar包部署进Artifact 中,在如下方框处,右击选择第一个选项。JDBC调用Mysql8.0.13问题解决_第1张图片

最后JDBC成功访问8.0版本的Mysql数据库。


五、注意点

  1. 数据库平时不用又嫌占内存的话可以关闭服务,进入服务找到MYSQL后关闭即可。
  2. 如果嫌弃每次进命令行都要切换到Mysql的安装目录下麻烦的话,可以将Mysql的安装路径设置到系统环境变量,具体方法在此不展开了。

你可能感兴趣的:(mysql)