一、产品介绍
1.1、MySql 8。4 LTS 产品介绍
MySQL 8.4.3 LTS 是 MySQL 数据库的一个长期支持版本,发布于2024年。这个版本是 MySQL 8.0 系列的一部分,它带来了一些新的功能和改进,同时也包含了之前版本的错误修复和安全补丁。
1.2、主要特性
- 密码认证插件:默认情况下,mysqlnativepassword 插件被禁用,如果需要启用该插件,需要在启动时指定 --mysql-native-password=ON 或者在 my.cnf 文件里面配置 mysqlnativepassword=ON。
- InnoDB 相关默认参数变化:
- innodbiocapacity:默认值改成了10000,之前是200。 > - - innodbbufferpoolinstances:调整取值的算法,取 min(innodbbufferpoolsize / innodbbufferpoolchunksize 1/2, 逻辑 CPU 1/4)。
- innodbadaptivehash_index:默认改为 OFF,之前是 ON。
- 复制相关:主从复制参数 SOURCERETRYCOUNT 默认值变更为 10,也即主从复制关系异常时,从库尝试连接主库10次。每次间隔的时间由 SOURCECONNECTRETRY 决定,默认 60s。
- master/slave 关键字变化:前几年为了政治正确官方决定去掉关键字 master,slave,现在终于在 8.4 版本里面去掉了,使用者需要做如下替换:
- master -source
- slave -replica。
- SQLAFTERGTIDS 兼容 MTA:以前,当复制启用 并行复制 MTA功能并且用户尝试 SQLAFTERGTIDS,“START REPLICA” 会触发警告 ERMTSFEATUREISNOTSUPPORTED,并且复制会被切换到单线程模式。8.4 版本,“START REPLICA” 语句的 “SQLAFTER_GTIDS” 选项兼容 MTA。
- 直方图自动更新功能:MySQL 8.4.0 支持自动更新直方图。当为给定的直方图启用此功能时,你可以通过为 ANALYZE TABLE 语句包含 AUTO UPDATE 选项来启用此功能。每当对指定的表运行 ANALYZE TABLE 时,它会被更新。
二、环境初始化
2.1、环境规划
| 项目 | 名称 |
|---|---|
| 主机名称 | Node1 |
| 主机地址 | 192.168.4.71 |
| 操作系统 | CentOS Linux 7.9 |
| MySql版本 | 8.4 |
2.2、统一主机名称
vi /etc/hostname
或 hostnamectl set-hostname Node1
2.3、关闭SELINUX
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
2.4、设置安全策略
查看开放的端口:
firewall-cmd --list-ports
开启防火墙端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
重新加载一遍才会生效:
firewall-cmd --reload
2.5、安装软件依赖
sudo yum install -y vim curl tree net-tools binutils wget libaio ncurses numactl
2.6、安装 GLIBC 依赖
执行以下命令查看系统是否支持 GLIBC 2.17,如果没有任何输出内容,则说明不支持,此时则需要手动安装 GLIBC 2.17,具体的安装步骤请自行查阅网络资料。
查看是否支持 GLIBC 2.17语法如下:
sudo strings /lib64/libc.so.6 | grep GLIBC_2.17
[root@Node1 ~]# sudo strings /lib64/libc.so.6 | grep GLIBC_2.17
GLIBC_2.17
GLIBC_2.17
[root@Node1 ~]#
2.7、编辑hosts
cat>>/etc/hosts<<EOF
192.168.4.71 Node1
EOF
2.8、创建用户
groupadd mysql -g 4000
useradd mysql -g 4000 -u 4000
echo "mysql"|passwd --stdin mysql
2.9、用户limits设置
cat>>/etc/security/limits.conf<<EOF
mysql soft nofile 1048576
mysql hard nofile 1048576
mysql soft nproc 131072
mysql hard nproc 131072
mysql soft stack 10240
mysql hard stack 32768
mysql soft core 6291456
mysql hard core 6291456
EOF
2.10、调整内核
cat>>/etc/sysctl.conf<<EOF
fs.file-max = 76724200
kernel.sem = 10000 10240000 10000 1024
kernel.shmmni = 4096
kernel.shmall = 253702
kernel.shmmax = 1039163392
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 40960000
vm.dirty_ratio=20
vm.dirty_background_ratio=3
vm.dirty_writeback_centisecs=100
vm.dirty_expire_centisecs=500
vm.swappiness=10
vm.min_free_kbytes=524288
vm.swappiness=0
vm.overcommit_memory=2
vm.overcommit_ratio=75
net.ipv4.ip_local_port_range = 10000 65535
EOF
sysctl -p
2.11、目录规划
| 目录编号 | 目录名称 | 备注 |
|---|---|---|
| 1 | /mysql | mysql根目录 |
| 2 | /mysql/app | 软件安装目录 |
| 3 | /mysql/data | 数据目录 |
| 4 | /mysql/log | log 目录 |
| 5 | /mysql/etc | my.cnf文件存放目录 |
| 6 | /mysql/sock | socket文件存放目录 |
| 7 | /mysql/pid | pid文件存放目录 |
| 8 | /mysql/archive | 归档目录 |
| 9 | /mysql/backup | 备份目录 |
| 10 | /install | 安装包上传目录 |
- 执行脚本:
mkdir /install
mkdir -p /mysql/{app,data,log,backup,pid,etc,sock}
三、部署MySql8.4
3.1、官网下载安装包或在线下载安装包
说明:
1、官网下载地址:
- MySql 8.4 LTS下载地址
2、在线获取安装包地址如下图



