mysql8.0简介:
-
性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争(”hot spot”热点竞争问题)工作负载。
-
NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。
-
窗口函数(Window Functions):从 MySQL 8.0 开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中。即窗口函数不需要 GROUP BY。
-
隐藏索引:在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。
-
降序索引:MySQL 8.0 为索引提供按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序。
-
通用表表达式(Common Table Expressions CTE):在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰。
-
UTF-8 编码:从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。
-
JSON:MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。
-
可靠性:InnoDB 现在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。
-
高可用性(High Availability):InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。
-
安全性:对 OpenSSL 的改进、新的默认身份验证、SQL 角色、密码强度、授权。
详细更新说明:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
官方发布说明:https://blogs.oracle.com/mysql/announcing-general-availability-of-mysql-80
MySQL 8 正式版的新增功能:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/
Mysql8.0安装:
1:下载Mysql源
[root@localhost ~]# rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2: 安装Mysql8.0
[root@localhost ~]# yum --enablerepo=mysql80-community install mysql-community-server -y
出来以下内容则表示安装成功
3:启动mysql
[root@localhost ~]# systemctl start mysqld
mysql8.0启动后会生成一个临时密码,我们先用临时密码登录
[root@localhost ~]# awk '/temporary password/ {print $13}' /var/log/mysqld.log
ulq10uCz<oxo
4:登录mysql
[root@localhost ~]# mysql -uroot -p'ulq10uCz<oxo'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
5:修改临时密码
mysql> alter user 'root'@'localhost' identified by 'Linux112';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
可以看到提示:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
policy requirements(密码不符合当前策略)
在8.0中首次密码必须强制修改为大写字母+符号+数字形式,并且不少于8位
mysql> alter user 'root'@'localhost' identified by 'Linux@112';
Query OK, 0 rows affected (0.00 sec
接下来我们查看密码策略:
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
策略说明
validate_password.length 是密码的最小长度,默认是8,我们把它改成6
输入:set global validate_password.length=6;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;
再次修改为简单密码
mysql> set global validate_password.length=6;
Query OK, 0 rows affected (0.01 sec)
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.check_user_name=off;
Query OK, 0 rows affected (0.00 sec)
可以看到修改成功了
mysql> alter user 'root'@'localhost' identified by 'Linux112';
Query OK, 0 rows affected (0.00 sec)
如不想使用密码也可用以下方式跳过密码:
1:在/etc/my.cnf文件添加skip-grant-tables内容
2:重启mysql
3:直接输入mysql即可登录