乐趣区

关于mysql:MySQL8028安装教程全程参考MySQL官方文档

前言

为了 MySQL8.0.28 装置教程我居然在 MySQL 官网文档逛了一天,至此献给想入门 MySQL8.0 的初学者。以目前最新版本的 MySQL8.0.28 为示例进行装置与初步应用的具体解说,面向初学者的具体教程。无论是 Windows 还是 Linux 上装置,咱都会。这兴许是迄今为止全网最最最具体的 MySQL8.0.28 的装置与应用教程

温故而知新,能够为师矣。咱缺的是学习的路径吗?答案并不是,而是不足学习的办法。官网文档是很具体的,而且是权威的,其它的那些书籍、博文啊都是基于官网文档以及本人的应用经验总结的。写这篇文章的用意,心愿大家能够总结本人的学习办法,长于利用官网文档来晋升本人。

倡议初学者多在命令行窗口下进行练习,游刃有余。达到肯定的熟练程度,再借助客户端工具进步咱们的工作效率。最终目标是啥?活下去呗,进步捞金能力。当然开个玩笑,回到正题,接着往下看。

从下载到装置,再到遗记明码解决方案。一步步应用命令行窗口学会基本操作,而后应用客户端近程连贯工具。最初配合时下比拟炽热的 Java 语言进行演示如何应用 JDBC 连贯最新的 MySQL8.0 数据库,以及执行查问返回后果。

注释

咱也不多哔哔,间接上干货,要的就是实用性和性价比!

一、MySQL8.0.28 下载

能够下载 msi 文件一键装置或者解压版 zip 文件进行命令行初始化装置。

MySQL 官网下载地址

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

1、Windows 版本下载

在 Windows 下能够抉择下载 msi 文件或者解压版 zip 文件。个别应用,抉择我应用紫色框线选中的即可。对于上面的 Debug Test Suite,是带有许多的测试套件在外面,对于有测试需要的人员能够进行下载。

2、Linux 版本下载

依据本人须要的 Linux 发行版版本适配的 MySQL 进行抉择。比方,我集体抉择的是本人比拟相熟的 Redhat7 系列进行下载。同样有 bundle 版本,蕴含了一些插件和依赖在外面,便于应用 rpm 包装置。装置单个的 server 服务,须要装置其它的依赖包比拟繁琐。对于初学者,倡议间接下载 RPM bundle 版本。我偏不,就要折腾。那也行,请接着往下看,一样提供了具体装置步骤。

3、注意事项

个别人能够能没认真看,官网会提醒登录,加了 button 按钮字体十分显眼,而上面的的我须要立刻下载则字体很小。所以留神了,抉择上面的 No thanks,我须要立刻下载。抉择的是社区版本,收费提供下载。

二、MySQL8.0 装置

初学者尝鲜,倡议在 Windows 下装置

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

1、Windows 下装置

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

# 变量名
MySQL_HOME
#变量值
D:\work\mysql-8.0.28-winx64\bin

msi 文件装置就不介绍了,傻瓜式的一键装置,留神抉择门路

次要介绍解压版本 zip 的装置与实例化

mysql-8.0.28-winx64.zip

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

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

