MySQL8.0.28 安装教程全程参考 MySQL 官方文档

MySQL 文档整理合集(5.6、5.7、8.0.41、8.1、8.2、8.3,8.4.4,9.2.0),定期更新:

链接: https://pan.baidu.com/s/1jGkGarWZWVnzQ9so0D8maA?pwd=8kff

提取码: 8kff

如果你想支持小站健康成长,可以在文末进行赞赏哟~~~

阅读本篇博文与读者的约定

  1. 关于数据库(角色用户)需要开放哪些权限,需要根据职员的具体职责进行判断。
  2. 博文可能存在过时,仅供参考哟。
  3. 文档合集整理均来自于 MySQL 官网,部分是我自己的实操经验总结,请自行甄别。定期更新。

当你看到这篇教程时,MySQL 目前最新 GA(稳定)版本可能已经更新到了 MySQL 8.0.41 或者更高MySQL 8.0 Release Notes Changes in MySQL 8.0.41 (2025-01-21, General Availability)创新版 Innovation MySQL 9.2 Release Notes Changes in MySQL 9.2.0 (2025-01-21, Innovation Release)长期支持版 MySQL 8.4 Release Notes Changes in MySQL 8.4.4 (2025-01-21, LTS Release)

MySQL 发行说明:mysql-8.0-relnotes

注意:如果你想在 MySQL 官网获取 8.0.29 ,是找不到资源的。因为出现了重大问题,官网直接移除了下载资源。推荐跳过 MySQL 8.0.29,升级到更高的版本或者使用历史稳定版本。

Changes in MySQL 8.0.29 (2022-04-26, General Availability)

Important
This release is no longer available for download. It was removed due to a critical issue that could cause data in InnoDB
tables having added columns to be interpreted incorrectly. Please upgrade to MySQL 8.0.30 instead.

注意:如果你正在使用或者打算升级至 MySQL 8.0.38,请仔细阅读重要提醒,该本版本已无法下载。由于存在一个严重问题,可能会导致在创建大量表(8001 个或更多)后服务器无法重启。请升级至 MySQL 8.0.39 版本。

Changes in MySQL 8.0.38 (2024-07-01, General Availability)

Important This release is no longer available for download. It was removed due to a critical issue that could stop the server from restarting following the creation of a very large number of tables (8001, or more). Please upgrade to MySQL 8.0.39 instead.

阅读本篇博文可以了解到哪些内容?MySQL8.0.28 详细安装教程。Windows10 安装 MariaDB 与 MySQL8.0 同时共存,Linux 发行版 RHEL7 系列安装 MySQL8.0 详细教程。Windows10 下使用 MSI 文件安装 MySQL8.0.28 注意事项,多实例共存解决方法,MySQL 官方示例库与文档地址。

如果对你有帮助,我很荣幸。如果有误导你的地方,我表示抱歉。所有总结仅供参考。

前言

MySQL8.0.28 查看创建表语句:看到默认 CHARSET=utf8mb3。当时写这篇博客时,我以为是显示问题,没怎么在意,后来看了官网才知到。

通过下面这个链接可以看到 MySQL8.0.29 做了哪些改进:
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-29.html#mysqld-8-0-29-bug

MySQL8.0.28

1
2
3
4
5
6
7
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`i` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)

使用 MySQL8.0.29 对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed
mysql> create table t(id int primary key,names varchar(64));
Query OK, 0 rows affected (0.02 sec)

mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` int NOT NULL,
`names` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

以目前(当时 2022-01-31)最新版本的 MySQL8.0.28 为示例进行安装与初步使用的详细讲解,面向初学者的详细教程。这也许是迄今为止全网最最最详细的 MySQL8.0.28 的安装与使用教程

温故而知新,可以为师矣。建议初学者多在命令行窗口下进行练习,熟能生巧。达到一定的熟练程度,再借助客户端工具提高我们的工作效率。最终目的是啥?活下去呗,提高捞金能力。当然开个玩笑,回到正题,接着往下看。

从下载到安装,再到忘记密码解决方案。一步步使用命令行窗口学会基本操作,然后使用客户端远程连接工具。最后配合时下比较火热的 Java 语言进行演示如何使用 JDBC 连接最新的 MySQL8.0 数据库,以及执行查询返回结果。

MySQL8.0.28 安装教程全程参考 MySQL 官方文档

咱也不多哔哔,直接上干货,要的就是实用性!

一、MySQL8.0.28 下载

你可以下载 msi 文件一键安装,也可以下载解压版 zip 文件(Archive)进行命令行初始化安装,也是个人推荐的方式。

MySQL 官网下载地址

https://dev.mysql.com/downloads/mysql/

1、Windows 版本下载

在 Windows 下可以选择下载 msi 文件或者解压版 zip 文件。一般使用,选择我使用紫色框线选中的即可

关于下面的 Debug Test Suite,是带有许多的测试套件在里面,对于有测试需求的人员可以进行下载。

2、Linux 版本下载

根据自己需要的 Linux 发行版版本适配的 MySQL 进行选择。安装方式多种多样,二进制包(MySQL-*$version*-xx.tar.gz 或者

MySQL-$version-xx.tar.xz,打包成 tar 包然后压缩成 gz、xz 格式)、rpm 包以及源码包(source)安装。选择你擅长一种方式即可,没必要纠结,但也要根据实际场景进行下载安装。

tips: $version 换成具体版本,比如 8.0.28(2022-01-18 发行),或者换成彼时最新稳定版 8.0.36(2024-01-16 发行)。

比如,我个人选择的是自己比较熟悉的 RHEL7 (Centos7)系列进行下载。同样有 bundle 版本,包含了一些插件和依赖在里面,便于使用 rpm 包安装。安装单个的 server 服务,需要安装其它的依赖包比较繁琐。

对于初学者,建议直接使用官方提供的 yum 源或者其它源直接进行安装

我偏不,就要折腾。那也行,请接着往下看,一样提供了详细安装步骤。

3、注意事项

一般情况可能没仔细看,官方会提示登录,加了 button 按钮字体非常显眼,而下面的的我需要立即下载则字体很小。所以注意了,选择下面的 No thanks,我需要立即下载。选择的是社区版本,免费提供下载。

4、快捷进入 MySQL 服务

提供一种思路,主要是为了方便,不管有没有配置环境变量,都可使用。仅仅是自己测试学习使用。

个人比较懒,直接在桌面新建一个 start_mysql.bat 文件将执行命令放入进入,双击即可进入。安装多种数据库环境:新建 bat 文件进行管理,放桌面比较方便。

启动服务

1
2
3
@echo off
d:
D:\work\mysql-8.0.28-winx64\bin\mysqld --console

示例如下

1
2
3
4
5
6
7
@echo off

net start MySQL80
netstat -ano | findstr 330
d:
cd D:\work\mysql-8.0.28-winx64\bin
mysql -uroot -p123456 -P 3306

二、MySQL8.0 安装

关于 MySQL8.0 在各大平台安装教程,MySQL 官方文档有很详细的使用说明可进行参考,第二章节讲解安装和升级 MySQL

MySQL :: MySQL 8.0 Reference Manual :: 3 Upgrading MySQL

MySQL :: MySQL 8.0 Reference Manual :: 2.3 Installing MySQL on Microsoft Windows

MySQL 在 Windows 平台提供了多种安装形式:

  1. msi 文件:直接双击进行安装,有可视化界面,安装较为容易,但不够灵活。
  2. 归档包(archive):以 zip 格式进行压缩,类似于 Linux 中的二进制包。比较灵活,只需几个命令即可安装服务和实例化。
  3. 源码包(source package):最灵活,可根据需求编译安装功能,难易度最高。
  4. docker 形式安装:其实是在容器中安装。

初学者尝鲜,建议在 Windows 下安装。接下来介绍的是归档包(archive)安装与使用。

一般情况,默认安装一个 MySQL 版本服务实例。也不排除预算有限,在同台服务器上安装多个实例进行测试。默认端口 3306,如果在发布(生产)环境建议修改默认端口,达到不让别人一下就猜到的目的。接下来安装测试多个 MySQL 服务版本共存一个操作系统下,只针对于 Windows 下安装多个服务(没有使用虚拟机工具,真机环境下测试)。Linux 下有便捷的 yum 源以及 apt 方式安装,一键安装所需依赖,但也有比较繁琐的 rpm 包安装。

1、Windows 下安装 MySQL8.0(zip 包)

配置环境变量,编辑系统环境变量,控制面板 > 所有控制面板项 > 系统 > 高级系统配置 > 系统环境变量

注意:如果是 Windows10 或者 Windows11 ,直接将解压路径加入 PATH 环境变量即可。

1
2
3
4
#变量名
MySQL_HOME
#变量值
D:\work\mysql-8.0.28-winx64\bin

主要介绍解压版本 zip 的安装与实例化

1
2
unzip mysql-8.0.28-winx64.zip
cd mysql-8.0.28-winx64.zip

如果没有 unzip 命令,请尝试打开 powershell 使用 Expand-Archive 命令解压。

示例解压到默认目录

1
Expand-Archive .\mysql-8.0.28-winx64.zip

示例解压到指定目录 D:\work\,使用参数 -DestinationPath

1
Expand-Archive .\mysql-8.0.28-winx64.zip -DestinationPath D:\work\

如果你想指定压缩文件路径 D:\Downloads\DBMS\MySQL\winx64\mysql-8.0.28-winx64.zip

可以使用 -Path 参数:

1
Expand-Archive -Path D:\Downloads\DBMS\MySQL\winx64\mysql-8.0.28-winx64.zip -DestinationPath D:\work\

可参考资料expand-archive

1.1、解压上面准备的安装包 mysql-8.0.28-winx64.zip

在解压后的 D:\work\mysql-8.0.28-winx64 目下新增 my.ini 文件,默认解压版是没有的。然后加入如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
# 设置3307端口,有多个服务,为了不冲突修改默认的3306端口为3307
port=3307
# 设置mysql的安装目录
basedir=D:\\work\\mysql-8.0.28-winx64
# 设置 mysql数据库存放目录
datadir=D:\\work\\mysql-8.0.28-winx64\\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

1.2、实例化

得到反馈说执行 - initialize-insecure’mysqld’ 不是内部或外部命令,也不是可运行的程序或批处理文件

解决方法:cd D:\work\mysql-8.0.28-winx64\bin,切换至上述目录执行。

翻阅了官方文档查看到初始化的命令,命令并没有问题,查看帮助文档:

1
mysqld --verbose --help
  • --initialize 参数:创建一个默认的数据库并退出,然后创建一个超级用户(root)并生成随机的密码并记录到日志中;
  • --initialize-insecure 参数:创建一个默认的数据库并退出,然后创建一个超级用户(root)密码为空。
1
2
3
4
5
-I, --initialize    Create the default database and exit. Create a super user
with a random expired password and store it into the log.
--initialize-insecure
Create the default database and exit. Create a super user
with empty password.

注意:Windows 下 zip 包解压后的 mysqld 文件在 \mysql-8.0.28-winx64\bin\mysqld,切换到 mysqld 所在目录中执行初始化。

以管理员身份运行 CMD 命令窗口,切换到 mysql 解压后的目录下:

1
2
3
4
# 1、第一步切换到D盘
d:
# 2、第二步切换到个人安装mysql的bin目录下
cd D:\work\mysql-8.0.28-winx64\bin

设置为空密码,去掉不必要的麻烦。

1
D:\work\mysql-8.0.28-winx64\bin> mysqld --initialize-insecure

1.3、安装服务

在 Powershell 中将帮助文档输出到指定文件 mysql_win_help_docs.txt:

1
mysqld --verbose --help > d:\work\mysql_win_help_docs.txt

参考官方文档

Usage: mysqld.exe [OPTIONS]
NT and Win32 specific options:
–install Install the default service (NT).
–install-manual Install the default service started manually (NT).
–install service_name Install an optional service (NT).
–install-manual service_name I nstall an optional service started manually (NT).
–remove Remove the default service from the service list (NT).
–remove service_name Remove the service_name from the service list (NT).
–enable-named-pipe Only to be used for the default server (NT).
–standalone Dummy option to start as a standalone server (NT).

进入到解压后 MySQL 的 bin 目录下,执行安装服务命令:

1
2
3
4
5
cd D:\work\mysql-8.0.28-winx64\bin
#默认不加服务名,则为MySQL
mysqld install
#可以指定服务名
mysqld install MySQL8

如果没有安装多个服务,使用 mysqld install 即可。可以不用指定服务名,默认的服务名为 MySQL。

1.4、服务命令使用,需要管理员身份运行 CMD 命令,注意看我的路径是在 bin 目录下执行的

我没有配置 MySQL8 的系统环境变量,所以都在 MySQL 的 bin 目录中执行命令。

启动服务 net start mysql

1
2
3
4
5
# 启动服务
net start mysql
D:\work\mysql-8.0.28-winx64\bin>net start mysql8
MySQL8 服务正在启动 .
MySQL8 服务已经启动成功。

停止服务 net stop mysql

1
2
3
4
5
# 停止服务
net stop mysql
D:\work\mysql-8.0.28-winx64\bin>net stop mysql8
MySQL8 服务正在停止..
MySQL8 服务已成功停止。

删除服务 sc delete mysql

1
2
3
4
# 删除服务
sc delete mysql
# 或者mysqld remove删除服务,需要在mysql的bin目录下执行mysqld命令
mysqld remove mysql

1.5、注意事项

1
2
3
4
# 安装服务指定了服务名为MySQL8
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8
# 或者是MySQL
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL

安装服务指定了服务名为 MySQL8。在下面的多实例服务共存也提到过,需要将原始残留的注册表删掉,重启电脑,再进行安装即可。

出现了丢失 MSVCR120.dll,缺少组件,安装以下组件解决

vcredist_x64.exe

vcredist_x86.exe

Download Visual C++ Redistributable Packages for Visual Studio 2013 from Official Microsoft Download Center

注意:使用了 mysqld -initialize,密码是随机生成的,在 mysql 的错误日志中可以找到

例如我的日志(mysql 的 data 中以.err 结尾的文件)

1
A temporary password is generated for root@localhost: 6hk20yueza=M

修改密码的命令 ALTER USER

1
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'

之所以在 Windows 下介绍的如此详细,是因为我们平时的工作环境更多的是在 Windows 下进行的。就算使用 Linux 环境一般也是使用虚拟机配合 Linux 发行版,再就是云服务器了。MySQL 的一些命令都熟悉了,Linux 下安装还能难倒你么?直接翻一翻官方文档即可。

2、Linux 下安装 MySQL8.0

Installing MySQL on Linux rpm or Using Generic Binaries

Linux 或者 Unix 安装 MySQL 其中四种方式:

  1. rpm 包安装:最为简单,但不灵活,适合初学者使用。
  2. 二进制包(binary package):也称归档包(archive),编译好的源码包,比 rpm 包更灵活。个人认为是安装多个服务最佳选择。
  3. 源码包(source package):最灵活,可根据需求编译安装功能,难易度最高。
  4. docker 形式安装:其实是在容器中安装。

使用 rpm 包安装 MySQL 其实相对较容易,只是缺少依赖包时比较繁琐,需要提前准备好所有依赖包。建议初学者不要像我这样去安装 rpm 包,你可以直接下载 rpm bundle,或者使用 mysql 官方的 yum 源

一定要注意 Linux 操作系统的权限问题权限在最小范围内满足即可

接下来将详细介绍在 RHEL7 系列使用 rpm 包形式安装 MySQL8.0.28,也是最为简单的一种方式。持续更新中,二进制包与源码包安装教程也会陆续加进来。先简单介绍二进制包安装部分步骤,详细步骤在后续更新:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$> groupadd mysql     #创建mysql组                  
$> useradd -r -g mysql -s /bin/false mysql #创建mysql用户(没有服务器主机登录权限的用户)
$> cd /usr/local #切换到local目录
$> tar xvf /path/to/mysql-VERSION-OS.tar.xz #解压tar包mysql文件
$> ln -s full-path-to-mysql-VERSION-OS mysql #创建软链接
$> cd mysql #进入到mysql目录
$> mkdir mysql-files #创建mysql-files目录
$> chown mysql:mysql mysql-files #赋予mysql用户mysql-files目录权限
$> chmod 750 mysql-files #赋予mysql-files权限750
$> bin/mysqld --initialize --user=mysql #初始化并设置用户为mysql,生成随机密码会打印在字符界面(使用 --initialize-insecure则设置空密码)
#--defaults-file=/usr/local/mysql/my.cnf 初始化指定my.cnf路径
$> bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize-insecure --user=mysql
--basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
$> bin/mysql_ssl_rsa_setup #启动ssl_rsa验证
$> bin/mysqld_safe --user=mysql & #启动服务
# Next command is optional #复制mysql.server脚本服务到Linux环境init.d目录,便于管理
$> cp support-files/mysql.server /etc/init.d/

以龙蜥系统 8.4GA 进行简单说明:
1. 必备安装包(兼容 Centos8,缺少依赖包):

1
2
$> yum install libaio # install library
$> yum install ncurses-compat-libs

2. 启动服务,可以写入脚本设置开机自启。

此处只做示例说明,具体使用结合实际情况。
vim mysql_start.sh

1
2
#!/bin/bash
/usr/local/mysql/bin/mysqld_safe --user=mysql &

运行脚本:

1
2
chmod 755 mysql_start.sh
./mysql_start.sh

3. 登录到 mysql

1
mysql -uroot -p

4. 使用 AnolisOS-8.4-minimal 版本注意事项
如果使用 AnolisOS-8.4-minimal 版本,一些基本工具包没有安装,比如 vim、ifconfig、wget 等等。

2.1、准备好安装包

直接在官网下载,或者使用 wget 命令下载都可以,同样可以使用官网的 yum 源进行安装。亦或是使用 apt 命令获取安装。至于为什么一些 Linux 发行版将 MySQL 从默认中移除了,因为 MySQL 被 Oracle 收购后存在闭源的风险。取而代之的是她的妹妹 MariaDB,这也是为什么我在安装的时候提到了 MariaDB。

2.2、安装 rpm 包

系统会提示哪些是需要的依赖包,所以我事先准备需要的依赖包

1
2
3
4
5
6
7
8
9
10
11
12
13
[mysql@localhost ~]$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm 
警告:mysql-community-server-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
错误:依赖检测失败:
mysql-community-client(x86-64) >= 8.0.11 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
mysql-community-common(x86-64) = 8.0.28-1.el7 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
mysql-community-icu-data-files = 8.0.28-1.el7 被 mysql-community-server-8.0.28-1.el7.x86_64 需要


[root@localhost mysql]# rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-client-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
错误:依赖检测失败:
mysql-community-client-plugins = 8.0.28-1.el7 被 mysql-community-client-8.0.28-1.el7.x86_64 需要
mysql-community-libs(x86-64) >= 8.0.11 被 mysql-community-client-8.0.28-1.el7.x86_64 需要

2.2.1、安装依赖包,然后使用 rpm -qa | grep mysql 查询哪些被安装了。

怎么传到服务器上,简单一点 scp 命令即可。这里也仅限于自己测试,实际山是需要用户名密码以及网络是打通的才可进行操作。

安装 rpm 包的步骤方法一,严格按照我所写的顺序来,非 root 用户使用 sudo 提权:

1
2
3
4
5
6
7
rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
yum remove mariadb-libs
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm

安装完成,使用 rpm 命令查询 mysql 的 rpm 包:

1
[root@localhost mysql]# rpm -qa | grep mysql

安装 rpm 包的步骤方法二,使用 Redhat 系列提供的 yum 工具安装,好处在于不用挨个按提示的循序安装 rpm 包。

切换至我准备好所有必备的 rpm 包目录,然后使用 yum 命令一键安装依赖。

1
2
3
$ sudo yum remove mariadb-libs
$ cd /opt/soft/mysql #这一步是进入到rpm包存放目录
$ sudo yum -y install mysql-community*

2.2.2、 RHEL7 系列需要卸载原有的 mariadb-libs,替换为 mysql-community-libs 依赖

卸载掉原有的 mariadb-libs 依赖包,毕竟是担心被 Oracle 收购的 MySQL 有闭源风险,所以默认依赖包都被换成 MariaDB 了。

1
$ yum remove mariadb-libs

2.2.3、正式安装 server

这一步只作为说明,如果上面安装完成,无需重复安装 mysql-community-server-8.0.28-1.el7.x86_64.rpm 服务。

1
$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm

查看安装的版本 Ver 8.0.28 for Linux on x86_64

1
2
[sky@localhost ~]$ mysqladmin --version
mysqladmin Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

2.2.4、赋予 mysql 安装目录所有者为 mysql 用户,rpm 包默认安装后的路径在 /var/lib/mysql。在授予 mysql 用户所有者和所属组权限之后,你可以使用 mysql 用户进行登录或者启动服务与关闭服务。创建 mysql 用户,推荐设置为没有服务器主机登录权限的用户

1
2
3
4
5
6
7
8
#添加mysql组
$ groupadd mysql
#创建mysql用户(没有服务器主机登录权限的用户)
useradd -r -g mysql -s /bin/false mysql
#mysql数据库存储目录的权限
$ chown -R mysql:mysql /var/lib/mysql
#日志的权限
$ chown mysql:mysql /var/log/mysqld.log

2.3、初始化

每个人的安装环境有所差异。可以参考官方文档,关于初始化有详细的说明:

https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html

设置密码为空,后续登录可修改密码。

1
$ mysqld --initialize-insecure

在进行到这一步的时候,咱可以去日志验证,能看到提示是初始化完成的。并且友好的提示,已经给你初始化完成啦,温馨提示创建了一个超级用户密码是空的。

1
2
$ cat /var/log/mysqld.log
[Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

2.4、启动服务与查看服务状态

RHEL7 系列使用命令启动 MySQL 服务

1
$ systemctl start mysqld

设置 MySQL 服务开机自启

1
$ systemctl enable mysqld

关闭 MySQL 服务

1
$ systemctl stop mysqld

重启 MySQL 服务

1
$ systemctl restart mysqld

登录 MySQL

1
$ mysql -uroot -p

关于启动 mysqld 服务出现权限不足的问题,在 mysql 和 Oracle 官方都不提倡使用 root 用户来管理

1
2
3
4
5
6
7
8
9
10
11
[root@dywangk mysql]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 4554 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 4516 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 4554 (code=exited, status=1/FAILURE)
Status: "Server startup in progress"
Error: 13 (权限不够)

权限越大,责任越大

解决方案:检查 mysql 数据库初始化目录和日志目录所有者和所属组。当时一在检查权限问题,忽略了日志的问题

1
2
3
4
5
[root@mysql ~]# chown -R mysql:mysql /var/lib/mysql
[root@mysql ~]# chown mysql:mysql /var/log/mysqld.log
[root@mysql ~]# systemctl restart mysqld
[root@mysql ~]# systemctl status mysqld
[root@mysql ~]# mysql -uroot -p

2.5、使用防火墙管理工具 firewall

加入 mysql 服务以及需要的端口 3306

1
2
3
$ firewall-cmd --zone=public --add-port=3306/tcp --permanent
$ firewall-cmd --zone=public --add-service=mysql --permanent
$ firewall-cmd --reload

或者临时关闭防火墙测试

1
$ systemctl stop firewalld.service

2.6、测试远程登录

开启防火墙,加入了 3306/tcp 协议规则,加入了 mysql 服务规则。设置了以前旧的密码缓存验证规则 mysql_native_password,,解决 caching_sha2_password 验证插件无法被加载的问题。

1
2
3
4
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步创建用户
mysql> GRANT ALL ON *.* TO root@'%'; -- 第二步授权
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456'; -- 第三步修改密码验证方式
mysql> flush privileges; -- 第四步刷新权限

3、关于忘记密码解决方案

很多小伙伴估计都遇到过设置密码后,结果忘记密码了。本文的解决方案,完全适用目前最新版本 MySQL8.0.28,亲自测试验证过

参考 MySQL8.0 官方文档以及 stackoverflow 解决方法。结果兜兜转转回到了跳过登录密码权限验证,8.0 版本之前的方法失效了,咱没跟上 MySQL 更新的步伐。

1、关闭 MySQL 服务:

1
$ systemctl stop mysqld

2、设置 MySQL 环境选项参数,跳过权限表验证:

1
$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

或者在 /etc/my.cnf 文件中添加,是一样的效果。最后记得去掉跳过验证。Windows 下在 my.ini 文件中加入 skip-grant-tables

1
2
[mysqld]
skip-grant-tables

3、使用了刚刚的设置启动 mysql

1
$ systemctl start mysqld

4、登录到字符命令终端

1
$ mysql -uroot -p

5、使用命令更新 root 用户密码

1
2
3
4
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
-> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

a、这种方式可能行不通

1
UPDATE user SET authentication_string = PASSWORD('123456') WHERE User = 'root' AND Host = 'localhost';

b、采取将密码先置空

1
update user set authentication_string = '' where user = 'root';

6、修改密码,解决方案,设置更强的密码规则即可

1
2
3
As mentioned my shokulei in the comments, for 5.7.6 and later, you should use 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Or you'll get a warning

MySQL8.0 出现这种情况请设置更安全的密码规则比如设置密码为:Mysql@123456,即可成功。

1
2
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql@123456';

7、关闭 mysql 服务

1
$ systemctl stop mysqld

8、重置前面设置的 mysql 环境变量参数

1
$ systemctl unset-environment MYSQLD_OPTS

9、再次启动 mysql

1
$ systemctl start mysqld

最终成功登录到 mysql

1
$ mysql -u root -p

4、Windows 下安装 MySQL8.0(MSI 文件)

作为补充说明:详细安装不做截图,只写注意事项。

  1. MSI 文件安装注意事项;
  2. 多个 MySQL 服务共存如何解决冲突。

注意选安装路径,Advanced Options,这行字很小,返回上一层时很有可能没注意。

注意:选择安装路径有空格,可能会产生影响,最好去掉。默认安装路径在 C 盘,我这里改为自己的管理路径

方法有多种,这里采取先卸载服务,然后安装服务,最后修改注册表指定 mysqld 和 my.ini 路径。

  1. 以管理员身份运行 CMD 命令

  2. 执行命令进入 D 盘

    1
    d:
  3. 进入 MySQL 服务的 bin 目录

    1
    cd D:\software\MySQL\MySQLServer8.0\bin\
  4. 卸载原有 MySQL80 服务

    1
    mysqld remove MySQL80
  5. 重新安装 MySQL 服务,注意服务名不要重复

    1
    mysqld install MySQL
  6. 进入注册表
    快捷键:win + r,然后输入 regedit 进入注册表。

  7. 修改注册表对应路径和默认 my.ini 路径(可能需要重启)
    注册表路径:计算机 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL

    修改 imagePath 值,注意改成你自己安装路径

    1
    "D:\software\MySQL\MySQLServer8.0\bin\mysqld.exe" --defaults-file="D:\software\MySQL\data\MySQLServer8.0\my.ini" MySQL
  8. 登录时,选择端口(基于多个服务实例共存),-P 大写 P 后面接在 my.ini 配置文件中指定的端口。

    1
    mysql -uroot -p -P 3366

仅供参考,虽然个人在 win10 环境得以解决,但不一定适用你的系统环境。

三、MySQL8.0 使用

仅供测试学习参考,具体应以实际工作场景为主。

主要基于 Windows10 进行说明,一个 MariaDB 服务与两个 MySQL8.0 服务共存。

使用 netstat 命令进行查找 Windows 下启动的 MySQL 服务:

1
netstat -ano | findstr 3306

1、Windows 多个 MySQL 服务实例共存

注意修改注册表路径,解决启动 MySQL 服务意外停止的情况,提示 1067 还是 1068 来着。

执行 CMD 命令时以管理员身份运行,普通身份运行会提示拒绝访问。前提是服务已经注册到 services 中,可以 sc 或者 net 命令进行管理。

1
2
3
net start mysql80
net start mysql8
net start mysql

为了测试演示最新版本,我将服务名改成了 MySQL8。

1
2
3
4
# 安装服务指定了服务名为MySQL8
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8
# 或者是MySQL
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL

分享另外一种思路。当然,还可以使用其他方式实现。比如,我安装 MySQL 服务时,选择不注册服务到 services 即可。启动服务时,通过脚本去实现

1.1、登录并指定端口 3307,默认为 3306,我的 MariaDB 已经占用了 3306 端口。个人测试演示多个实例共存改了端口为 3307

注意:在 Windows 下使用 cmd 命令窗口以管理员身份运行登录,没有配置环境变量也没关系,切换到 MySQL 安装的 bin 目录下执行命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 第一步执行d:,切换到D盘
d:
-- 第二步执行cd命令,切换到个人安装mysql的bin目录下
cd D:\work\mysql-8.0.28-winx64\bin
-- 执行登录命令,并指定端口
mysql -uroot -p -P 3307
-- 查询数据库版本
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.28 |
+-----------+
1 row in set (0.00 sec)

总结一下:

  • 第一步执行 d:,切换到 D 盘;
  • 第二步执行 cd 命令,切换到个人安装 mysql 的 bin 目录下;
  • 第三步执行登录命令,并指定端口登录到 mysql;
  • 最后进行简单的交互,并查询数据库版本。

1.2、初步使用命令行模式进行交互

1
2
3
4
5
6
7
8
CREATE DATABASE TEST;
USE TEST;
CREATE TABLE STUDY(
ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAMES VARCHAR(64) NOT NULL
)ENGINE=MyISAM;
INSERT INTO STUDY VALUES(1,'mysql目前最新版本mysql8.0.28');
SELECT * FROM STUDY;

2、权限设置

2.1、参考官方文档

设置远程登录权限,以及密码校验规则,与安装数据库版本默认使用的默认认证插件有关

参考 MySQL 官方文档:https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

1
2
3
4
5
6
01、Authentication plugin 'caching_sha2_password' is not supported
02、Authentication plugin 'caching_sha2_password' cannot be loaded:
dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2):
image not found
03、Warning: mysqli_connect(): The server requested authentication
method unknown to the client [caching_sha2_password]

使用上面这种密码缓存验证算法。描述到验证插件不支持 caching_sha2_password,不能被加载,服务连接请求提出警告认证方法无法识别客户端。通俗一点解释:在使用 SQLyog、MySQL workbench 等客户端连接时,密码验证规则是不被允许的。需要更换验证方式,或者其它方式解决验证。下面将会给出解决方案。

2.2、修改 root 用户密码

使用 ALTER USER 语句修改用户密码:

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

2.3、创建普通用户并授权(开发人员或者 DBA 使用的比较多)

初学者可以先忽略授权这一步,使用 root 用户将基本功练扎实。还没入门,就没这头皮发麻的授权模式给弄崩溃了,哈哈。

授权命令 GRANT,撤销权限命令 REVOKE。创建用户并授权参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/roles.html

创建角色:CREATE ROLE 命令

1
CREATE ROLE 'app_developer', 'app_read', 'app_write';

授予角色权限:GRANT 命令

1
2
3
GRANT ALL ON app_db.* TO 'app_developer';
GRANT SELECT ON app_db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';

创建用户:CREATE USER 命令

1
2
3
4
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';
CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';
CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';
CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';

授权给创建的用户:GRANT 命令

1
2
3
GRANT 'app_developer' TO 'dev1'@'localhost';
GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';

你还可以在 my.ini 或者 my.cnf 配置文件中指定设置:

1
2
[mysqld]
mandatory_roles='role1,role2@localhost,r3@%.example.com'

同样可以在命令模式下使用 SET 命令设置:

1
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com';

检查角色 dev1 的权限,检查权限比较多,我就不一一列举。详情可以参考官方文档。

1
2
3
4
5
6
7
mysql> SHOW GRANTS FOR 'dev1'@'localhost';
+-------------------------------------------------+
| Grants for dev1@localhost |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `dev1`@`localhost` |
| GRANT `app_developer`@`%` TO `dev1`@`localhost` |
+-------------------------------------------------+

创建用户并授权,授权全部权限:

1
2
CREATE USER 'old_app_dev'@'localhost' IDENTIFIED BY 'old_app_devpass';
GRANT ALL ON old_app.* TO 'old_app_dev'@'localhost';

锁定用户:锁定:LOCK,盲猜解锁就是 UNLOCK

1
ALTER USER 'old_app_dev'@'localhost' ACCOUNT LOCK;

授权给新的开发账号权限,授权部分权限:

1
2
CREATE USER 'new_app_dev1'@'localhost' IDENTIFIED BY 'new_password';
GRANT 'old_app_dev'@'localhost' TO 'new_app_dev1'@'localhost';

以上提供官方文档进行参考,与其东找找西找找,不如翻阅官方文档更直接更准确。咱缺的不是学习的途径,而是缺乏学习的方法。

3、测试创建用户

友情提示:关于密码验证插件请参考官方文档,第六章节安全篇 Security Components and Plugins

3.1、创建普通用户并授权远程登录

创建一个普通用户 test

1
2
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

授予用户 test 在本地(localhost)的权限,只给查询权限(SELECT),授权所有(ALL)

1
2
mysql> GRANT SELECT ON *.* TO test@'localhost';
Query OK, 0 rows affected (0.01 sec)

3.2、给 root 用户授权

创建 root 用户授权给所有 IP 都能登录,以及修改密码缓存认证方式。如果是生产环境,不建议这样操作,最小化授权即可

1
2
3
4
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456';
mysql> GRANT ALL ON *.* TO root@'%';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456';
mysql> flush privileges;

在第三方工具中验证登录结果,在 localhost 下可以登录成功

目前只给了查询(select)权限,验证插入(insert)权限

1
2
mysql> insert into study values(7,'美柑');
ERROR 1142 (42000): INSERT command denied to user 'test'@'localhost' for table 'study'

这是在 SQLyog 工具下进行验证的,建议初学者多在命令行窗口下进行练习,熟能生巧。

3.2、授权 root 用户远程登录,MySQL8.0 授权方式

用户授权,在 MySQL8.0 版本中变得更加严格,以前 MySQL5.6 或者 5.7 版本中可以执行授权的方式有了变化。经过个人亲测,操作如下。

MySQL8.0 授权方式,记得使用 flush privileges 刷新权限

1
2
3
4
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步创建用户
mysql> GRANT ALL ON *.* TO root@'%'; -- 第二步授权
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456'; -- 第三步修改密码验证方式
mysql> flush privileges; -- 第四步刷新权限

修改密码认证方式(8.0 默认使用的是 sha2 算法缓存认证),第一种解决方案如下,这只是其中一种解决方案,亲测有效

1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

第二种解决方案:在 my.ini 或者 my.cnf 配置文件加入如下配置,重启服务并加载配置文件。经过测试没有生效,似乎没有读取到配置文件,但奇怪的是我设置的 3307 端口和默认存储引擎以及编码格式是生效的。(在官网看到的解决方案

1
2
[mysqld]
default_authentication_plugin=mysql_native_password

MySQL8.0 官方文档默认设置的认证缓存算法是 caching_sha2_password

1
ALTER USER user(用户) IDENTIFIED WITH caching_sha2_password BY 'password';

MySQL8.0 之前的授权方式(5.6 或者 5.7 都支持这种方式授权

1
GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'你的IP地址' IDENTIFIED BY '设置的密码' WITH GRANT OPTION;

示例:授权 root 户,所有 IP 都可连接实际工作中,不建议这样操作,此处只作为演示说明

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

刷新权限

1
flush privileges;

4、如何高效的使用自带官方文档

登录到 MySQL8,指定 3307 端口,或者使用默认端口登录。

1
2
mysql -uroot -p -P 3307
mysql -uroot -p

使用帮助命令,以?contents 形式查找系统帮助命令。

1
2
3
4
5
6
7
8
9
? contents;
? create user;
? create database;
? create table;
? select;
? insert;
? update;
? delete;
URL: https://dev.mysql.com/doc/refman/8.0/en/select|insert|update|delete.html

在使用本地的帮助文档时,你会发现系统自动提示了官方文档的地址 https://dev.mysql.com/doc。

示例:查询创建表的帮助命令?create table 只展示了一部分内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> ? create table
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
data_type:
(see https://dev.mysql.com/doc/refman/8.0/en/data-types.html)
index_type:
USING {BTREE | HASH}
index_option: {
KEY_BLOCK_SIZE [=] value
| index_type
...
}
URL: https://dev.mysql.com/doc/refman/8.0/en/create-table.html
  • Name:查看的帮助命令名称
  • Description:描述
  • Syntax:示例
  • data_type:支持的数据类型
  • index_type:可以使用的索引类型

我只列举了部分进行说明,更详细的可以自己测试。

在创建用户、数据库以及建表和字段全部采取的大写,因为在 Linux 和 Unix 下对大写敏感的,并不是 MySQL 本身对大小写敏感。

1、创建数据库

1
2
CREATE DATABASE TEST;
USE TEST;

2、创建表,可以通过 ENGINE 指定表的存储引擎,mysql5.6 以及之后的版本默认为 InnoDB 存储引擎。

1
2
3
4
CREATE TABLE STUDY(
ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAMES VARCHAR(64) NOT NULL
)ENGINE=MyISAM;

3、插入数据

1
INSERT INTO STUDY VALUES(1,'mysql目前最新版本mysql8.0.28');

4、查询数据

1
SELECT * FROM STUDY;

5、修改数据

1
UPDATE STUDY S SET S.NAMES='mysql默认的存储引擎是InnoDB' WHERE S.ID=1;

6、删除全部数据

1
DELETE FROM STUDY;

至此基本的创建用户、创建数据库、增删改查都会使用了。

5、MySQL 官方文档下载地址

左侧导航栏 Download this Manual:MySQL 文档资源。

以 MySQL 8.4 作为示例展示:

img

如下为具体下载地址:

MySQL 9.x

MySQL 9.0 在线文档:MySQL :: MySQL 9.0 Reference Manual

MySQL 9.0 文档 PDF 文件下载地址: refman-9.0-en.a4.pdf

MySQL 9.1 在线文档:MySQL :: MySQL 9.1 Reference Manual

MySQL 9.1 文档 PDF 文件下载地址:refman-9.1-en.a4.pdf

MySQL 9.2 在线文档:MySQL :: MySQL 9.2 Reference Manual

MySQL 9.2 文档 PDF 文件下载地址:refman-9.2-en.a4.pdf

MySQL 8.x

MySQL 8.4 在线文档:MySQL :: MySQL 8.4 Reference Manual

MySQL 8.4 文档 PDF 文件下载地址:refman-8.4-en.a4.pdf

MySQL 8.0 在线文档: https://dev.mysql.com/doc/refman/8.0/en

MySQL 8.0 文档 PDF 文件下载地址: refman-8.0-en.a4.pdf

MySQL 5.x

MySQL 5.7 在线文档: https://dev.mysql.com/doc/refman/5.7/en/

MySQL 5.7 文档 PDF 文件下载地址: refman-5.7-en.a4.pdf

MySQL 5.6 在线文档(注:官方已停止维护,在线文档已经移动了,PDF 下载地址还可使用)

https://dev.mysql.com/doc/refman/5.6/en/

MySQL 5.6 文档 PDF 文件下载地址: refman-5.6-en.a4.pdf

友情提醒:下载官方文档尽量前往官方网站下载。某网站利用用户上传的资源,却厚着脸皮需要 VIP 才能下载,对这种行为表示鄙视。当然,也可以在文初获取我个人整理的压缩包组合(不定期更新)。

6、MySQL 官方示例库

给出 sakila-db 数据库包含三个文件,便于大家获取与使用:

  1. sakila-schema.sql:数据库表结构;
  2. sakila-data.sql:数据库示例模拟数据;
  3. sakila.mwb:数据库物理模型,在 MySQL workbench 中可以打开查看。

https://downloads.mysql.com/docs/sakila-db.zip

world-db 数据库,包含三张表:city、country、countrylanguage。

只是用于用于简单测试学习,建议使用 world-db

https://downloads.mysql.com/docs/world-db.zip


四、MySQL 连接工具

做了超链接,方便去官网获取。

推荐几个比较常用的工具:DBeaverphpMyAdminSQLyogMySQL Workbench、Navicat 可视化工具进行连接操作。工具的使用是其次的,更重要的在于对 MySQL 命令语句的运用。

tips:包含了 SQLyog ,还整理了部分安装包以及 MySQL 官方提供的 sakilaworld 示例哟!

链接: https://pan.baidu.com/s/11gIlZKxoTG5BCCcoXdVJRg 提取码: ntu7

可以使用通用数据库管理工具 DBeaver 或者 Navicat ,逆向生成的示例数据库的模型。

如果真的要使用到建物理模型:推荐你学习 Sybase PowerDesigner 设计工具的使用,而且需要了解关系数据库设计遵循的三范式。现在数据库设计最多满足 3NF,普遍认为范式过高,虽然具有对数据关系更好的约束性,但也导致数据关系表增加而令数据库 IO 更易繁忙,原来交由数据库处理的关系约束现更多在数据库使用程序中完成。

五、MySQL 之 JDBC

1、官方 connector-j

MySQL8.0 的 maven 安装 JDBC:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-maven.html

JDBC 连接驱动管理:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

// Notice, do not import com.mysql.cj.jdbc.*
// or you will have problems!

public class LoadDriver {
public static void main(String[] args) {
try {
// The newInstance() call is a work around for some
// broken Java implementations
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
} catch (Exception ex) {
// handle the error
}
}
}
Connection conn = null;
...
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=root&password=123456");
// Do something with the Connection
...
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}

2、JDBC 测试连接 MySQL8.0 数据库

2.1、maven 配置

设置 pom.xml 配置文件,使用 MySQL 最新的版本 8.0.28 进行连接测试。maven 的镜像仓库,可以使用阿里的镜像源地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>

2.2、编写 Java 代码

使用编辑器 sts(Spring Tool Suite4 或者 IDEA)

创建普通的 maven 项目或者 springboot 项目,然后配置 pom.xml。

目的:使用纯 JDBC 测试,或者 ORM 框架 mybatis、hibernate 都行,还可以使用对 hibernate 进行再次封装的 JPA ,最终达到对数据库进行最基本的增删改查。

Java 版 JDBC 连接 MySQL 数据库示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.demo.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestConnMySQL8 {

public static void main(String[] args) throws ClassNotFoundException, SQLException {
TestSQLConnMySQL();
}
private static final Logger log = LoggerFactory.getLogger(TestConnMySQL8.class);
//初始化参数
static Connection conn = null;
static PreparedStatement ps = null;
static ResultSet rs = null;
/**
* @throws SQLException
* @throws ClassNotFoundException
*/
private static void TestSQLConnMySQL() throws SQLException, ClassNotFoundException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
/**
* 1.获取连接参数url,username,password,默认端口是3306
* MySQL:url ="jdbc:mysql://127.0.0.1:3306/test";
*/
/** MySQL拼接url **/
String url = "jdbc:mysql://192.168.245.147:3306/TEST?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "Mysql@123456";
//获取连接
conn = DriverManager.getConnection(url, username, password);
if(null != conn) {
log.info("connect database success...");
}else {
log.error("connect database failed...");
}
//查询数据库
String sql = "SELECT * FROM STUDY";
// 3.通过preparedStatement执行SQL
ps = conn.prepareStatement(sql);
// 4.执行查询,获取结果集
rs = ps.executeQuery();
// 5.遍历结果集,前提是你的数据库创建了表以及有数据
while (rs.next()) {
//对应数据库表中字段类型Int使用getInt,varchar使用getString
System.out.println("ID:" + rs.getInt("ID"));
System.out.println("姓名:" + rs.getString("NAMES"));
}
} finally {
// 6.关闭连接 释放资源
rs.close();
ps.close();
conn.close();
}
}
}

参考资料

MySQL 文档整理合集(5.6、5.7、8.0.41、8.1、8.2、8.3,8.4.4,9.2.0),定期更新:

链接: https://pan.baidu.com/s/1jGkGarWZWVnzQ9so0D8maA?pwd=8kff

提取码: 8kff

文档如何食用,请阅读 docs 目录的 ReadME 文件。


END

以上就是本次 MySQL8.0.28 安装与使用的全部内容,希望能对你的工作与学习有所帮助。能看到这里的,都是帅哥靓妹。如果感觉总结的不到位,也希望能留下您宝贵的意见,我会在文章中进行调整优化。

原创不易,转载也请标明出处和作者。

最后,希望对你的生活和工作有些许帮助,点赞关注不迷路哟!

—END—