• MySQL 9.0创新版发布!功能又进化了!


    作者:IT邦德
    中国DBA联盟(ACDU)成员,10余年DBA工作经验,
    Oracle、PostgreSQL ACE
    CSDN博客专家及B站知名UP主,全网粉丝10万+
    擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
    安装迁移,性能优化、故障应急处理
    微信:jem_db
    QQ交流群:587159446
    公众号:IT邦德

    前言

    MySQL9.0创新版本已经正式发布,这次功能确实进化了不少!

    1.MySQL版本变更

    Oracle每季度发布一次MySQL更新,我平时也一直留意的官网的动态,2024年7月1推出了最新的 MySQL9.0创新版本.

    MySQL发布模型分为两个主要轨道:LTS(长期支持)和创新。所有LTS和Innovation版本都包含错误和安全修复,并被视为生产级质量。

    2.MySQL9.0功能进化

    2.1 添加或更改的功能

    1.从MySQL 9.0.0开始支持将
    EXPLAIN ANALYZE的JSON输出保存到用户变量中
    
    EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt
    
    mysql> EXPLAIN FORMAT=JSON INTO @myupdate 
        ->   UPDATE a SET name2 = "garcia" WHERE id = 3;              
    mysql> SELECT @myupdate, @mydelete\G
    *************************** 1. row ***************************
    @myupdate: {
      "query_block": {
        "select_id": 1,
        "table": {
          "update": true,
          "table_name": "a",
          "access_type": "range",
          "possible_keys": [
            "PRIMARY"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "id"
          ],
          "key_length": "4",
          "ref": [
            "const"
          ],
          "rows_examined_per_scan": 1,
          "filtered": "100.00",
          "attached_condition": "(`db`.`a`.`id` = 3)"
        }
      }
    }
    
    2.Event DDL in prepared statements
    MySQL 9.0提供了对服务器端准备语句的支持,那有什么好处呢?
    a.减少每次执行语句时解析语句的开销。
    通常,数据库应用程序处理大量几乎相同的语句,
    只更改子句中的文字或变量值,
    如用于查询和删除的WHERE、用于更新的SET和用于插入的values。
    b.防止SQL注入攻击。
    参数值可以包含未加转义的SQL引号和分隔符。
    
    --使用方法如下:
    mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
    mysql> SET @a = 3;
    mysql> SET @b = 4;
    mysql> EXECUTE stmt1 USING @a, @b;
    +------------+
    | hypotenuse |
    +------------+
    |          5 |
    +------------+
    mysql> DEALLOCATE PREPARE stmt1;
    
    3.新增2个性能架构系统变量表
    (1)variables_metadata表
    提供了有关系统变量的一般信息。
    这些信息包括MySQL服务器识别的每个系统变量的
    名称、范围、类型、范围(如适用)和描述。
    
    (2)global_variable_attributes表
    提供了有关服务器分配给全局系统变量的属性值对的信息。
    

    2.2 弃用的功能

    能架构variables_info表列的MIN_VALUE和MAX_VALUE列现在已被弃用,
    请使用variables_metadata表中具有相同名称的列
    

    2.3 删除的功能

    为了向后兼容,mysql_native_password在客户端上仍然可用,因此mysql 9.0客户端程序可以连接到早期版本的mysql服务器。在MySQL 9.0中,以前版本的客户端程序中内置的MySQL本地身份验证插件已转换为必须在运行时加载的插件。

    其实从mysql 8.0中不推荐使用的mysql_native_password身份验证插件已被删除。
    服务器现在拒绝来自不具有client_PLUGIN_AUTH
    功能的旧客户端程序的mysql_native身份验证请求
    由于此更改,9.0还删除了以下服务器选项和变量:
    –mysql本机密码服务器选项
    –mysql本机密码代理用户服务器选项
    –default_authentication_plugin服务器系统变量

    3.MySQL9.0新版本体验

    以下是MySQL9.0支持的的平台

    以下是MySQL9.0下载的地址
    https://dev.mysql.com/downloads/mysql/

    3.1 安装依赖

    yum -y install lrzsz wget perl-Digest-MD5
    yum -y install numactl
    yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make

    3.2 添加用户及组

    groupadd mysql
    useradd -g mysql -d /home/mysql mysql
    passwd mysql

    3.3 安装包上传解压

    1.压缩包校验
    md5sum mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar
    47c7bd2b1b987049450d8081497f84c4  mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar
    
    2.解压
    tar -xvf mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar -C /home/mysql/
    
    3.授权
    chown -R mysql:mysql /home/mysql/
    
    --安装以下四个即可
    mysql-community-common-9.0.0-1.el8.x86_64.rpm
    mysql-community-libs-9.0.0-1.el8.x86_64.rpm
    mysql-community-client-9.0.0-1.el8.x86_64.rpm
    mysql-community-server-9.0.0-1.el8.x86_64.rpm
    

    3.4 正式安装

    安装顺序:包之间相互依赖,所以必须注意安装顺序
    ✓ 先装 common 
    ✓ 再装 libs
    ✓ 再装 client
    ✓ 最后装 server
    
    注:root用户下操作
    [root@rhel8 ~]# cd /home/mysql
    
    rpm -ivh mysql-community-common-9.0.0-1.el8.x86_64.rpm
    rpm -ivh --force --nodeps mysql-community-libs-9.0.0-1.el8.x86_64.rpm
    rpm -ivh mysql-community-client-9.0.0-1.el8.x86_64.rpm --force --nodeps
    rpm -ivh mysql-community-server-9.0.0-1.el8.x86_64.rpm --force --nodeps
    

    3.5 初始化

    1.初始化
    mysqld --initialize
    2.授权
    chown mysql:mysql /var/lib/mysql -R

    3.4 启动MySQL服务

    systemctl start mysqld
    systemctl status mysqld
    systemctl enable mysqld

    3.5 登陆新增用户

    ## 临时密码登陆
    grep 'temporary password' /var/log/mysqld.log
    mysql -uroot -p
    
    ## 修改本地用户密码
    mysql> alter user root@'localhost' identified  by 'root';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select Host,User from mysql.user;
    +-----------+------------------+
    | Host      | User             |
    +-----------+------------------+
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | root             |
    +-----------+------------------+
    4 rows in set (0.00 sec)
    
    ##新增远程登陆
    mysql> create user root@'%' identified by 'root';
    mysql> grant all on *.* to root@'%' with grant option;
    mysql> flush privileges;
    

    4.向量及JSON体验

    mysql> create database testdb;
    mysql> use testdb;
    
    mysql>CREATE TABLE vector_json (
      id INT PRIMARY KEY,
      json_value JSON,
      vector_value vector
    );
    
    --插入向量及JSON
    INSERT INTO vector_json (id, json_value,vector_value) 
    VALUES 
    (1, 
    JSON_ARRAY(1.0, 2.0, 3.0,4.0),
    to_vector('[1,2,3,4]')
    );
    
    select 
    id,
    json_value,
    VECTOR_DIM(vector_value) 
    from vector_json;
    

    5.总结

    Oracle每季度发布一次MySQL更新,让我持续关注MySQL的发展

  • 相关阅读:
    2311rust,到66版本更新
    一篇文章说清 webpack、vite、vue-cli、create-vue 的区别
    Rancher 系列文章-Rancher 升级
    Pr 时间重映射卡点
    【干货分享】2022软件测试面试题汇总
    python之pyQt5实例:几何绘图界面
    第七章:Springmvc中applicationContext.xml配置文件应用上下文详解
    springboot+mybatis拦截器实现水平分表操作
    使用Go的功能选项模式优雅实现devstream内部复杂对象的创建
    算法2:链表的逆转
  • 原文地址:https://blog.csdn.net/weixin_41645135/article/details/140118654