开发者

MySQL9.0的两种部署模式及各个版本发布的新功能

开发者 https://www.devze.com 2024-08-13 11:43 出处:网络 作者: XingYuyu_Coder
目录1.mysql 9.0 创新版发布1.1 MySQL 9.0 功能进化1.1.2 弃用的功能1.1.3 删除的功能1.2 二进制编译安装1.3 通过 yum 来安装 RPM 包的方式2.MySQL 8.4.0 LTS 发布3.MySQL 8.3.0 发布3.1 标签化 GTID3.2 jsON EXPLAI
目录
  • 1.mysql 9.0 创新版发布
    • 1.1 MySQL 9.0 功能进化
      • 1.1.2 弃用的功能
      • 1.1.3 删除的功能
    • 1.2 二进制编译安装
      • 1.3 通过 yum 来安装 RPM 包的方式
      • 2.MySQL 8.4.0 LTS 发布
        • 3.MySQL 8.3.0 发布
          • 3.1 标签化 GTID
            • 3.2 jsON EXPLAIN 格式
              • 3.3 身份验证说明
                • 3.4 可插拔身份验证
                  • 3.5 线程池新增信息
                    • 3.6 删减功能
                    • 4.MySQL 8.1.0 发布
                      • 4.1 密码参数
                        • 4.2 错误日志加强
                          • 4.3 二进制日志
                            • 4.4 审计日志
                              • 4.5 组复制增强
                                • 4.6 废弃特性

                                1.MySQL 9.0 创新版发布

                                oracle 每季度发布一次 MySQL 更新,2024年7月1日推出了最新的 MySQL 9.0 创新版本。

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

                                MySQL9.0的两种部署模式及各个版本发布的新功能

                                1.1 MySQL 9.0 功能进化

                                1.1.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表

                                提供了有关服务器分配给全局系统变量的属性值对的信息。

                                1.1.2 弃用的功能

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

                                1.1.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服务器系统变量

                                1.2 二进制编译安装

                                下载地址:https://dev.mysql.com/downloads/mysql/

                                MySQL9.0的两种部署模式及各个版本发布的新功能

                                #! /bin/bash
                                #-----------------------------------------------------
                                #Author:            XingYuyu
                                #Date:              2024-07-2
                                #Blog:              http://8.141.4.74
                                #Filename:          install_offline_mysql9.0_for_rocky9.sh
                                #Description:       [在Rocky 8/9离线二进制安装mysql 9.0]
                                #-----------------------------------------------------
                                SRC_DIR=$(pwd)
                                
                                #MYSQL='mysql-8.3.0-linux-glibc2.28-x86_64.tar.xz'
                                #MYSQL='mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz'
                                MYSQL='mysql-9.0.0-linux-glibc2.28-x86_64.tar.xz'
                                MYSQL_ROOT_PASSWORD='123456'
                                
                                COLOR='echo -e \E[01;31m'
                                END='\E[0m'
                                
                                check () {
                                    if [ $UID -ne 0 ]; then
                                        $COLOR"当前用户不是root, 安装失败"$END
                                        exit 1
                                    fi
                                
                                    cd $SRC_DIR
                                
                                    if [ ! -e $MYSQL ]; then
                                        $COLOR"缺少${MYSQL}文件"$END
                                        $COLOR"请将相关软件放在${SRC_DIR}目录下"$END
                                        exit
                                    elif [ -e /usr/local/mysql ]; then
                                        $COLOR"数据库已存在,安装失败"$END
                                        exit
                                    else
                                        return
                                    fi
                                }
                                
                                install_mysql () {
                                    $COLOR"开始安装MySQL数据库..."$END
                                    yum -y -q install libaio nuMACtl-libs
                                    tar xf $MYSQL -C /usr/local/
                                    MYSQL_DIR=$(echo $MYSQL | sed -nr 's/^(.*[0-9]).*/\1/p')
                                    ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
                                    chown -R root.root /usr/local/mysql/
                                    id mysql &> /dev/null || useradd -s /sbin/nologin -r mysql
                                
                                    echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
                                    . /etc/profile.d/mysql.sh
                                    ln -s /usr/local/mysql/bin/* /usr/bin/
                                
                                    # Create MySQL configuration file
                                    cat > /etc/my.cnf <<-EOF
                                [mysqld]
                                server-id=$(hostname -I | cut -d. -f4)
                                log-bin
                                datadir=/data/mysql
                                socket=/data/mysql/mysql.sock
                                log-error=/data/mysql/mysql.log
                                pid-file=/data/mysql/mysql.pid
                                [client]
                                socket=/data/mysql/mysql.sock
                                EOF
                                
                                    [ -d /data/mysql ] || mkdir -p /data/mysql
                                    chown -R mysql:mysql /data/mysql
                                
                                    # Initialize MySQL Database
                                    /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql --datadir=/data/mysql
                                
                                    # Create systemd service file for MySQL
                                    cat > /etc/systemd/system/mysqld.service <<-EOF
                                [Unit]
                                Description=MySQL Server
                                After=network.target
                                Wants=network.target
                                
                                [Service]
                                User=mysql
                                Group=mysql
                                ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql --socket=/data/mysql/mysql.sock
                                ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
                                Restart=on-failure
                                LimitNOFILE=5000
                                
                                [Install]
                                WantedBy=multi-user.target
                                EOF
                                
                                    # Reload systemd manager configuration
                                    systemctl daemon-reload
                                    # Enable mysqld service to start on boot
                                    systemctl enable mysqld
                                    # Start mysqld service
                                    systemctl start mysqld
                                
                                    if [ $? -ne 0 ]; then
                                        $COLOR"数据库启动失败,退出!"$END
                                        exit
                                    fi
                                
                                    sleep 3
                                    /usr/local/mysql/bin/mysqladmin -uroot password "$MYSQL_ROOT_PASSWORD" &>/dev/null
                                
                                    $COLOR"数据库安装完成"$END
                                }
                                
                                check
                                install_mysql
                                
                                # 使用上面脚本安装 MySQL 9.0(前提:将安装包上传和脚本上传到同一目录下)
                                [root@Rocky9 src]# bash install_offline_mysql8.3_for_rocky9.sh
                                开始安装MySQL数据库...
                                
                                Upgraded:
                                  numactl-libs-2.0.16-3.el9.x86_64
                                
                                Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /etc/systemd/system/mysqld.service.
                                数据库安装完成
                                [root@Rocky9 src]#[root@Rocky9 src]# mysql -uroot -p123456
                                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 9
                                Server version: 9.0.0 MySQL Community Server - GPL
                                
                                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> status
                                --------------
                                mysql  Ver 9.0.0 for Linux on x86_64 (MySQL Community Server - GPL)
                                
                                Connection id:		9
                                Current database:
                                Current user:		root@localhost
                                SSL:			Not in use
                                Current pager:		stdout
                                Using outfile:		''
                                Using delimiter:	;
                                Server version:		9.0.0 MySQL Community Server - GPL
                                Protocol version:	10
                                Connection:		Localhost via Unix socket
                                Server characterset:	utf8mb4
                                Db     characterset:	utf8mb4
                                Client characterset:	utf8mb4
                                Conn.  characterset:	utf8mb4
                                UNIX socket:		/data/mysql/mysql.sock
                                Binary data as:		Hexadecimal
                                Uptime:			29 sec
                                
                                Threads: 2  Questions: 10  Slow queries: 0  Opens: 130  Flush tables: 3  Open tables: 46  Queries per second avg: 0.344
                                --------------
                                
                                mysql>
                                

                                1.2.1 新增用户

                                默认密码是:123456,可以在执行脚本前通过修改脚本中的变量来自定义数据库密码

                                MYSQL_ROOT_PASSWORD=‘123456’

                                # 修改本地用户密码
                                alter user root@'localhost' identified  by 'xxxx';
                                
                                # 刷新权限
                                flush privileges;
                                
                                # 查询当前主机和用户
                                 select Host,User from mysql.user;
                                 
                                # 新增远程登录用户
                                create user root@'10.0.0.%' identified by 'xxxx';
                                
                                # 给创建的用户赋予权限
                                grant all on *.* to root@'10.0.0.%' with grant option;
                                
                                flush privileges;
                                

                                1.2.2 向量及 JSON 体验

                                mysql&gt; create schema MyDb;
                                Query OK, 1 row affected (0.00 sec)
                                
                                mysql&gt; create table vector_json (id int primary key,json_value JSON,vector_value vector);
                                Query OK, 0 rows affected (0.02 sec)
                                
                                mysql&gt; INSERT INTO vector_json (id, json_value,vector_value)
                                    -&gt; VALUES
                                    -&gt; (1,
                                    -&gt; JSON_ARRAY(1.0, 2.0, 3.0,4.0),
                                    -&gt; to_vector('[1,2,3,4]')
                                    -&gt; );
                                Query OK, 1 row affected (0.01 sec)
                                
                                mysql&gt; select
                                    -&gt; id,
                                    -&gt; json_value,
                                    -&gt; VECTOR_DIM(vector_value)
                                    -&gt; from vector_json;
                                +----+----------------------+--------------------------+
                                | id | json_value           | VECTOR_DIM(vector_value) |
                                +----+----------------------+--------------------------+
                                |  1 | [1.0, 2.0, 3.0, 4.0] |                        4 |
                                +----+----------------------+--------------------------+
                                1 row in set (0.00 sec)
                                
                                mysql&gt;
                                
                                

                                1.2.3 完整的/etc/my.cnf

                                由于是二进制文件安装,数据库参数文件需要自己配置
                                
                                cat >> http://www.devze.com/etc/my.cnf << "EOF"
                                [mysqld]
                                server_id = 8103306
                                default-storage-engine= InnoDB
                                basedir=/mysql/app/mysql8.1.0
                                datadir=/mysql/data/mysql3306/data/
                                socket=/mysql/data/mysql3306/socket/mysql.sock
                                log-error=/mysql/data/mysql3306/log/mysqld.log
                                pid-file=/mysql/data/mysql3306/pid/mysqld.pid
                                port=3306
                                default-time_zone='+8:00'
                                default_authentication_plugin=mysql_native_password # 加此参数可远程登陆
                                transaction_isolation=READ-COMMITTED
                                max_connections=1500
                                back_log=500
                                wait_timeout=1800
                                max_user_connections=800
                                innodb_buffer_pool_size=1024M
                                innodb_log_file_size=512M
                                innodb_log_buffer_size=40M
                                slow_query_log=ON
                                long_query_time=5
                                # log settings #
                                slow_query_log = ON
                                slow_query_log_file = /mysql/data/mysql3306/slowlog/slow3306.log
                                log_error = /mysql/data/mysql3306/errlog/err3306.log
                                log_error_verbosity = 3
                                log_bin = /mysql/data/mysql3306/binlog/mysql_bin
                                log_bin_index = /mysql/data/mysql3306/binlog/mysql_binlog.index
                                general_log_file = /data/mysql/mysql3306/generallog/general.log
                                log_queries_not_using_indexes = 1
                                log_slow_admin_statements = 1
                                expire_logs_days = 90
                                binlog_expire_logs_seconds = 2592000      #30d
                                long_query_time = 2
                                min_examined_row_limit = 100
                                log_throttle_queries_not_using_indexes = 1000
                                innodb_flush_log_at_trx_commit=1
                                
                                EOF
                                
                                

                                1.3 通过 yum 来安装 RPM 包的方式

                                MySQL9.0的两种部署模式及各个版本发布的新功能

                                # 安装依赖
                                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
                                
                                # 添加用户、用户组
                                groupadd mysql
                                useradd -g mysql --no-create-home -s /sbin/nologin mysql
                                
                                # 上传安装包并解压
                                mkdir /data/mysql -pv
                                tar -xf mysql-9.0.0-1.el9.x86_64.rpm-bundle.tar -C /data/mysql/
                                cd /data/mysql/
                                # 修改所属主,所属组
                                [root@Rocky9 data]# chown -R mysql:mysql /data/mysql/
                                
                                # 安装下面四个即可
                                # 安装顺序:包之间相互依赖,所以必须注意安装顺序
                                ✓ 先装 common 
                                ✓ 再装 libs
                                ✓ 再装 client
                                ✓ 最后装 server
                                rpm -ivh mysql-community-common-9.0.0-1.el9.x86_64.rpm
                                rpm -ivh mysql-community-libs-9.0.0-1.el9.x86_64.rpm
                                rpm -ivh mysql-community-client-9.0.0-1.el9.x86_64.rpm
                                rpm -ivh mysql-community-server-9.0.0-1.el9.x86_64.rpm
                                

                                通过 yum 的方式来自动处理软件包的依赖关系

                                [root@Rocky9 mysql]# yum -y install mysql-community-*
                                Last metadata expiration check: 0:47:48 ago on Tue 02 Jul 2024 03:47:49 PM CST.
                                Dependencies resolved.
                                =================================================================================================================================================================================================================
                                 Package                                                                Architecture   www.devze.com                      Version                                            Repository                                  Size
                                ===============================================================================================================================================================http://www.devze.com==================================================
                                Installing:
                                 mysql-community-client                                                 x86_64                               9.0.0-1.el9                                        @commandline                               3.0 M
                                 mysql-community-client-debuginfo                                       x86_64                               9.0.0-1.el9                                        @commandline                                22 M
                                 mysql-community-client-plugins                                         x86_64                               9.0.0-1.el9                                        @commandline                               1.4 M
                                 mysql-community-client-plugins-debuginfo                               x86_64                               9.0.0-1.el9                                        @commandline                               2.7 M
                                 mysql-community-common                                                 x86_64                               9.0.0-1.el9                                        @commandline                               581 k
                                 mysql-community-debuginfo                                              x86_64                               9.0.0-1.el9                                        @commandline                               8.8 M
                                 mysql-community-debugsource                                            x86_64                               9.0.0-1.el9                                        @commandline                                17 M
                                 mysql-community-devel                                                  x86_64                               9.0.0-1.el9                                        @commandline                               7.3 M
                                 mysql-community-icu-data-files                                         x86_64                               9.0.0-1.el9                                        @commandline                               2.3 M
                                 mysql-community-libs                                                   x86_64                               9.0.0-1.el9                                        @commandline                               1.5 M
                                 mysql-community-libs-compat                                            x86_64                               9.0.0-1.el9                                        @commjsandline                               1.4 M
                                 mysql-community-libs-compat-debuginfo                                  x86_64                               9.0.0-1.el9                                        @commandline                               2.5 M
                                 mysql-community-libs-debuginfo                                         x86_64                               9.0.0-1.el9                                        @commandline                               2.6 M
                                 mysql-community-server                                                 x86_64                               9.0.0-1.el9                                        @commandline                                50 M
                                 mysql-community-server-debug                                           x86_64                               9.0.0-1.el9                                        @commandline                                24 M
                                 mysql-community-server-debug-debuginfo                                 x86_64                               9.0.0-1.el9                                        @commandline                               154 M
                                 mysql-community-server-debuginfo                                       x86_64                               9.0.0-1.el9                                        @commandline                               192 M
                                 mysql-community-test                                                   x86_64                               9.0.0-1.el9                                        @commandline                               336 M
                                 mysql-community-test-debuginfo                                         x86_64                               9.0.0-1.el9                                        @commandline                                23 M
                                Upgrading:
                                
                                [root@Rocky9 mysql]# rpm -qa | grep mysql
                                mysql-community-debugsource-9.0.0-1.el9.x86_64
                                mysql-community-phpdebuginfo-9.0.0-1.el9.x86_64
                                mysql-community-client-plugins-9.0.0-1.el9.x86_64
                                mysql-community-common-9.0.0-1.el9.x86_64
                                mysql-community-libs-9.0.0-1.el9.x86_64
                                mysql-community-client-9.0.0-1.el9.x86_64
                                mysql-community-icu-data-files-9.0.0-1.el9.x86_64
                                mysql-community-server-9.0.0-1.el9.x86_64
                                mysql-community-server-debug-9.0.0-1.el9.x86_64
                                mysql-community-test-9.0.0-1.el9.x86_64
                                mysql-community-devel-9.0.0-1.el9.x86_64
                                mysql-community-libs-compat-9.0.0-1.el9.x86_64
                                mysql-community-client-debuginfo-9.0.0-1.el9.x86_64
                                mysql-community-client-plugins-debuginfo-9.0.0-1.el9.x86_64
                                mysql-community-libs-compat-debuginfo-9.0.0-1.el9.x86_64
                                mysql-community-libs-debuginfo-9.0.0-1.el9.x86_64
                                mysql-community-server-debug-debuginfo-9.0.0-1.el9.x86_64
                                mysql-community-server-debuginfo-9.0.0-1.el9.x86_64
                                mysql-community-test-debuginfo-9.0.0-1.el9.x86_64
                                [root@Rocky9 mysql]#
                                
                                # 启动mysql
                                [root@Rocky9 mysql]# systemctl enable --now mysqld
                                [root@Rocky9 mysql]#
                                
                                # 获取临时密码
                                [root@Rocky9 mysql]# cat /var/log/mysqld.log  | grep temporary
                                2024-07-02T09:05:09.190201Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: J3E7ZjT8uc=/
                                [root@Rocky9 mysql]# mysql -uroot -p'J3E7ZjT8uc=/'
                                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 9
                                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>alter user root@'localhost' identified  by 'root';
                                ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
                                
                                # 修改一下密码策略,也是不允许的,只能先改一下密码然后再修改策略
                                mysql> SET GLOBAL validate_password.policy = LOW;
                                ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
                                
                                mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456';
                                Query OK, 0 rows affected (0.01 sec)
                                
                                mysql> SET GLOBAL validate_password.policy = LOW;
                                Query OK, 0 rows affected (0.00 sec)
                                
                                mysql> SET GLOBAL validate_password.length = 6;
                                Query OK, 0 rows affected (0.00 sec)
                                
                                mysql> show variables like 'validate_password%';
                                +-------------------------------------------------+-------+
                                | Variable_name                                   | Value |
                                +-------------------------------------------------+-------+
                                | validate_password.changed_characters_percentage | 0     |
                                | validate_password.check_user_name               | ON    |
                                | validate_password.dictionary_file               |       |
                                | validate_password.length                        | 6     |
                                | validate_password.mixed_case_count              | 1     |
                                | validate_password.number_count                  | 1     |
                                | validate_password.policy                        | LOW   |
                                | validate_password.special_char_count            | 1     |
                                +-------------------------------------------------+-------+
                                8 rows in set (0.00 sec)
                                

                                2.MySQL 8.4.0 LTS 发布

                                从 MySQL 8.4.0 开始,mysql_native_password 认证插件默认不再启用。

                                若要启用,需要在MySQL启动的时候,添加–mysql-native-password=ON 参数;或在配置文件中设置 mysql_native_password=ON。

                                MySQL 8.4,还调整了与 InnoDB 存储引擎相关的多个服务器系统变量的默认值

                                其余的一些变更,大家详细的阅读官网即可

                                安装方式参考上面9.0.

                                3.MySQL 8.3.0 发布

                                3.1 标签化 GTID

                                此增强功能使为特定事务组的GTID分配唯一名称成为可能。

                                例如,只需比较包含数据操作的事务的GTID,就可以很容易地将其与管理操作产生的事务区分开来。

                                管理员现在可以将SET@gtid_next=AUTOMATIC:<TAG>或SET@gtid_next=<UUID>:<TAG>:NUMBER的

                                使用限制为所需的MySQL用户或角色集,以便只有与给定数据或操作域相关的用户才能提交具有指定标记的新事务。

                                该版本新增了TRANSACTION_GTID_TAG权限,它允许设置 GTID 值,让管理员能够控制权限分配,优化事务管理。

                                3.2 JSON EXPLAIN 格式

                                添加了explain_json_format_version系统变量,以确定explain format=json语句使用的json输出格式的版本。

                                它允许管理员在EXPLAIN FORMAT=JSON命令中,在两种不同的 JSON 输出格式之间进行选择。

                                这一特性保证了软件与 MySQL 优化器未来版本的兼容性,增强了长期使用的便利性

                                3.3 身份验证说明

                                Microsoft Windows:Windows平台现在支持执行基于sasl的ldap身份验证的服务器端authentication_ldap_sasl插件。

                                这意味着Windows客户端程序现在可以使用GSSAPI和Kerberos,使用authentication_ldap_sasl_client插件进行身份验证。

                                3.4 可插拔身份验证

                                从本版本开始,调试PAM身份验证插件时使用的 AUTHENTICATION_PAM_LOG 环境变量的行为更改如下:

                                将AUTHENTICATION_PAM_LOG设置为任意值(除非下一项中另有说明),其诊断消息中不再包含密码。

                                要在诊断消息中包括密码,请设置AUTHENTICATION_PAM_LOG=PAM_LOG_WITH_SECRET_INFO

                                3.5 线程池新增信息

                                在MySQL性能架构中添加了额外的线程池连接信息,如下所示:

                                添加了一个tp_connections表,其中包含有关每个线程池连接的信息。

                                将以下列添加到tp_thread_state表中:

                                TIME_OF_ATTACH、
                                MARKED_STALLED、
                                state、EVENT_COUNT、
                                ACCUMULATED_EVENT_TIME、
                                EXEC_COUNT和ACCUMULATED_EXEC_TIME

                                将以下列添加到tp_thread_group_state表中:

                                EFECTIVE_MAX_TRANSACTION_LIMIT、
                                NUM_QUERY_THREADS、
                                TIME_OF_LAST_thread_CREATION、
                                NUM_CONNECT_HANDLER_THREADD_IN_SLEEP、
                                THREADS_BOUND_to_TRANSACTION、
                                QUERY_THRADS_COUNT和TIME_OF_EARLIEST_CONN_EXPIRE

                                3.6 删减功能

                                一些关键的 C API 函数,比如mysql_kill()、mysql_list_fields()等,已被移除,建议采用其他方式来执行类似操作。

                                用于清理主机名内部缓存的FLUSH HOSTS命令(之前已经被弃用),也正式从系统中移除了。管理员现在需要通过其他方法来清理主机缓存。

                                还有一些复制和服务器的相关选项,例如–slave-rows-search-algorithms和–log_bin_use_v1_events也已被移除,引导管理员采用更有效、更现代的操作方法。

                                4.MySQL 8.1.0 发布

                                4.1 密码参数

                                增加了一个新的系统参数,用于限制用户改密码时的最少替换字符数。

                                validate_password.changed_characters_percentage,该值是百分比。

                                4.2 错误日志加强

                                随着 MySQL 服务器、插件和组件的启动和关闭消息的增加,关闭过程的日志记录得到了增强。这些消息现在也被记录为关闭连接。

                                这些附加功能应该有助于故障排除和调试问题,特别是在服务器需要很长时间才能关闭的情况下。

                                此版本引入了一系列新的消息,这些消息会在MySQL错误日志中记录,包括以下内容:

                                • MySQLserver的启动和关闭日志消息,包括使用–initialize参数启动时的日志。
                                • 插件关闭阶段的启动和结束日志消息。
                                • 组件关闭阶段的启动和结束日志消息。
                                • 连接关闭阶段的开始和结束日志消息。

                                在强制断开连接后仍然活动的线程数量和ID的日志消息,这些线程可能会导致等待情况。

                                mysql> show variables like ‘log_error';
                                -------------------------------------------------------+
                                | Variable_name | Value |
                                -------------------------------------------------------+
                                | log_error | /mysql/data/mysql3306/errlog/err3306.log |
                                -------------------------------------------------------+

                                4.3 二进制日志

                                libmysqlclient.so 共享库中添加了几个函数,使开发人员能够访问 MySQL server的二进制日志:

                                mysql_binlog_open()、mysql_binlog_fetch() 和 mysql_binlog_close()。

                                4.4 审计日志

                                审计日志可以指定库database存储JSON过滤表。

                                新增Audit_log_direct_writes系统变量,用于计算直接写入审计文件的次数。

                                MySQL企业审计使用临时缓冲区保存写入日志文件的查询事件数据。

                                然而,由于server可能无法为长查询分配额外内存,审计插件已经进行了优化,在JSON格式记录日志时,不再使用临时缓冲区。

                                MySQL企业审计现在支持使用调度程序组件来配置和执行定期任务,以刷新内存缓存。

                                mysql -u root -D database_name -p < audit_log_filter_linux_install.sql

                                4.5 组复制增强

                                添加了一些特定于组复制插件的状态变量,这些变量可以改进对网络不稳定的诊断和故障排除,

                                为每个组成员 (group member) 提供有关网络使用情况、控制消息和数据消息的统计信息。

                                作为这项工作的一部分,Performance Schema 的 replication_group_communication_information 表中添加了一个新列 MEMBER_FAILURE_SUSPICIONS_COUNT 。该列的内容被格式化为一个 JSON 数组,其键是组成员 ID,其值是该组成员被认为是可疑的次数。

                                4.6 废弃特性

                                以下功能在 MySQL 8.1 中已弃用,并且可能会在未来的系列中删除。如果显示替代方案,则应更新应用程序以使用它们。

                                1.mysqlpump

                                由于 MySQL 提供了具有相同或额外功能的 mysqldump 和 MySQL Shell 等其他方法来执行数据库转储和备份,

                                mysqlpump 已经变得多余,现在已弃用。现在调用这个程序会产生一个警告。您应该记住,mysqlpump 可能会在 MySQL 的未来版本中被删除。

                                2.binlog_format

                                binlog_format 服务器系统变量现已弃用,并且可能会在 MySQL 的未来版本中删除。 与此变量关联的功能(更改二进制日志记录格式)也已被弃用。

                                此更改的含义是,当删除 binlog_format 时,MySQL 服务器将仅支持基于行的二进制日志记录(MySQL 8.0 中的默认设置)。 因此,新安装应仅使用基于行 (Row) 的二进制日志记录,而使用基于语句或混合日志记录格式的现有安装应迁移到基于行的格式。

                                系统变量 log_bin_trust_function_creators 和 log_statements_unsafe_for_binlog 仅在基于语句的日志记录上下文中有用,现在也已弃用,因此也将在 MySQL 的未来版本中删除。

                                现在设置或选择刚才提到的任何变量的值都会引发警告。 (WL*#13966,WL#15669)*

                                3.mysql_native_password

                                mysql_native_password 身份验证插件现已弃用,并可能在 MySQL 的未来版本中删除。

                                如果帐户尝试使用 mysql_native_password 作为身份验证方法进行身份验证,

                                他方法来执行数据库转储和备份,

                                mysqlpump 已经变得多余,现在已弃用。现在调用这个程序会产生一个警告。您应该记住,mysqlpump 可能会在 MySQL 的未来版本中被删除。

                                4.binlog_format

                                binlog_format 服务器系统变量现已弃用,并且可能会在 MySQL 的未来版本中删除。 与此变量关联的功能(更改二进制日志记录格式)也已被弃用。

                                此更改的含义是,当删除 binlog_format 时,MySQL 服务器将仅支持基于行的二进制日志记录(MySQL 8.0 中的默认设置)。 因此,新安装应仅使用基于行 (Row) 的二进制日志记录,而使用基于语句或混合日志记录格式的现有安装应迁移到基于行的格式。

                                系统变量 log_bin_trust_function_creators 和 log_statements_unsafe_for_binlog 仅在基于语句的日志记录上下文中有用,现在也已弃用,因此也将在 MySQL 的未来版本中删除。

                                现在设置或选择刚才提到的任何变量的值都会引发警告。 (WL*#13966,WL#15669)*

                                5.mysql_native_password

                                mysql_native_password 身份验证插件现已弃用,并可能在 MySQL 的未来版本中删除。

                                如果帐户尝试使用 mysql_native_password 作为身份验证方法进行身份验证,

                                CREATE USER、ALTER USER 和 SET PASSWORD 操作现在会在服务器错误日志中插入弃用警告。

                                到此这篇关于MySQL9.0的两种部署模式及各个版本发布的新功能的文章就介绍到这了,更多相关MySQL9.0两种部署内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

                                0

                                精彩评论

                                暂无评论...
                                验证码 换一张
                                取 消

                                关注公众号