数据库准备,都有了:MySQL卸载、安装(MySQL8、MySQL5较新版),HeidiSQL安装、JDBC驱动(mysql-connector-java-8...)添加

学习了一段时间的mysql,感觉有必要总结、记录一下,以便以后查阅,同时作为一种参考,使后来的学习者少走弯路,快速进入“角色”。接下来的介绍并不仅仅讲操作步骤,穿插介绍了一些步骤后面的思想、原理,这样更有利于记忆、学习。

一、MySQL8.0.27 卸载、安装

即,将数据库在“机器上”卸载或安装。以MySQL8为例,MySQL5较新版可参考MySQL8。
如果以前自己的机器安装过 MySQL,就从“卸载”开始;否则从“安装”开始。

1、卸载MySQL
屏幕左下角输“cmd”,以管理员的身份打开cmd,“管理员:命令提示符”界面路径转到MySQL安装路径,如:cd D:\mysql-8.0.19-winx64\bin(安装过的老版mysql的路径,好像不修改路径也可以。)
A、停止MySQL服务。“管理员:命令提示符”界面输 net stop mysql后回车,提示“MySQL服务已成功停止”即可。如果提示“服务名无效”,可能是因为本机未安装MySQL。
**B、删除“MySQL安装目录”下的MySQL文件夹。**如之前在D盘上解压安装了mysql-connector-java-8.0.19,现在只需要删除mysql-connector-java-8.0.19文件夹即可。如果整体删不掉,就进入该夹,一部分一部分地删除。
C、“打扫”注册表。“管理员:命令提示符”界面输入regedit,进入注册表,删除以下文件夹:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQLD Service
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQLD Service
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQLD Service
文件夹数目可能少于三个,那就有几个删几个。
**D、查看名为mysql的服务。**以管理员身份运行,输入sc query mysql,出现如下界面即为正常。

在这里插入图片描述
**E、删除该mysql服务。**输入命令 sc delete mysql,出现 “[SC] Delet Service 成功”,卸载完成。

2、安装MySQL
采用“解压安装”的方式。从官网下载较新版本mysql-8.0.x-winx64.zip
**A、下载MySQL安装包。**从官网下载较新版本mysql-8.0.x-winx64.zip,具体方法:
https://dev.mysql.com/downloads/mysql/→选“Windows (x86, 64-bit), ZIP Archive”,点“Download”→点“No thanks, just start my download.”即可下载。
**B、解压安装包到目录。**建议解压到某盘的一级目录下,以便配置环境变量,如可解压到D:\mysql-8.0.27-winx64。
C、配置初始化文件。
.exe安装时,根据提示一步一步设置各种参数;解压安装通过这个my.ini初始化文件,一次性设置各种参数,这样可以减少麻烦,降低难度。
在刚刚解压的文件夹D:\mysql-8.0.27-winx64中新建一个my.ini文件,写入如下信息:(不同安装地址注意更改路径)

#mysqld是服务,d 的全拼应该是 daemon,也就是守护程序的意思,常驻于后台。
[mysqld]
# 设置3306端口
port=3306
# 设置 mysql 的安装目录
basedir=D:\mysql-8.0.27-winx64
# 设置 mysql 数据库的数据存放目录
datadir=D:\mysql-8.0.27-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端默认使用的字符集为utf8mb4
character-set-server=utf8mb4
# 使用 -skip-external-locking MySQL选项以避免外部锁定,该选项默认开启
external-locking = FALSE
# 创建新表时将使用的默认存储引擎
default-storage-engine=InnoDB

# 网上流传使用"mysql_native_password"插件(加密规则)认证,但是mysql8之后,
#默认加密规则是caching_sha2_password,仍用下面的规则,会出问题,
#default_authentication_plugin=mysql_native_password
#所以要将其注释掉,不设定,就是用默认的加密规则(即authentication_policy=caching_sha2_password)。

[mysql_safe]
log-error=D:\mysql-8.0.27-winx64\mysql_oldbody.err
pid-file=D:\mysql-8.0.27-winx64\mysql.pid
# 定义 mysql 应该支持的 sql 语法,数据校验
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
# 设置 mysql 客户端(服务器?)默认字符集
default-character-set=utf8mb4
[client]
# 设置 mysql 客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

上面的初始化文件文件中,刚开始我使用了default_authentication_plugin=mysql_native_password,但接下来的“安装MySQL”操作,输mysqld --initialize --console时,出现如下提示
在这里插入图片描述

