作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)
大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle 11g OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来聊聊****支持向量的 MySQL 9.0 已发布,我却看不懂 MySQL 的骚操作了!欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”顶,更多干货文章才能第一时间推送,谢谢!
前 言
2024 年第三季度 MySQL 新版本发布了,北京时间 7 月 1 日 傍晚时分,MySQL 官方发布了 MySQL 9.0 新的创新版本,以及 LTS 长周期版本 8.4.1 和 MySQL8 系列的 MySQL8.0.38 版本。但是 MySQL 官方却没有发布 MySQL9 的官方文档以及《What Is New in MySQL 9.0》,也没有《MySQL 9.0 Release Notes》,这三个文档肯定是每个 MySQL 新版本发布必读的文档。
(https://dev.mysql.com/downloads/mysql/)
等待第二日,也就是北京时间 7 月 3 日凌晨才发布了官方文档,《What Is New in MySQL 9.0》和《MySQL 9.0 Release Notes》。于是赶紧去翻翻看,实在是大跌眼镜,MySQL 9.0 火出圈了,都在讨论 9.0 新版本,原厂大佬也说支持 vector 向量数据类型了,但是不管是使用全篇搜索还是查看标题从这三个文档中看不到关于 vector 向量相关的内容,但是根据圈内传出来的 MySQL9.0 截图发现是支持向量数据类型的,查看官方文档中关于数据类型的介绍也没有 vector 向量数据类型。****这就很让人莫不着头脑了,官方文档的介绍更是简单的和没说一样,看不到什么新特性?这是在挤牙膏吗?那为啥又能清楚看到支持向量数据类型呢?有知道的大佬来评论区聊聊呀!
MySQL LTS 长周期版本和 Innovation 创新版本
MySQL 的发布模式主要分为两个方面:LTS(Long-Term Support** 长期支持)和 Innovation 创新版本**。所有 LTS 和创新版本都包含错误和安全修复,被视为生产级质量。
- MySQL LTS 版本
如果您的环境需要一组稳定的特性和较长的支持周期,一般情况下有八年的长周期支持,例如:8.0.X 以及 8.4.X 以及 9.7.X 。
行为:这些版本只包含必要的修复,以减少与数据库软件行为变化相关的风险。在 LTS版本中没有删除。
功能只能在第一个 LTS 版本(如 8.4.0 LTS)中删除(和添加),之后则不能删除。
支持:LTS 系列遵循 Oracle 终身支持策略,其中包括 5 年的主要支持和 3 年的扩展支持。
另外,LTS 支持升级到下一个 LTS 系列,例如8.4.x LTS 到9.7.x LTS,而不支持跳过 LTS 系列。例如,8.4.x LTS 不能跳过9.7.x LTS 直接升级到10.7.x LTS。
- MySQL Innovation 创新版本
如果你想获得最新的特性,改进和改变。这些版本非常适合在快节奏的开发环境中工作的开发人员和 DBA,这些开发环境具有高水平的自动化测试和现代持续集成技术,可以加快升级周期。例如:8.1–8.3、9.1–9.6 这些都是创新版本,包含一些新特性。
行为:除了创新版本中的新特性外,随着代码重构、移除不推荐的功能以及
修改 MySQL 使其行为更符合 SQL 标准,行为也会发生变化。这不会在 LTS 版本中发生。
行为更改会产生很大的影响,特别是在处理任何与应用程序相关的内容时,
例如 SQL 语法、新的保留词、查询执行和查询性能。行为更改可能需要更改应用程序,这可能涉及大量迁移工作。我们打算提供必要的工具和配置设置,以使这些转换更容易。
支持:支持创新版本直到下一个创新版本。
(https://dev.mysql.com/doc/refman/9.0/en/mysql-releases.html)
创新版本安装也遵循类似的行为,即创新版本升级到最近的创新系列版本。例如,MySQL 9.0.0 创新版将升级到 MySQL 9.3.0。
MySQL 版本生命周期图
主要区别在于,您不能直接在创新系列的不同主要版本之间进行升级,例如 8.3.0 到9.0.0。相反,应该先升级到最近的 LTS 系列,然后再升级到下面的 Innovation 系列。例如,从8.3.0 升级到 8.4.0,再从 8.4.0 升级到 9.0.0,就是有效的升级路径。
MySQL 9.0 中的新功能
- 从 MySQL 9.0.0 开始可以保存 EXPLAIN ANALYZE INTO 的 JSON 输出,语法如下:
EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt
注意:只有当 explain_json_format_version 系统变量设置为 2 时,此特性才可用。
- 从 MySQL 9.0.0 开始,‘CREATE EVENT’、‘ALTER EVENT’、‘DROP EVENT’ DDL event 可以作为 PREPARE 阶段执行。
- 从 MySQL 9.0.0 开始,添加两个 Performance Schema 系统变量表。- variables_metadata:提供了关于系统变量的一般信息。这些信息包括 MySQL 服务器识别的每个系统变量的名称、作用域、类型、范围(如适用)和描述。该表中的两个列(MIN_VALUE 和 MAX_VALUE)用于替换 variables_info 表中已弃用的列。- global_variale_attributes:提供了关于服务器分配给全局系统变量的属性值对的信息。
- 从 MySQL 9.0.0 开始,“mysql_native_password” 插件已经被删除,如果客户端软件不具备“CLIENT_PLUGIN_AUTH”能力将无法连接服务器。为了向后兼容,mysql_native_password 在客户端仍然可用,以便 MySQL 9.0 客户端程序可以连接到早期版本的 MySQL 服务器。在 MySQL 9.0 中,MySQL 原生身份验证插件已经被转换为必须在运行时加载的插件。由于这一变化,以下服务器参数和变量也被删除:--mysql-native-password 服务器选项--mysql-native-password-proxy-users 服务器选项default_authentication_plugin 服务器系统变量
没有系统变量、状态变量或服务器选项,在 MySQL 9.0 中弃用。更多详细内容请访问 MySQL 官网。
**没有了,就这。。。。。。挤牙膏了吗?相反五月份发布的 Oracle 23ai 新版本发布了 300 多项新特性,MySQL 就这???“What Is New” 就这些了?真让人吃惊,前面发布的长周期支持版本 8.4.0 也是,除了 8.2 版本的 Router 读写分离的端口外,几乎没有看到有啥特别吸引人的新特性,大失所望,有没有呢?欢迎大佬们来评论区聊聊!
**
安装 MySQL 9.0 玩玩 Vector 向量数据类型
那就这样吧,没有官方文档说明,只能摸索,这里通过下载 rpm 包来安装体验,我的环境是 X86 下的 Oracle Linux 8.7,故这里下载 Linux 8 版本的 mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar 安装包,并上传到服务器解压。
[root@jiekexu soft]# cd mysql9.0/
[root@jiekexu mysql9.0]# ll
total 993560
-rw-r--r-- 1 root root 1017405440 Jul 2 11:08 mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar
[root@jiekexu mysql9.0]# tar -xvf mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar
mysql-community-client-9.0.0-1.el8.x86_64.rpm
mysql-community-client-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-client-plugins-9.0.0-1.el8.x86_64.rpm
mysql-community-client-plugins-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-common-9.0.0-1.el8.x86_64.rpm
mysql-community-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-debugsource-9.0.0-1.el8.x86_64.rpm
mysql-community-devel-9.0.0-1.el8.x86_64.rpm
mysql-community-icu-data-files-9.0.0-1.el8.x86_64.rpm
mysql-community-libs-9.0.0-1.el8.x86_64.rpm
mysql-community-libs-compat-9.0.0-1.el8.x86_64.rpm
mysql-community-libs-compat-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-libs-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-server-9.0.0-1.el8.x86_64.rpm
mysql-community-server-debug-9.0.0-1.el8.x86_64.rpm
mysql-community-server-debug-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-server-debuginfo-9.0.0-1.el8.x86_64.rpm
mysql-community-test-9.0.0-1.el8.x86_64.rpm
mysql-community-test-debuginfo-9.0.0-1.el8.x86_64.rpm
yum 安装 MySQL 9.0
直接使用 yum mysql-commu.rpm 安装所有的 rpm 包。*
[root@jiekexu mysql9.0]# yum install mysql-commu*.rpm
Last metadata expiration check: 0:53:34 ago on Tue 02 Jul 2024 04:35:39 PM CST.
Dependencies resolved.
=============================================================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================================================
Installing:
mysql-community-client x86_64 9.0.0-1.el8 @commandline 15 M
mysql-community-client-debuginfo x86_64 9.0.0-1.el8 @commandline 29 M
mysql-community-client-plugins x86_64 9.0.0-1.el8 @commandline 4.7 M
mysql-community-client-plugins-debuginfo x86_64 9.0.0-1.el8 @commandline 4.7 M
mysql-community-common x86_64 9.0.0-1.el8 @commandline 696 k
mysql-community-debuginfo x86_64 9.0.0-1.el8 @commandline 7.0 M
mysql-community-debugsource x86_64 9.0.0-1.el8 @commandline 21 M
mysql-community-devel x86_64 9.0.0-1.el8 @commandline 8.2 M
mysql-community-icu-data-files x86_64 9.0.0-1.el8 @commandline 2.2 M
mysql-community-libs x86_64 9.0.0-1.el8 @commandline 1.5 M
mysql-community-libs-compat x86_64 9.0.0-1.el8 @commandline 1.5 M
mysql-community-libs-compat-debuginfo x86_64 9.0.0-1.el8 @commandline 2.8 M
mysql-community-libs-debuginfo x86_64 9.0.0-1.el8 @commandline 2.7 M
mysql-community-server x86_64 9.0.0-1.el8 @commandline 61 M
mysql-community-server-debug x86_64 9.0.0-1.el8 @commandline 25 M
mysql-community-server-debug-debuginfo x86_64 9.0.0-1.el8 @commandline 161 M
mysql-community-server-debuginfo x86_64 9.0.0-1.el8 @commandline 244 M
mysql-community-test x86_64 9.0.0-1.el8 @commandline 350 M
mysql-community-test-debuginfo x86_64 9.0.0-1.el8 @commandline 29 M
Installing dependencies:
perl-JSON noarch 2.97.001-2.el8 ol8_AppStream 96 k
perl-Memoize noarch 1.03-421.el8 ol8_AppStream 118 k
perl-Time-HiRes x86_64 4:1.9758-2.el8 ol8_AppStream 61 k
Transaction Summary
=============================================================================================================================================================================================
Install 22 Packages
Total size: 971 M
Installed size: 3.9 G
Is this ok [y/N]: y
.......
Installed:
mysql-community-client-9.0.0-1.el8.x86_64 mysql-community-client-debuginfo-9.0.0-1.el8.x86_64 mysql-community-client-plugins-9.0.0-1.el8.x86_64
mysql-community-client-plugins-debuginfo-9.0.0-1.el8.x86_64 mysql-community-common-9.0.0-1.el8.x86_64 mysql-community-debuginfo-9.0.0-1.el8.x86_64
mysql-community-debugsource-9.0.0-1.el8.x86_64 mysql-community-devel-9.0.0-1.el8.x86_64 mysql-community-icu-data-files-9.0.0-1.el8.x86_64
mysql-community-libs-9.0.0-1.el8.x86_64 mysql-community-libs-compat-9.0.0-1.el8.x86_64 mysql-community-libs-compat-debuginfo-9.0.0-1.el8.x86_64
mysql-community-libs-debuginfo-9.0.0-1.el8.x86_64 mysql-community-server-9.0.0-1.el8.x86_64 mysql-community-server-debug-9.0.0-1.el8.x86_64
mysql-community-server-debug-debuginfo-9.0.0-1.el8.x86_64 mysql-community-server-debuginfo-9.0.0-1.el8.x86_64 mysql-community-test-9.0.0-1.el8.x86_64
mysql-community-test-debuginfo-9.0.0-1.el8.x86_64 perl-JSON-2.97.001-2.el8.noarch perl-Memoize-1.03-421.el8.noarch
perl-Time-HiRes-4:1.9758-2.el8.x86_64
Complete!
启动 MySQL 9.0
执行“systemctl start mysqld” 启动并初始化 MySQL9.0。
[root@jiekexu mysql9.0]# cd /var/lib/mysql
[root@jiekexu mysql]# ll
total 0
[root@jiekexu mysql]# systemctl start mysqld
[root@jiekexu mysql]# systemctl status mysqld
? mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2024-07-02 17:37:16 CST; 19s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1450526 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 1450600 (mysqld)
Status: "Server is operational"
Tasks: 35 (limit: 100127)
Memory: 483.0M
CGroup: /system.slice/mysqld.service
+-1450600 /usr/sbin/mysqld
Jul 02 17:37:08 jiekexu systemd[1]: Starting MySQL Server...
Jul 02 17:37:16 jiekexu systemd[1]: Started MySQL Server.
[root@jiekexu mysql]# pwd
/var/lib/mysql
[root@jiekexu mysql]# ls
auto.cnf ca-key.pem client-key.pem ib_buffer_pool '#innodb_redo' mysql.ibd mysql_upgrade_history public_key.pem sys
binlog.000001 ca.pem '#ib_16384_0.dblwr' ibdata1 '#innodb_temp' mysql.sock performance_schema server-cert.pem undo_001
binlog.index client-cert.pem '#ib_16384_1.dblwr' ibtmp1 mysql mysql.sock.lock private_key.pem server-key.pem undo_002
# --查看 OS 版本
[root@jiekexu mysql]# cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="8.7"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.7"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:7:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.7
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.7
然后我们通过查看 /var/log/mysqld.log 日志找到初始化密码,进行登录并修改 root 密码。
[root@jiekexu mysql]# grep 'temporary password' /var/log/mysqld.log
2024-07-02T09:37:13.723904Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: dH92CaisUO:j
[root@jiekexu mysql]# mysql -uroot -pdH92CaisUO:j
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: 9.0.0
Copyright (c) 2000, 2024, 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> select version();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> \s
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>
mysql> alter user root@localhost identified by 'MySQL9.0';
Query OK, 0 rows affected (0.05 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 9.0.0 |
+-----------+
1 row in set (0.03 sec)
mysql> \s
--------------
mysql Ver 9.0.0 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 8
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 9.0.0
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 1 hour 21 min 12 sec
Threads: 2 Questions: 10 Slow queries: 0 Opens: 130 Flush tables: 3 Open tables: 46 Queries per second avg: 0.002
--------------
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
体验 MySQL Vector 向量
首先我们先创建库和表,然后创建带 vector 类型的列和表,通过函数 to_vector 插入向量数据类型,from_vector 查看向量数据,vector_dim 计算向量维度等等。其他好玩的特性不知道官方啥时候能公布?感兴趣的大佬只能去看源码了。看完源码有知道的大佬来评论区聊聊呀!
mysql> create database jiekexu;
Query OK, 1 row affected (0.00 sec)
mysql> use jiekexu;
Database changed
mysql> create table t_vector (id int, c_v vector);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into t_vector(1,1);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,1)' at line 1
mysql> insert into t_vector values(1,1);
ERROR 6136 (HY000): Value of type 'numeric, size: 8' cannot be converted to 'vector' type.
mysql>
mysql> insert into t_vector values(1,[1,1]);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[1,1])' at line 1
mysql>
mysql> insert into t_vector values(1,to_vector([1,1]));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[1,1]))' at line 1
mysql> insert into t_vector values(1,to_vector('[1,1]'));
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_vector;
+------+--------------------+
| id | c_v |
+------+--------------------+
| 1 | 0x0000803F0000803F |
+------+--------------------+
1 row in set (0.00 sec)
mysql> insert t_vector select 2,to_vector('[2,2]');
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from t_vector;
+------+--------------------+
| id | c_v |
+------+--------------------+
| 1 | 0x0000803F0000803F |
| 2 | 0x0000004000000040 |
+------+--------------------+
2 rows in set (0.00 sec)
mysql> select id,from_vector(c_v) from t_vector;
+------+---------------------------+
| id | from_vector(c_v) |
+------+---------------------------+
| 1 | [1.00000e+00,1.00000e+00] |
| 2 | [2.00000e+00,2.00000e+00] |
+------+---------------------------+
2 rows in set (0.00 sec)
mysql> select id,vector_dim(c_v) from t_vector;
+------+-----------------+
| id | VECTOR_DIM(c_v) |
+------+-----------------+
| 1 | 2 |
| 2 | 2 |
+------+-----------------+
2 rows in set (0.00 sec)
总 结
MySQL 9.0 官方文档中的新特性几乎没有啥可以聊的,但不知为何可以支持 vector 向量数据类型却没有在官方文档中有任何说明,不知道是官方文档还没来得急更新相关信息还是说 9.0 版本只是有这个功能暂未公开说明,这个不得而知,这个骚操作只能等待官方后面看会不会解释了。
参考链接
https://dev.mysql.com/downloads/mysql/
https://mp.weixin.qq.com/s/wFOANEYKLNiy5lC1nXbTVA
https://dev.mysql.com/doc/relnotes/mysql/9.0/en/news-9-0-0.html
https://dev.mysql.com/doc/refman/9.0/en/linux-installation-rpm.html
https://blogs.oracle.com/mysql/post/mysql-july-2024-ga-releases-now-available
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
分享几个数据库备份脚本
一文搞懂 Oracle 统计信息
我的 Oracle ACE 心路历程
MOP 系列|MOP 三种主流数据库索引简介
Oracle 主流版本不同架构下的静默安装指南
关机重启导致 ASM 磁盘丢失数据库无法启动
Oracle SQL 性能分析(SPA)原理与实战演练
Oracle 11g 升级到 19c 需要关注的几个问题
Windows 10 环境下 MySQL 8.0.33 安装指南
SQL 大全(四)|数据库迁移升级时常用 SQL 语句
OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)
Oracle 大数据量导出工具——sqluldr2 的安装与使用
从国产数据库调研报告中你都能了解哪些信息及我的总结建议
使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践
在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
版权归原作者 JiekeXu 所有, 如有侵权,请联系我们删除。