在线下载代码:
[root@Node1 install]$ wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz
--2024-12-06 11:54:43-- https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz
Resolving cdn.mysql.com (cdn.mysql.com)... 23.37.58.58, 2600:140e:6:3a8::1d68, 2600:140e:6:391::1d68
Connecting to cdn.mysql.com (cdn.mysql.com)|23.37.58.58|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 900769636 (859M) [text/plain]
Saving to: ‘mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz’
100%[===============================================================>] 900,769,636 7.77MB/s in 1m 45s
2024-12-06 11:56:30 (8.15 MB/s) - ‘mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz’ saved [900769636/900769636]
[root@Node1 install]$
3.2、解压安装包,并将解压文件拷贝到安装目录
[root@Node1 install]$ tar -xvf mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz && mv /install/mysql-8.4.3-linux-glibc2.17-x86_64/* /mysql/app/
3.3、创建错误日志文件
touch /mysql/log/error.log
3.4、 编辑配置文件
vi /etc/profile
# 在配置文件的末尾添加以下内容后保存退出
export PATH=$PATH:/mysql/app/bin
# 使配置文件生效
source /etc/profile
3.5、创建配置文件
touch /mysql/etc/my.cnf
# 授权给配置文件
chown mysql:mysql /mysql/etc/my.cnf
编辑配置文件 /mysql/etc/my.cnf
cat >> /mysql/etc/my.cnf << "EOF"
[client]
# 设置客户端的默认字符集
default-character-set=utf8mb4
# 客户端连接时使用的套接字文件路径
socket = /mysql/sock/mysql.sock
[mysql]
# 设置命令行客户端的默认字符集
default-character-set=utf8mb4
[mysqld]
# MySQL 服务的运行用户
user = mysql
# MySQL 的监听端口
port = 3306
# 允许访问数据库的 IP 地址
bind-address=0.0.0.0
# MySQL 的安装目录
basedir = /mysql/app
# MySQL 的数据目录
datadir = /mysql/data
# MySQL 服务器端的套接字文件路径
socket = /mysql/sock/mysql.sock
# MySQL 的 PID 文件路径
pid_file = /mysql/pid/mysql.pid
# MySQL 的错误日志文件路径
log_error = /mysql/log/error.log
# 允许的最大连接数
max_connections = 151
# 设置每个客户端在连接时默认使用的字符集,如何客户端在连接时明确指定了字符集,则客户端指定的字符集具有较高优先级
init_connect = 'SET NAMES utf8mb4'
# 设置服务端的默认字符集
character-set-server = utf8mb4
# 设置服务端的默认排序规则
collation-server=utf8mb4_unicode_ci
# 创建新表时使用的默认存储引擎
default-storage-engine = INNODB
# MySQL8 默认使用 caching_sha2_password 插件认证,以前默认是 mysql_native_password(已被弃用)
mysql_native_password = ON
# MySQL 使用的 SQL 模式
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
EOF
3.6、修改安装目录属主为mysql
chown -R mysql:mysql /mysql/*
3.7、初始化MySQL
[root@Node1 ~]# /mysql/app/bin/mysqld --defaults-file=/mysql/etc/my.cnf --user=mysql --initialize --basedir=/mysql/app --datadir=/mysql/data --log-error=/mysql/log/error.log
补充说明:
- 1、 初始化 MySQL,未指定的初始参数默认会从配置文件 /etc/my.conf 获取,成功初始化后会在 MySQL 的数据目录下创建对应的数据文件。
- 2、 初始化参数说明:
- –defaults-file指定MySQL使用的my.cnf文件;
- –user:指定使用哪个 Linux 用户;
- –basedir:指定 MySQL 的安装目录;
- –datadir:指定 MySQL 的数据目录;
- –log-error:指定 MySQL 的错误日志文件。
3.8、查看MySQL密码
方法1:
[root@Node1 ~]# sudo grep 'root@localhost:' /mysql/log/error.log | cut -d':' -f2-
57:48.919289Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 4yfgyiUGE<zG
方法2:
[root@Node1 ~]# cat /mysql/log/error.log
2024-12-11T03:57:44.064371Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2024-12-11T03:57:44.066577Z 0 [System] [MY-013169] [Server] /mysql/app/bin/mysqld (mysqld 8.4.3) initializing of server in progress as process 2043
2024-12-11T03:57:44.088474Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-12-11T03:57:45.149558Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-12-11T03:57:48.919289Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 4yfgyiUGE<zG
2024-12-11T03:57:51.075289Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
3.9、配置环境变量
cat >> /home/mysql/.bashrc << "EOF"
MYSQL_HOME=/mysql/app
PATH=$PATH:$HOME/bin:$HOME/bin:$MYSQL_HOME/bin
EOF
source ~/.bash_profile
3.10、使用root账户创建运行时文件pid、创建套接字sock文件
[root@Node1 ~]# touch /mysql/pid/mysql.pid
[root@Node1 ~]# touch /mysql/sock/mysql.sock
[root@Node1 ~]# chown mysql:mysql -R /mysql/pid /mysql/sock
3.11、创建sock超链接
[root@Node1 ~]# ln -s /mysql/sock/mysql.sock /tmp/mysql.sock
[root@Node1 ~]# ls -l /tmp/mysql.sock
lrwxrwxrwx. 1 root root 22 Dec 11 11:58 /tmp/mysql.sock -> /mysql/sock/mysql.sock
3.12、注册 MySQL 服务
# 创建mysqld.service文件
touch /lib/systemd/system/mysqld.service
# 编辑配置文件
vi /lib/systemd/system/mysqld.service
# 在配置文件中添加以下内容
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=simple
ExecStart=/mysql/app/bin/mysqld --defaults-file=/mysql/etc/my.cnf
User=mysql
Group=mysql
TimeoutSec=300
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3.13、注册 MySQL 服务
# 使用配置文件生效
sudo systemctl daemon-reload
管理 MySQL 服务
# 开机自启动服务
sudo systemctl enable mysqld
# 启动服务
sudo systemctl start mysqld
# 关闭服务
sudo systemctl stop mysqld
# 重启服务
sudo systemctl restart mysqld
# 查看服务状态
sudo systemctl status mysqld
[root@Node1 ~]# touch /lib/systemd/system/mysqld.service
[root@Node1 ~]# vi /lib/systemd/system/mysqld.service
[root@Node1 ~]# systemctl daemon-reload
[root@Node1 ~]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@Node1 ~]# systemctl start mysqld
[root@Node1 ~]# systemctl enable mysqld
[root@Node1 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-12-11 12:00:57 CST; 14s ago
Main PID: 2183 (mysqld)
CGroup: /system.slice/mysqld.service
└─2183 /mysql/app/bin/mysqld --defaults-file=/mysql/etc/my.cnf
Dec 11 12:00:57 Node1 systemd[1]: Started MySQL Server.
[root@Node1 ~]#
3.14、切换mysql用户,测试登录mysql
[root@Node1 ~]# su mysql
[mysql@Node1 root]$ cd
[mysql@Node1 ~]$ mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.3
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>
四、注意事项
4.1、在初始化MySql前,需把安装目录的属主改为MySql;
4.2、使用root账户创建运行时文件pid;
4.3、创建套接字sock文件;
4.4、创建sock超链接;
4.5、建议注册 MySQL 服务,便于后期维护。
五、总结
MySQL 8.4作为最新的长期支持版本,带来了多项性能优化和新特性。主要功能包括InnoDB引擎增强、复制功能改进、线程池管理策略优化、组复制增强、JSON功能增强以及性能模式改进等。此外,还修复了多个安全性、SQL函数和操作符、复制和分区问题,提升了系统的稳定性和安全性。这些改进将帮助用户更好地管理和优化数据库环境,提供更高的性能和更好的稳定性。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