意思是“default_authentication_plugin”已弃用,并将在将来的版本中删除。要求改用authentication_policy(认证原则)。如果置之不理,在安装Navicat Premium 12连接MySQL数据库时会出现Authentication plugin ‘caching_sha2_password’ cannot be loaded的错误。此时有两种解决办法:
一种是通过改密码时将加密规则改回去:
cd D:\mysql-8.0.27-winx64\bin→ mysql -u root -p 回车(进入MySLQ数据库)→输原密码 回车→输“ ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘密码’;” 回车(改密码,也就是改加密规则为mysql_native_password)
另一种是升级或破解Navicat。升级需花钱,破解不安全,怎么办?使用HeidiSQL——一种适合数据库管理员的MySQL管理工具,免费,还先进,真香!别着急,随后慢慢介绍。
提示中还有两个警告: 在这里插入图片描述
研究了半天也没搞懂,好像跟网络有点关系,心里很不踏实,那位大神能给指点一下。
其实,不 配置初始化文件,安装MySQL也过,但是,这样配置一下,心里更加明白,可能也方便以后某些配置的修改吧。
**D、配置环境变量。**将环境变量中的系统变量(s)的路径名(Path)设置为D:\mysql-8.0.27-winx64\bin即可(安装位置不一样,路径也不一样)。此时配置环境变量,接下来的“命令提示符操作”会简单、省事一些。关于环境变量配置的操作,不熟悉可以百度搜索,很多的。
E、安装MySQL。“管理员:命令提示符”界面,路径转到MySQL安装路径,如:cd D:\mysql-8.0.27-winx64\bin,输入mysqld --initialize --console回车,出现如下界面:
在这里插入图片描述
其中最后显示的字符(不含空格):ubtqQrz:y4_+是系统给的数据库初始密码,要牢记,随后登录数据库、改密码要用到。
**F、安装MySQL服务。**数据库和数据库服务不一样。数据库可以理解成仓库及内部管理,一台主机的MySQL系统里,可能有几个库;数据库服务有点像调度,侦测、安排数据库需求。主机开机后,数据库服务就应该运行,伺服于后台,上连外界,下连数据库们,是数据库系统的一部分。
输入:mysqld --install 后,显示如下界面:
在这里插入图片描述
G、启动MySQL服务。
输入:net start mysql 显示如下界面:
在这里插入图片描述
H、登录MySQL系统。
输入:mysql -u root -p 此时就要输入刚才系统给出的初始密码了。 显示如下界面:
在这里插入图片描述
I、修改MySQL密码。
安装在主机的数据库系统应有若干用户,其中root是超级管理员(用户),拥有比一般用户大很多的权限。要改的密码应是超级管理员(root)访问数据库系统时的密码。输入(注意以下文本中的单引号均为西文上单引号(如图片中显示),若不是,输入时改过来):
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH caching_sha2_password BY ‘000’;
其中root是mysql数据库用户中的超级管理员(数据库用户之一)。000是自己设定的对应的密码(复杂一些更安全,但要好记),输入时一定要用英文单引号括住,后面要加分号,再敲回车,如果没加分号,界面上会出“→”,这时敲一个分号,再敲回车即可。手动输入字符较多,容易出错,输入后一定小心核对,无误后再敲回车。显示界面:
在这里插入图片描述
若加密规则是mysql_native_password,则修改密码的命令是:
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘密码’;

二、HeidiSQL安装

HeidiSQL是一种适合数据库管理员的MySQL管理工具,免费,还先进,对于数据库的日常管理已经够用了。
1、下载。
https://www.heidisql.com/download.php→“Installer,32/64 bit combined(SHA1 checksum)”
下载文件名字形如:HeidiSQL_11.3.0.6295_Setup.exe
2、安装
双击图标→选择英文,ok→I accept…next→默认安装地址,next→开始菜单中建文件夹,next→选中额外任务,next→Install→finish启动程序,显示会话器,如下图:
在这里插入图片描述

