专栏持续更新中:MySQL详解

前言

2023年7月18日晚,MySQL官方网站正式发布了MySQL8.1.0与8.0.34版别.

一、畅谈新版别

Oracle 每季度发布一次 MySQL 更新,所以自己也一直留意的官网的动态,2023年7月18日晚,MySQL官方网站正式发布了MySQL8.1.0与8.0.34版别,8.1的应该来说是8.0版别的bug修复,这是 MySQL 变更发版模型后的第一个立异版别 (Innovation Release)。MySQL 8.0.34+ 将成为仅过错修复版别(红色)。MySQL大约每2年发布一个新的长期支撑版别(如下图蓝色),一个例外是8.x LTS版别,它将在 8.0 的 EOL 之前发生,按照此规矩来说,下一个(立异)版别将添加主版别号,假如 MySQL 8.4.0 是 8.x LTS 版别,那么 MySQL 9.0 将是下一个立异版别。

官方下载文档:dev.mysql.com/downloads/m…
官方攻略:dev.mysql.com/doc/refman/…

MySQL8.1.0版别正式发布带来哪些新特性?

二、8.1.0版别布置

官方的下载渠道已开放,dev.mysql.com/downloads/m…
RPM包下载挑选Linux – Generic,适配对应的操作体系GCC版别。

MySQL8.1.0版别正式发布带来哪些新特性?

2.1、环境准备

  1. 操作体系
[root@jeames ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)
  1. 封闭防火墙#
    检查防火墙是状况
[root@jeames ~]# systemctl status firewalld

封闭防火墙

[root@jeames ~]# systemctl stop firewalld

取消开机自发动

