MySQL8.0.28安装教程全程参考MySQL官方文档
MySQL 文档整理合集(5.6、5.7、8.0、8.1、8.2、8.3,8.4.3,9.1.0):
链接: https://pan.baidu.com/s/1jGkGarWZWVnzQ9so0D8maA?pwd=8kff
提取码: 8kff
如果你想支持小站健康成长,可以在文末进行赞赏哟~~~
阅读本篇博文与读者的约定:
- 关于数据库(角色用户)需要开放哪些权限,需要根据职员的具体职责进行判断。
- 博文可能存在过时,仅供参考哟。
当你看到这篇教程时,MySQL 目前最新GA(稳定)版本可能已经更新到了 MySQL 8.0.40 或者更高,MySQL 8.0 Release Notes Changes in MySQL 8.0.40 (2024-10-15, General Availability),创新版 Innovation MySQL 9.1 Release Notes Changes in MySQL 9.1.0 (2024-10-15, Innovation Release),长期支持版 MySQL 8.4 Release Notes Changes in MySQL 8.4.3 (2024-10-15, 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 | mysql> show create table t\G |
使用MySQL8.0.29对比:
1 | mysql> create database test; |
以目前(当时 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 | @echo off |
示例如下:
1 | @echo off |
二、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平台提供了多种安装形式:
- msi文件:直接双击进行安装,有可视化界面,安装较为容易,但不够灵活。
- 归档包(archive):以zip格式进行压缩,类似于Linux中的二进制包。比较灵活,只需几个命令即可安装服务和实例化。
- 源码包(source package):最灵活,可根据需求编译安装功能,难易度最高。
- docker形式安装:其实是在容器中安装。
初学者尝鲜,建议在 Windows 下安装。接下来介绍的是归档包(archive)安装与使用。
一般情况,默认安装一个MySQL版本服务实例。也不排除预算有限,在同台服务器上安装多个实例进行测试。默认端口3306,如果在发布(生产)环境建议修改默认端口,达到不让别人一下就猜到的目的。接下来安装测试多个MySQL服务版本共存一个操作系统下,只针对于Windows下安装多个服务(没有使用虚拟机工具,真机环境下测试)。Linux下有便捷的yum源以及apt方式安装,一键安装所需依赖,但也有比较繁琐的rpm包安装。
1、Windows下安装MySQL8.0(zip包)
配置环境变量,编辑系统环境变量,控制面板>所有控制面板项>系统>高级系统配置>系统环境变量:
注意:如果是 Windows10 或者 Windows11 ,直接将解压路径加入 PATH 环境变量即可。
1 | #变量名 |
主要介绍解压版本zip的安装与实例化:
1 | unzip 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 | [client] |
1.2、实例化
得到反馈说执行-initialize-insecure’mysqld’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
解决方法:cd D:\work\mysql-8.0.28-winx64\bin
,切换至上述目录执行。
翻阅了官方文档查看到初始化的命令,命令并没有问题,查看帮助文档:
1 | mysqld --verbose --help |
- --initialize参数:创建一个默认的数据库并退出,然后创建一个超级用户(root)并生成随机的密码并记录到日志中;
- --initialize-insecure参数:创建一个默认的数据库并退出,然后创建一个超级用户(root)密码为空。
1 | -I, --initialize Create the default database and exit. Create a super user |
注意:Windows 下 zip 包解压后的 mysqld 文件在 \mysql-8.0.28-winx64\bin\mysqld
,切换到 mysqld 所在目录中执行初始化。
以管理员身份运行 CMD 命令窗口,切换到 mysql 解压后的目录下:
1 | # 1、第一步切换到D盘 |
设置为空密码,去掉不必要的麻烦。
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 | cd D:\work\mysql-8.0.28-winx64\bin |
如果没有安装多个服务,使用mysqld install即可。可以不用指定服务名,默认的服务名为MySQL。
1.4、服务命令使用,需要管理员身份运行CMD命令,注意看我的路径是在bin目录下执行的
我没有配置 MySQL8 的系统环境变量,所以都在 MySQL 的 bin 目录中执行命令。
启动服务net start mysql
1 | # 启动服务 |
停止服务net stop mysql
1 | # 停止服务 |
删除服务sc delete mysql
1 | # 删除服务 |
1.5、注意事项
1 | # 安装服务指定了服务名为MySQL8 |
安装服务指定了服务名为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 其中四种方式:
- rpm 包安装:最为简单,但不灵活,适合初学者使用。
- 二进制包(binary package):也称归档包(archive),编译好的源码包,比rpm包更灵活。个人认为是安装多个服务最佳选择。
- 源码包(source package):最灵活,可根据需求编译安装功能,难易度最高。
- docker 形式安装:其实是在容器中安装。
使用 rpm 包安装 MySQL 其实相对较容易,只是缺少依赖包时比较繁琐,需要提前准备好所有依赖包。建议初学者不要像我这样去安装rpm包,你可以直接下载rpm bundle,或者使用mysql官方的yum源。
一定要注意Linux操作系统的权限问题,权限在最小范围内满足即可。
接下来将详细介绍在 RHEL7 系列使用rpm包形式安装 MySQL8.0.28,也是最为简单的一种方式。持续更新中,二进制包与源码包安装教程也会陆续加进来。先简单介绍二进制包安装部分步骤,详细步骤在后续更新:
1 | $> groupadd mysql #创建mysql组 |
以龙蜥系统8.4GA进行简单说明:
1.必备安装包(兼容Centos8,缺少依赖包):
1 | $> yum install libaio # install library |
2.启动服务,可以写入脚本设置开机自启。
此处只做示例说明,具体使用结合实际情况。
vim mysql_start.sh
1 |
|
运行脚本:
1 | chmod 755 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 | [mysql@localhost ~]$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm |
2.2.1、安装依赖包,然后使用rpm -qa | grep mysql
查询哪些被安装了。
怎么传到服务器上,简单一点scp命令即可。这里也仅限于自己测试,实际山是需要用户名密码以及网络是打通的才可进行操作。
安装rpm包的步骤方法一,严格按照我所写的顺序来,非 root 用户使用 sudo 提权:
1 | rpm -ivh mysql-community-client-plugins-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 | $ sudo yum remove mariadb-libs |
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 | [sky@localhost ~]$ mysqladmin --version |
2.2.4、赋予mysql安装目录所有者为mysql用户,rpm包默认安装后的路径在 /var/lib/mysql
。在授予 mysql 用户所有者和所属组权限之后,你可以使用 mysql 用户进行登录或者启动服务与关闭服务。创建 mysql 用户,推荐设置为没有服务器主机登录权限的用户。
1 | #添加mysql组 |
2.3、初始化
每个人的安装环境有所差异。可以参考官方文档,关于初始化有详细的说明:
https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html
设置密码为空,后续登录可修改密码。
1 | $ mysqld --initialize-insecure |
在进行到这一步的时候,咱可以去日志验证,能看到提示是初始化完成的。并且友好的提示,已经给你初始化完成啦,温馨提示创建了一个超级用户密码是空的。
1 | $ cat /var/log/mysqld.log |
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 | [root@dywangk mysql]# systemctl status mysqld |
权限越大,责任越大。
解决方案:检查mysql数据库初始化目录和日志目录所有者和所属组。当时一在检查权限问题,忽略了日志的问题。
1 | [root@mysql ~]# chown -R mysql:mysql /var/lib/mysql |
2.5、使用防火墙管理工具 firewall
加入 mysql 服务以及需要的端口 3306
1 | $ firewall-cmd --zone=public --add-port=3306/tcp --permanent |
或者临时关闭防火墙测试
1 | $ systemctl stop firewalld.service |
2.6、测试远程登录
开启防火墙,加入了 3306/tcp 协议规则,加入了 mysql 服务规则。设置了以前旧的密码缓存验证规则 mysql_native_password
,,解决caching_sha2_password
验证插件无法被加载的问题。
1 | mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步创建用户 |
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 | [mysqld] |
3、使用了刚刚的设置启动mysql
1 | $ systemctl start mysqld |
4、登录到字符命令终端
1 | $ mysql -uroot -p |
5、使用命令更新 root 用户密码
1 | mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword') |
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 | As mentioned my shokulei in the comments, for 5.7.6 and later, you should use |
MySQL8.0出现这种情况,请设置更安全的密码规则比如设置密码为:Mysql@123456,即可成功。
1 | ERROR 1819 (HY000): Your password does not satisfy the current policy requirements |
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文件)
作为补充说明:详细安装不做截图,只写注意事项。
- MSI文件安装注意事项;
- 多个MySQL服务共存如何解决冲突。
注意选安装路径,Advanced Options,这行字很小,返回上一层时很有可能没注意。
注意:选择安装路径有空格,可能会产生影响,最好去掉。默认安装路径在C盘,我这里改为自己的管理路径。
方法有多种,这里采取先卸载服务,然后安装服务,最后修改注册表指定mysqld和my.ini路径。
以管理员身份运行CMD命令
执行命令进入D盘
1
d:
进入MySQL服务的bin目录
1
cd D:\software\MySQL\MySQLServer8.0\bin\
卸载原有MySQL80服务
1
mysqld remove MySQL80
重新安装MySQL服务,注意服务名不要重复
1
mysqld install MySQL
进入注册表
快捷键:win + r,然后输入regedit进入注册表。修改注册表对应路径和默认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
登录时,选择端口(基于多个服务实例共存),-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 | net start mysql80 |
为了测试演示最新版本,我将服务名改成了MySQL8。
1 | # 安装服务指定了服务名为MySQL8 |
分享另外一种思路。当然,还可以使用其他方式实现。比如,我安装 MySQL 服务时,选择不注册服务到 services 即可。启动服务时,通过脚本去实现。
1.1、登录并指定端口3307,默认为3306,我的MariaDB已经占用了3306端口。个人测试演示多个实例共存改了端口为3307。
注意:在 Windows 下使用 cmd 命令窗口以管理员身份运行登录,没有配置环境变量也没关系,切换到 MySQL 安装的 bin 目录下执行命令。
1 | -- 第一步执行d:,切换到D盘 |
总结一下:
- 第一步执行d:,切换到D盘;
- 第二步执行 cd 命令,切换到个人安装 mysql 的 bin 目录下;
- 第三步执行登录命令,并指定端口登录到mysql;
- 最后进行简单的交互,并查询数据库版本。
1.2、初步使用命令行模式进行交互
1 | CREATE DATABASE TEST; |
2、权限设置
2.1、参考官方文档
设置远程登录权限,以及密码校验规则,与安装数据库版本默认使用的默认认证插件有关
参考MySQL官方文档:https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
1 | 01、Authentication plugin 'caching_sha2_password' is not supported |
使用上面这种密码缓存验证算法。描述到验证插件不支持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 | GRANT ALL ON app_db.* TO 'app_developer'; |
创建用户:CREATE USER命令
1 | CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass'; |
授权给创建的用户:GRANT命令
1 | GRANT 'app_developer' TO 'dev1'@'localhost'; |
你还可以在my.ini或者my.cnf配置文件中指定设置:
1 | [mysqld] |
同样可以在命令模式下使用SET命令设置:
1 | SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; |
检查角色dev1的权限,检查权限比较多,我就不一一列举。详情可以参考官方文档。
1 | mysql> SHOW GRANTS FOR 'dev1'@'localhost'; |
创建用户并授权,授权全部权限:
1 | CREATE USER 'old_app_dev'@'localhost' IDENTIFIED BY 'old_app_devpass'; |
锁定用户:锁定:LOCK,盲猜解锁就是UNLOCK
1 | ALTER USER 'old_app_dev'@'localhost' ACCOUNT LOCK; |
授权给新的开发账号权限,授权部分权限:
1 | CREATE USER 'new_app_dev1'@'localhost' IDENTIFIED BY 'new_password'; |
以上提供官方文档进行参考,与其东找找西找找,不如翻阅官方文档更直接更准确。咱缺的不是学习的途径,而是缺乏学习的方法。
3、测试创建用户
友情提示:关于密码验证插件请参考官方文档,第六章节安全篇 Security Components and Plugins
3.1、创建普通用户并授权远程登录
创建一个普通用户 test
1 | mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY '123456'; |
授予用户 test 在本地(localhost)的权限,只给查询权限(SELECT),授权所有(ALL)
1 | mysql> GRANT SELECT ON *.* TO test@'localhost'; |
3.2、给root用户授权
创建root用户授权给所有IP都能登录,以及修改密码缓存认证方式。如果是生产环境,不建议这样操作,最小化授权即可。
1 | mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; |
在第三方工具中验证登录结果,在localhost下可以登录成功:
目前只给了查询(select)权限,验证插入(insert)权限:
1 | mysql> insert into study values(7,'美柑'); |
这是在SQLyog工具下进行验证的,建议初学者多在命令行窗口下进行练习,熟能生巧。
3.2、授权root用户远程登录,MySQL8.0授权方式
用户授权,在MySQL8.0版本中变得更加严格,以前MySQL5.6或者5.7版本中可以执行授权的方式有了变化。经过个人亲测,操作如下。
MySQL8.0授权方式,记得使用flush privileges刷新权限
1 | mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步创建用户 |
修改密码认证方式(8.0默认使用的是sha2算法缓存认证),第一种解决方案如下,这只是其中一种解决方案,亲测有效。
1 | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; |
第二种解决方案:在my.ini或者my.cnf配置文件加入如下配置,重启服务并加载配置文件。经过测试没有生效,似乎没有读取到配置文件,但奇怪的是我设置的3307端口和默认存储引擎以及编码格式是生效的。(在官网看到的解决方案)
1 | [mysqld] |
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 | mysql -uroot -p -P 3307 |
使用帮助命令,以? contents形式查找系统帮助命令。
1 | ? contents; |
在使用本地的帮助文档时,你会发现系统自动提示了官方文档的地址 https://dev.mysql.com/doc。
示例:查询创建表的帮助命令? create table只展示了一部分内容。
1 | mysql> ? create table |
- Name:查看的帮助命令名称
- Description:描述
- Syntax:示例
- data_type:支持的数据类型
- index_type:可以使用的索引类型
我只列举了部分进行说明,更详细的可以自己测试。
在创建用户、数据库以及建表和字段全部采取的大写,因为在Linux和Unix下对大写敏感的,并不是MySQL本身对大小写敏感。
1、创建数据库
1 | CREATE DATABASE TEST; |
2、创建表,可以通过ENGINE指定表的存储引擎,mysql5.6以及之后的版本默认为InnoDB存储引擎。
1 | CREATE TABLE STUDY( |
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 作为示例展示:
如下为具体下载地址:
MySQL 9.x
MySQL 9.0 在线文档:MySQL :: MySQL 9.0 Reference Manual
MySQL 9.0 文档 PDF 文件下载地址: refman-9.0-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数据库包含三个文件,便于大家获取与使用:
- sakila-schema.sql:数据库表结构;
- sakila-data.sql:数据库示例模拟数据;
- 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连接工具
做了超链接,方便去官网获取。
- DBeaver
- MySQL Workbench
推荐几个比较常用的工具:DBeaver、phpMyAdmin、SQLyog、MySQL Workbench、Navicat 可视化工具进行连接操作。工具的使用是其次的,更重要的在于对MySQL命令语句的运用。
tips:包含了 SQLyog ,还整理了部分安装包以及 MySQL 官方提供的 sakila 、world 示例哟!
链接: 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 | import java.sql.Connection; |
2、JDBC 测试连接 MySQL8.0 数据库
2.1、maven 配置
设置 pom.xml
配置文件,使用 MySQL 最新的版本 8.0.28 进行连接测试。maven 的镜像仓库,可以使用阿里的镜像源地址。
1 | <dependency> |
2.2、编写Java代码
使用编辑器sts(Spring Tool Suite4或者IDEA)
创建普通的 maven 项目或者 springboot 项目,然后配置 pom.xml。
目的:使用纯 JDBC 测试,或者 ORM 框架 mybatis、hibernate都行,还可以使用对 hibernate 进行再次封装的 JPA ,最终达到对数据库进行最基本的增删改查。
Java 版 JDBC连接 MySQL 数据库示例代码如下:
1 | package com.example.demo.dao; |
参考资料:
- MySQL 8.0 Release Notes Changes in MySQL 8.0.40 (2024-10-15, General Availability)
- MySQL 8.0 Release Notes Changes in MySQL 8.0.28 (2022-01-18, General Availability)
- MySQL 8.0 Release Notes Changes in MySQL 8.0.29 (2022-04-26, General Availability)
- MySQL 8.0 Release Notes Changes in MySQL 8.0.38 (2024-07-01, General Availability)
- Windows 平台解压命令 Expand-Archive
MySQL 文档整理合集(5.6、5.7、8.0、8.1、8.2、8.3,8.4.3,9.1.0):
链接: https://pan.baidu.com/s/1jGkGarWZWVnzQ9so0D8maA?pwd=8kff
提取码: 8kff
文档如何食用,请阅读 docs 目录的 ReadME 文件。
END
以上就是本次 MySQL8.0.28 安装与使用的全部内容,希望能对你的工作与学习有所帮助。大本营在公众号,关注龙腾万里sky(ID:dywangk),目前还在完善中。能看到这里的,都是帅哥靓妹。如果感觉总结的不到位,也希望能留下您宝贵的意见,我会在文章中进行调整优化。
原创不易,转载也请标明出处和作者。
最后,希望对你的生活和工作有些许帮助哟!
—END—