点“新建”→左侧“Unnamed”处输入自己想要的会话名称→右侧输密码→点打开,如下图:
在这里插入图片描述
3、建库(非必要步骤)。
创建数据库不止一种方式。如需建库,右键左上部的会话名称→创建新的(O)→数据库(S),出现如下界面:
在这里插入图片描述
输入名称,选择字符校对选项就,点确定即可。
MySQL5、MySQL8是两条线,两个版本系列,各有优缺,现在都有最新更新版本,但新建数据库建议使用MySQL8。
其中字符校对选项可utf8mb4_09000_ai_ci。而MySQL-5系列使用的是utf8_general_ci,若用以前的老数据库文件建库用了MySQL-5系列版本,可选此模式(可使用较新版本,如mysql-5.7.42-winx64)。使用MySQL-8系列建库时,服务器默认的是utf8mb4_09000_ai_ci(包含utf8_general_ci),此模式下的数据库文件占空间多,若使用MySQL-5的文件设成此模式,可能会出一些错误提示。但使用utf8mb4是潮流,新建数据库可使用utf8mb4_09000_ai_ci选项。
4、批量建表(非必要步骤)。
如下图,左边选择要建表的数据库(如abcbase),右侧点查询图标(蓝三角),将建表的文本输入其中,点最上边变蓝的三角,即可。若数据库找不到新建的表,点一下左上的刷新图标即可。
在这里插入图片描述
在这里插入图片描述

5、excel导入(非必要步骤)。
将数据放入excel表,由excel表“另存为”CSV格式,HeidiSQL中通过CSV文件,将数据导入到数据库表中,详细过程如下:
A、将数据放入excel表中。
对于载有数据的excel工作簿,不要直接用其生成CSV格式的文件,而应该再创建一个“中转”工作簿,用来“净化”文件,即:
新建一个excel工作簿,删除其中多余的Sheet,只留一个Sheet。在原来的用于输入数据的工作簿中,只选字段和数据,选中目标区域(不可多选行、列),复制粘贴到新簿Sheet中,开始位置(Sheet中第几行、第几列)自定,如图:
在这里插入图片描述
字段和数据行之间不要有空行,列和列之间不要有空列,否则通过HeidiSQL往数据库导入数据时会出现奇怪的现象。
B、生成CSV格式的文件。
新工作簿中,点“文件”→另存为→保存类型选“CSV(逗号分隔)(*csv)”,命名→点保存、确定、是……如图:
在这里插入图片描述
之所以建中转工作簿是因为,在“转成CSV”的动作中,会将工作簿中最左、最上的数据所在列、行,作为CSV簿Sheet表的A列、1行,如图:
在这里插入图片描述

而HeidiSQL往数据库导入数据时,是从CSV表的“被忽略行”之后的行开始导入数据。老工作簿在输入数据时,目标数据区域之外可能还有其它一些辅助输入,如表名、字段注释等,或者误输入,如空格(误输入后还看不见),总之,不是绝对干净。若不做处理,这些东西就会一并加入生成的CSV表,并进一步导入数据库,造成数据库数据错误、错乱。
新添加的数据往往后部追加,因此生产的SCV表上部的某几行应该忽略掉(即不导入它们),待会儿导入数据选“忽略行”时应选SCV表中(而不是其它excel表)忽略的行数。比如本SCV表属于第一次导入数据,需要忽略的是前一行(字段行),而不是excel中转表的前三行(或其它什么行)。
C、CSV表导入数据库。
HeidiSQL中,选中要导入数据的表→点左上“工具”,导入CSV文件→输入辅助参数后,界面如下:
在这里插入图片描述

选择服务器解析数据(LOAD DATA)→选择编码方式:gb2312: …(excel2003编码格式)→点“导入”→点“刷新”(上部绿圈)→点“数据”(上部偏左),可以看到数据已导入数据库表中:
在这里插入图片描述
D、导入注意事项。
a、上图1处:文件路径、文件名中尽量不要包含汉字,否则某些版本可能报错:not found(Errcode:2)
b、上图2处:如前面的分析,应选择“忽略前1行”,否则,导入数据库的数据有可能错乱。
c、上图3处:选择服务器解析数据(LOAD DATA)。
d、导入过程中,有可能出现错误提示:Loading local data is disabled; this must be enabled on both the client and sever sides:本地数据无法导入,必须要"同时获得客户端和服务器端的许可",即mySQL数据库出于安全问题的考虑,禁用本地数据。解决方法有二:
方法一:“管理员:命令提示符”界面修改local_infile=‘ON’,如图:在这里插入图片描述
方法二(此法有时会失效,有待于继续研究):MySQL配置文件my.ini中,[mysql]、[mysql] 和[client] 下面,都添加上 local_infile=ON,随后关闭服务再启动服务即可(此法持久,但有一定安全风险),如图:在这里插入图片描述

三、eclipse中JDBC驱动(mysql-connector-java-8.0.27.jar)的添加