[root@jeames ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  1. selinux封闭
    修正参数文件/etc/sysconfig/selinux中SELINUX的值为disabled

[root@jeames ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config

修正完成后需求重启服务器才生效

2.2、装备yum装置依靠

  1. 创立挂载途径
mkdir -p /mnt/cdrom
  1. 挂载体系镜像光盘到指定目录
#因为光盘的格局通常是iso9660,意思是/dev/sr0挂载在/mnt/cdrom目录上
mount -t iso9660 /dev/sr0 /mnt/cdrom
mount: /mnt/cdrom: WARNING: device write-protected, mounted read-only.
  1. 修正yum源装备文件
    ##修正rhel8-local.repo文件,参加以下内容

[root@jeames ~]# cd /etc/yum.repos.d
[root@jeames yum.repos.d]# rm -rf *
[root@jeames yum.repos.d]# vi rhel8-local.repo
[localREPO]
name=localhost8
baseurl=file:///mnt/cdrom/BaseOS
enable=1
gpgcheck=0
[localREPO_APP]
name=localhost8_app
baseurl=file:///mnt/cdrom/AppStream
enable=1
gpgcheck=0
  1. 装备好后重建本地缓存
yum clean all
yum makecache 
yum repolist
  1. 装置MySQL 8.1版别二进制所需的依靠包
yum -y install libncurses*
yum -y install libaio
yum -y install perl perl-devel
yum -y install autoconf
yum -y install numactl.x86_64
##经过rpm -qa能够查询是否将依靠包装置成功
[root@jeames yum.repos.d]# rpm -qa libaio perl perl-devel autoconf  numactl.x86_64 libncurses

2.3、用户及目录创立

注:能够布置多个实例,经过端口区别root 用户操作:

mkdir -p /mysql/data/mysql3306
mkdir -p /mysql/app/
mkdir -p /mysql/conf/
mkdir -p /mysql/data/mysql3306/pid/
mkdir -p /mysql/data/mysql3306/socket/
mkdir -p /mysql/data/mysql3306/log/
mkdir -p /mysql/data/mysql3306/binlog/
mkdir -p /mysql/data/mysql3306/errlog
mkdir -p /mysql/data/mysql3306/relaylog/
mkdir -p /mysql/data/mysql3306/slowlog/
mkdir -p /mysql/data/mysql3306/tmp/

2.4、创立用户及组

[root@jeames ~]# groupadd mysql
[root@jeames ~]# useradd -g mysql mysql
[root@jeames ~]# chown -R mysql:mysql /mysql
[root@jeames ~]# passwd mysql
Changing password for user mysql.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@jeames ~]# cat /etc/group | grep mysql
mysql❌1001:
[root@jeames ~]# cat /etc/passwd | grep mysql
mysql❌1001:1001::/home/mysql:/bin/bash

MySQL8.1.0版别正式发布带来哪些新特性?

2.5、解压缩包

[root@jeames ~]# cd /opt
[root@jeames opt]# cp mysql-8.1.0-linux-glibc2.28-x86_64.tar.xz /mysql/app
[root@jeames opt]# chown -R mysql:mysql /mysql

mysql用户操作

[root@jeames ~]# su - mysql
md5 值验证,保证下载到的软件包无破损无木马
[mysql@jeames ~]$ cd /mysql/app
[mysql@jeames app]$ ll
total 457200
-rw-r--r-- 1 mysql mysql 468170248 Jul 19 15:29 mysql-8.1.0-linux-glibc2.28-x86_64.tar.xz
[mysql@jeames app]$ md5sum mysql-8.1.0-linux-glibc2.28-x86_64.tar.xz
5285185fad2b4352c878380a741e29f0  mysql-8.1.0-linux-glibc2.28-x86_64.tar.xz

解压软件包并重命名

[mysql@jeames app]$ tar xvf mysql-8.1.0-linux-glibc2.28-x86_64.tar.xz
[mysql@jeames app]$ mv mysql-8.1.0-linux-glibc2.28-x86_64 mysql8.1.0
[mysql@jeames app]$ ll
total 457200
drwxrwxr-x 9 mysql mysql       129 Jul 19 15:31 mysql8.1.0
-rw-r--r-- 1 mysql mysql 468170248 Jul 19 15:29 mysql-8.1.0-linux-glibc2.28-x86_64.tar.xz

2.6、环境变量装备

##mysql用户下操作
cat >> /home/mysql/.bash_profile << “EOF”
MYSQL_HOME=/mysql/app/mysql8.1.0
PATH=P A T H : PATH:PATH:HOME/.local/bin:H O M E / b i n : HOME/bin:HOME/bin:MYSQL_HOME/bin
EOF

环境变量生效

[mysql@jeames app]$ source ~/.bash_profile
[mysql@jeames app]$ which mysql
/mysql/app/mysql8.1.0/bin/mysql

2.7、创立参数文件

由所以二进制文件装置,数据库参数文件需求自己装备

cat >> /mysql/conf/my3306.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

2.8、数据库初始化

mysql用户操作:

mysqld --defaults-file=/mysql/conf/my3306.cnf --initialize --user=mysql --basedir=/mysql/app/mysql8.1.0 --datadir=/mysql/data/mysql3306/data/

留意:以上同一行履行

2.9、发动Mysql

[mysql@jeames app]$ mysqld_safe --defaults-file=/mysql/conf/my3306.cnf --user=mysql &

2.10、登陆MySQL 8.1

第一次登录 MySQL 时,需求到过错日志下找初始化暗码,运用 socket 加暗码登录进去后,无法查询任何东西,提示先要修正 root 暗码.

[mysql@jeames ~]$ cat /mysql/data/mysql3306/errlog/err3306.log | grep password
[mysql@jeames ~]$ mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
[mysql@jeames ~]$ mysql -uroot -p  -P 3306 -S /mysql/data/mysql3306/socket/mysql.sock
mysql> status
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  • 修正暗码
mysql> alter user root@'localhost' identified by 'root';
mysql> status
--------------
mysql  Ver 8.1.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:         8.1.0
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /mysql/data/mysql3306/socket/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 3 min 46 sec
Threads: 2  Questions: 8  Slow queries: 0  Opens: 398  Flush tables: 3  Open tables: 36  Queries per second avg: 0.035
  • 远程登陆设置
mysql> create user root@'%' identified with mysql_native_password by 'root';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on *.* to root@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,plugin from mysql.user;  
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
5 rows in set (0.01 sec)

三、新特性

3.1、暗码参数

添加了一个新的体系参数,用于约束用户改暗码时的最少替换字符数。

validate_password.changed_characters_percentage,该值是百分比。

MySQL8.1.0版别正式发布带来哪些新特性?

3.2、过错日志加强

跟着 MySQL 服务器、插件和组件的发动和封闭音讯的添加,封闭进程的日志记载得到了增强。这些音讯现在也被记载为封闭衔接。

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

此版别引入了一系列新的音讯,这些音讯会在MySQL过错日志中记载,包含以下内容:
MySQLserver的发动和封闭日志音讯,包含运用–initialize参数发动时的日志。
插件封闭阶段的发动和完毕日志音讯。
组件封闭阶段的发动和完毕日志音讯。
衔接封闭阶段的开始和完毕日志音讯。
在强制断开衔接后依然活动的线程数量和ID的日志音讯,这些线程或许会导致等候情况。

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

3.3、二进制日志

libmysqlclient.so 共享库中添加了几个函数,使开发人员能够拜访 MySQL server的二进制日志:
mysql_binlog_open()、mysql_binlog_fetch() 和 mysql_binlog_close()。

3.4、审计日志

审计日志能够指定库database存储JSON过滤表。
新增Audit_log_direct_writes体系变量,用于计算直接写入审计文件的次数。
MySQL企业审计运用暂时缓冲区保存写入日志文件的查询事情数据。
但是,因为server或许无法为长查询分配额定内存,审计插件现已进行了优化,在JSON格局记载日志时,不再运用暂时缓冲区。
MySQL企业审计现在支撑运用调度程序组件来装备和履行定期任务,以刷新内存缓存。
mysql -u root -D database_name -p < audit_log_filter_linux_install.sql

3.5、组复制增强

添加了一些特定于组复制插件的状况变量,这些变量能够改进对网络不稳定的诊断和故障扫除, 为每个组成员 (group member) 供给有关网络运用情况、操控音讯和数据音讯的统计信息。 作为这项作业的一部分,Performance Schema 的 replication_group_communication_information 表中添加了一个新列 MEMBER_FAILURE_SUSPICIONS_COUNT 。该列的内容被格局化为一个 JSON 数组,其键是组成员 ID,其值是该组成员被认为是可疑的次数。

3.6、抛弃特性

以下功能在 MySQL 8.1 中已弃用,并且或许会在未来的系列中删去。假如显示代替计划,则应更新应用程序以运用它们。

  • mysqlpump
    因为 MySQL 供给了具有相同或额定功能的 mysqldump 和 MySQL Shell 等其他办法来履行数据库转储和备份,
    mysqlpump 现已变得多余,现在已弃用。现在调用这个程序会发生一个正告。您应该记住,mysqlpump 或许会在 MySQL 的未来版别中被删去。

  • binlog_format
    binlog_format 服务器体系变量现已弃用,并且或许会在 MySQL 的未来版别中删去。 与此变量关联的功能(更改二进制日志记载格局)也已被弃用。
    此更改的意义是,当删去 binlog_format 时,MySQL 服务器将仅支撑根据行的二进制日志记载(MySQL 8.0 中的默认设置)。 因此,新装置应仅运用根据行 (Row) 的二进制日志记载,而运用根据句子或混合日志记载格局的现有装置应迁移到根据行的格局。
    此更改的意义是,当删去 binlog_format 时,MySQL 服务器将仅支撑根据行的二进制日志记载(MySQL 8.0 中的默认设置)。 因此,新装置应仅运用根据行 (Row) 的二进制日志记载,而运用根据句子或混合日志记载格局的现有装置应迁移到根据行的格局。
    体系变量 log_bin_trust_function_creators 和 log_statements_unsafe_for_binlog 仅在根据句子的日志记载上下文中有用,现在也已弃用,因此也将在 MySQL 的未来版别中删去。 现在设置或挑选刚才说到的任何变量的值都会引发正告。 (WL#13966,WL#15669)

  • mysql_native_password
    mysql_native_password 身份验证插件现已弃用,并或许在 MySQL 的未来版别中删去。 假如帐户尝试运用 mysql_native_password 作为身份验证办法进行身份验证, CREATE USER、ALTER USER 和 SET PASSWORD 操作现在会在服务器过错日志中插入弃用正告。