[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、实例化

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

-- 第一步执行 d:,切换到 D 盘
d:
-- 第二步执行 cd 命令,切换到集体装置 mysql 的 bin 目录下
cd D:\work\mysql-8.0.28-winx64\

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

mysqld --initialize-insecure

1.3、装置服务

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

cd D:\work\mysql-8.0.28-winx64\bin
mysqld install
mysqld install --service -mysql8

如果没有装置多个服务,应用 mysqld install 即可。能够不必指定服务名,默认的服务名为 MySQL。

1.4、服务命令应用,须要管理员身份运行 CMD 命令,留神看我的门路是在 bin 目录下执行的

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

启动服务net start mysql

# 启动服务
net start mysql
D:\work\mysql-8.0.28-winx64\bin>net start mysql8
MySQL8 服务正在启动 .
MySQL8 服务曾经启动胜利。

进行服务net stop mysql

# 进行服务
net stop mysql 
D:\work\mysql-8.0.28-winx64\bin>net stop mysql8
MySQL8 服务正在进行..
MySQL8 服务已胜利进行。

删除服务sc delete mysql

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

1.5、注意事项

# 装置服务指定了服务名为 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 结尾的文件)

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

批改明码的命令

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

之所以在 Windows 下介绍的如此具体,是因为咱们平时的工作环境更多的是在 Windows 下进行的。就算应用 Linux 环境个别也是应用虚拟机配合 Linux 发行版,再就是云服务器了。MySQL 的一些命令都相熟了,Linux 下装置还能难倒你吗?间接翻一翻官网文档即可。

2、Linux 下装置

倡议初学者不要像我这样去装置 rpm 包,你能够间接下载 rpm bundle,或者应用 mysql 官网的 yum 源。集体有多年 Linux 应用教训,以及有肯定的理论工作教训;晓得如何判断哪些包是必须的,以及哪些须要被替换掉。

肯定要留神 Linux 操作系统的权限问题 权限在最小范畴内满足即可

2.1、筹备好安装包

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

2.2、装置 rpm 包

零碎会提醒哪些是须要的依赖包,所以我当时 筹备须要的依赖包

[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-icu-data-files-8.0.28-1.el7.x86_64.rpm 
正告:mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm: 头 V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
筹备中...                          ################################# [100%]
正在降级 / 装置...
   1:mysql-community-icu-data-files-8.################################# [100%]
[root@localhost mysql]# rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm 
正告:mysql-community-common-8.0.28-1.el7.x86_64.rpm: 头 V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
筹备中...                          ################################# [100%]
正在降级 / 装置...
   1:mysql-community-common-8.0.28-1.e################################# [100%]

[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 -ivh mysql-community-common-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64
[root@localhost mysql]# rpm -qa | grep mysql

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

$ yum remove mariadb-libs

2.2.3、正式装置 server

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

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

[mysql@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 组
$ groupadd mysql
#新增 mysql 用户到 mysql 组中
$ useradd -g mysql mysql
#批改 mysql 用户明码
$ mysql passwd
#批改所有者
$ chown -R mysql:mysql /var/lib/mysql

tips:你也能够将 mysql 用户退出到 /etc/sudoers 配置文件中,限度 mysql 用户应用的权限。

2.3、初始化

设置明码为空,后续登录可批改明码

$ mysqld --initialize-insecure

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

Redhat7 系列应用命令启动 MySQL 服务

$ systemctl start mysqld

设置开机自启

$ systemctl enable mysqld

敞开服务

$ systemctl stop mysqld

重启服务

$ systemctl restart mysqld

登录 mysql

$ mysql -uroot -p

2.5、设置防火墙

退出 mysql 服务以及须要的端口 3306

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

或者长期敞开防火墙测试

$ systemctl stop firewalld.service

2.6、测试近程登录

开启防火墙,退出了 3306/tcp 协定规定,退出了 mysql 服务规定。设置了以前旧的明码缓存验证规定 mysql_native_password,,解决 caching_sha2_password 验证插件无奈被加载的问题。

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 解决办法](https://stackoverflow.com/que…
)。后果兜兜转转回到了跳过登录明码权限验证,8.0 版本之前的办法生效了,咱没跟上 MySQL 更新的步调。

1、敞开 MySQL 服务:

$ systemctl stop mysqld

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

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

或者在 /etc/my.cnf 文件中增加,是一样的成果。最初记得去掉跳过验证。Windows 下在 my.ini 文件中退出 skip-grant-tables。

[mysqld]
skip-grant-tables

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

$ systemctl start mysqld

4、登录到 root

$ mysql -u root

5、应用命令更新 root 用户明码

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

a、这种形式可能行不通

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

b、采取将明码先置空

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

6、批改明码,解决方案,设置更强的明码规定即可

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,即可胜利。

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

7、敞开 mysql 服务

$ systemctl stop mysqld

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

$ systemctl unset-environment MYSQLD_OPTS

9、再次启动 mysql

$ systemctl start mysqld

最终胜利登录到 mysql

$ mysql -u root -p

三、MySQL8.0 应用

次要基于 Windows10 进行阐明的,一些命令同样实用于 Linux。

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

留神批改注册表门路,解决启动 MySQL 服务意外进行的状况,提醒 1067 还是 1068 来着。

net start mysql8
net start mysql

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

# 装置服务指定了服务名为 MySQL8
计算机 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8
# 或者是 MySQL
计算机 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL

我之前装置的 MariaDB10.5.6。我想持续应用 MariaDB,又想体验最新版的 MySQL8.0.28,抉择这样解决。

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

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

-- 第一步执行 d:,切换到 D 盘
d:
-- 第二步执行 cd 命令,切换到集体装置 mysql 的 bin 目录下
cd D:\work\mysql-8.0.28-winx64\bin
-- 执行登录命令,并指定端口
mysql -uroot -p -P 3307
-- 查询数据库版本
```sql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.28    |
+-----------+
1 row in set (0.00 sec)
```

总结一下:

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

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

2、权限设置

2.1、参考官网文档

设置近程登录权限,以及明码校验规定,与装置数据库版本默认应用的默认认证插件无关

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

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 语句 批改用户明码:

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 命令

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

授予角色权限:GRANT 命令

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 命令

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 命令

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 配置文件中指定设置:

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

同样能够在命令模式下应用 SET 命令设置:

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

查看角色 dev1 的权限,查看权限比拟多,我就不一一列举。详情能够参考官网文档。

mysql> SHOW GRANTS FOR 'dev1'@'localhost';
+-------------------------------------------------+
| Grants for dev1@localhost                       |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `dev1`@`localhost`        |
| GRANT `app_developer`@`%` TO `dev1`@`localhost` |
+-------------------------------------------------+

创立用户并受权,受权全副权限:

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

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

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

受权给新的开发账号权限,受权局部权限:

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

以上提供官网文档进行参考,与其东找找西找找,不如翻阅官网文档更间接更精确。咱缺的不是学习的路径,而是不足学习的办法。

3、测试创立用户

3.1、创立普通用户并受权近程登录

创立一个普通用户 test

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

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

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

3.2、给 root 用户受权

创立 root 用户受权给所有 IP 都能登录,以及批改明码缓存认证形式

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)权限

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刷新权限

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 算法缓存认证), 第一种解决方案如下 ,这只是其中一种解决方案, 亲测无效

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 端口和默认存储引擎以及编码格局是失效的。( 在官网看到的解决方案

[mysqld]
default_authentication_plugin=mysql_native_password

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

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

MySQL8.0 之前的受权形式(5.6 或者 5.7 都反对这种形式受权

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

示例:受权 root 户,所有 IP 都可连贯

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

刷新权限

flush privileges;

4、如何高效的应用自带官网文档

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

mysql -uroot -p -P 3307
mysql -uroot -p

应用帮忙命令,以? create contents 模式查找零碎帮忙命令。

? create 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 只展现了一部分内容。

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、创立数据库

CREATE DATABASE TEST;
USE TEST;

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

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

3、插入数据

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

4、查问数据

SELECT * FROM STUDY;

5、批改数据

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

6、删除全副数据

DELETE FROM STUDY;

至此根本的创立用户、创立数据库、增删改查都会应用了。

四、MySQL 连贯工具

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

  • phpMyAdmin
  • MYSQL workbench
  • SQLyog

举荐几个比拟罕用的工具:phpMyAdmin、SQLyog、MySQL Workbench、Navicat 可视化工具进行连贯操作。工具的应用是其次的,更重要的在于对 MySQL 命令语句的使用。

tips:蕴含了 SQLyog,还整顿了局部安装包以及 MySQL 官网提供的 sakilaworld 示例哟!

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

给出一个应用 Navicat 逆向生成的示例数据库 world 的模型:

如果真的要应用到建物理模型:举荐你学习 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

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 的镜像仓库,能够应用阿里的镜像源地址。

<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、JPA、或者 hibernate 都行,最终达到对数据库进行最根本的增删改查。

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();}
    }
}

在 sts 编辑工具连贯并返回测试后果

总结

以上就是本次 MySQL8.0.28 装置与应用的全部内容,心愿能对你的工作与学习有所帮忙。感觉写的好,就拿出你的一键三连。在公众号上更新的可能要快一点,目前还在欠缺中。能看到这里的,都是帅哥靓妹。如果感觉总结的不到位,也心愿能留下您贵重的意见,我会在文章中进行调整优化。

原创不易,转载也请表明出处和作者,尊重原创。不定期上传到 github 或者 gitee。认准龙腾万里 sky,如果看见其它平台不是这个 ID 收回我的文章,就是转载的。MySQL 系列文章:《MySQL 开发篇,存储引擎的抉择真的很重要吗?》曾经上传至 github 和 gitee 仓库 SQL-study。集体 github 仓库地址,个别会先更新 PDF 文件,而后再上传 markdown 文件。如果拜访 github 太慢,能够应用 gitee 进行克隆。

tips:应用 hexo 搭建的动态博客也会定期更新保护。

<H5 align=center> 作者:龙腾万里 sky</H5>

退出移动版