1、对JDBC驱动的理解。
Java应用程序通过JDBC(Java DataBase Connectivity,Java数据库连接技术)连接数据库。其实JDBC就是一组API:只提要求,不去“代码实现”要求。实现“要求”的任务交给了各数据库厂商。比如JDBC API中提出了“查询”要求,MySQL厂家就会在对应的JDBC驱动中落实这一任务:Java方法的壳,内部可能是C、C++的“手”,伸向数据库内部去掏数据。其它数据库厂商也是这个原理。使用eclipse制作项目时,将JDBC驱动导入eclipse,就会在“需要”时,驱动中的方法覆盖接口中的抽象方法,从而实现某一功能。因此,eclipse中导入JDBC驱动是“Java应用程序”中加载JDBC驱动的前提。
JDBC驱动使用的名字就是mysql-connector-java-…有些奇怪,明明是驱动(driver),怎么搞成了连接者(connector)?好吧,现实就是这样。
2、eclipse中JDBC驱动(mysql-connector-java-8.0.27.jar)应放在哪里?
mysql-connector-java-8.0.27.jar是一个库 (或一个敞口瓶子,或坛子),里面包含各种类、方法。它应该被放在两个位置:
一、项目工程下,或项目工程下的某个文件夹中,防丢,以备引入项目;
二、项目工程下的“引用库”(Referenced Libraries)中,以备应用程序引用。mysql-connector-java-8.0.27.jar是一个外部库,又要被程序引用,所以又应该放在“引用库”中。
第一个位置是需要我们直接手动放进去,第二个位置是经过我们的一番操作后,系统放进去的(无“引用库”,系统会自建)。
3、mysql-connector-java-8.0.27.jar的添加。
A、下载。
https://downloads.mysql.com/archives/c-j/→Product Version中选择目标版本(自己想要的版本,如8.0.27)→Referenced libraries “Select Operating System:”下拉菜单中选中“Platform Independent”→选中下边zip格式的文件,点“Download”即可下载。
驱动的版本要与数据库版本一致,即数据库:mysql-8.0.27-winx64.zip;驱动:mysql-connector-java-8.0.27
B、将驱动添加进工程。
打开eclipse。解压mysql-8.0.x-winx64.zip,将其中的文件mysql-connector-java-8.0.27.jar复制粘贴到eclipse项目下(也可以项目下建lib文件夹,复制到此夹中)即可,复制后如下图:
在这里插入图片描述
C、将驱动加入“引用库”(Referenced Libraries)。
点击选中项目(本例TestService)→File→Properties(或Project→Properties)→Java Build Path→Libraries,如下图:
在这里插入图片描述
→点Add JARs→跳出的JAR Selection对话框中打开项目夹(TestService)→点击刚才添加的文件mysql-connector-java-8.0.27.jar如下图:
在这里插入图片描述
→点OK→点Apply and Close→打开左侧刚刚增加的Referenced Libraries(系统自动建),可以看到驱动已经添加进“引用库”中,如下图:
在这里插入图片描述
至此,eclipse中JDBC驱动(mysql-connector-java-8.0.27.jar)已添加完毕。
4、Java应用程序中,加载JDBC驱动、设置连接中的url。
即Java“应用程序中的”一些动作,对外联系机器中安装的数据库程序。“加载JDBC驱动”这一“动作”一般位于服务器的服务器程序中。
A、首先搞清楚MySQL中的“服务端”、“客户端”。
服务端可以理解为机器上安装的数据库系统;客户端可以理解为向数据库系统发出数据请求并使用数据的系统。有些服务器程序虽然与数据库系统装在一台机器上,但也可以看作是“客户端”,这与我们平常理解的“服务端(器)-客户端”有点不一样。
B、其次要搞懂字符集(character set)和对应的“处理规则”(collation)。
字符集里包含着各种字符,且还会不断更新,如加入表情标志。以utf8mb4_0900_ai_ci为例,其中utf8mb4_0900,代表字符集utf8mb4的0900版本(即Unicode 9.0)。字符集大致说明了集合内包含哪些字符,每个字符的编码是多少。
“处理规则”是指如何“处置”这些编码,即如何定义、存储、传输、转换这些编码。utf8mb4_0900_ai_ci就是这样一个规则:UTF的全名是Unicode Transformation Format,也就是“Unicode变换格式”。其中的“8”既是指字符最少只需8位(一个字节),也是指以8位为一组实现了可变字节数的字符编码。mb4表示一个字符最多使用4个字节来存储。0900表示字符集版本号。ai、ci分别表示“不区分音调”、“不区分大小写”。综上,utf8mb4_0900_ai_ci更是一种字符集对应的“处理规则”。
在字符集utf8mb4中,英文占一个字节(8位),中文占3个字节,特殊符号支持4个字节。1byte(字节)=8bit(位,如0或1)。
使用数据库管理工具Navicat创建数据库时,要选择字符集:utf8–UTF-8 Unicode、整理(“处理规则”):utf8_general_ci;而使用HeidiSQL建库时,字符校对(“处理规则”)选择utf8mb4_0900_ai_ci,其中也暗含了字符集Unicode 9.0。

C、加载JDBC驱动。

Class.forName("com.mysql.cj.jdbc.Driver");

类com.mysql.cj.jdbc.Driver位于JDBC驱动(mysql-connector-java-8.0.27.jar)中。Class.forName()方法是在虚拟机中创建com.mysql.cj.jdbc.Drive的Class的对象(这个对象是该驱动的唯一对象,且位于虚拟机中),并同时执行com.mysql.cj.jdbc.Driver中的静态方法,而com.mysql.cj.jdbc.Driver中的静态方法又向DriverManager注冊自己:

//下面的写法可能不太规范,为了便于理解,暂且这样写
//前一个Driver位于JDBC驱动中,后一个Driver位于JDBC(是接口)中。
public class  com.mysql.cj.jdbc.Driver implements java.sql.Driver {
    ...
    static{
       DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
    }
    ...
 } 

这相当于在内存中创建了com.mysql.cj.jdbc.Driver的实例对象。这就实现了覆盖JDBC接口,加载JDBC驱动的目的。具体Class类、Class.forName用法的介绍可参考:
https://juejin.cn/post/6844903687265976334
D、设置连接中的url。

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb"
					+"?useUnicode=true&character_set_server=utf8mb4" 
					+"&user=root(用户名)&password=密码"
					+"&useSSL=true(使用SSL连接)");

其中的testdb是你的数据库的名称,不要写出会话名称。在HeidiSQL中,用户(名,root)–会话–数据库–表,其隶属关系如是。
useUnicode=true,说明要使用Unicode字符集,做了这个设置,接下来的character_set_server=utf8mb4才会生效。
数据库服务端使用的字符集是utf8mb4,这是在安装数据库时,初始化文件my.ini中设定的。作为应用程序的客户端(服务器、远程终端)向数据库传输数据时,也应“要求”数据库系统将这些数据“存成”utf8mb4格式,从数据库系统输出时,也应输出为utf8mb4格式。也就是对数据库编码、解码的要求。官方也建议character_set_server=utf8mb4的值的配置尽量与mysql服务端的编码一致。
客户端是一个系统,有自己的字符集;数据库系统也有自己的字符集,两个系统进行信息传递时,针对字符集,应该有翻译(编码、节码)的环节。

四、总结

MySQL安装,HeidiSQL安装、JDBC驱动(mysql-connector-java-8.)添加,这三项工作完成后,数据库基本上就可以使用了。
这些工作很长时间也不一定做一次,并且头绪又多,一旦某个软件出现变化,就会手足无措,如果能把这些过程记下来,后来的工作就会简单多了,高效多了。
同时也不仅仅是记录操作过程,其中有很多细节要注意,要悟透一些原理,要学习一些知识,要组织一些文字,一篇博客写下来,觉得强壮了许多,清楚了许多,收获了许多。记得硬着头皮写第一篇博客时,感觉举步维艰,左右为难,动弹不得,坚持到现在,多少有些“入门感”,轻松自由不少。
所以,博客一定要坚持写下去!还是那句话,对付困难的最好方法:不要停下来。
最后,本文中的名词、原理、方法的表述可能有不当甚至错误,参考时应加以甄别,去伪存真。同时也请看到本文的大神、高手们不吝赐教,多多指点。

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
环境: Eclipse Java EE IDE for Web Developers. Version: Oxygen.3a Release (4.7.3a) mysql-connector-java-8.0.11 MySQL Server 8.0 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 驱动的类换了个名字 Class.forName("com.mysql.cj.jdbc.Driver"); Fri Jun 08 13:09:27 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. 加上useSSL=true或false 参考地址 con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true", "root", "123456"); java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. 加上serverTimezone=GMT 参考地址 con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useSSL=true&serverTimezone=GMT", "root", "123456")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值