在开始安装MySQL 8.4之前,我们需要先确认系统环境是否满足要求。执行以下命令查看系统架构和版本信息:
bash复制uname -a
cat /etc/os-release
对于MySQL 8.4,官方支持的主流Linux发行版包括:
注意:如果系统是国产化平台如银河麒麟V10,需要特别注意选择ARM架构的安装包。X86架构的系统则选择常规的x86_64包。
如果系统中存在旧版MySQL或MariaDB,必须先彻底清理以避免冲突:
bash复制# 查看已安装的MySQL相关包
rpm -qa | grep -i mysql
# 移除所有MySQL相关包(根据查询结果逐个移除)
yum remove mysql-community-server mysql-community-client mysql80-community-release
# 清理残留文件和目录
find / -name mysql | xargs rm -rf
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /var/log/mysqld.log
# 检查并移除MariaDB(与MySQL存在冲突)
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs
MySQL 8.4需要以下基础依赖:
bash复制yum install -y libaio numactl openssl-devel libtirpc-devel
对于自定义目录安装,还需要确保目标目录所在分区有足够空间(建议至少预留10GB)。
访问MySQL官方下载页面(https://dev.mysql.com/downloads/),选择:
使用wget下载到服务器:
bash复制wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.7-1.el9.x86_64.rpm-bundle.tar
tar -xvf mysql-8.4.7-1.el9.x86_64.rpm-bundle.tar
按顺序安装主要组件:
bash复制rpm -ivh mysql-community-common-8.4.7-1.el9.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.4.7-1.el9.x86_64.rpm
rpm -ivh mysql-community-libs-8.4.7-1.el9.x86_64.rpm
rpm -ivh mysql-community-client-8.4.7-1.el9.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.4.7-1.el9.x86_64.rpm
rpm -ivh mysql-community-server-8.4.7-1.el9.x86_64.rpm
提示:如果遇到依赖问题,可以添加
--nodeps参数强制安装,但建议先解决依赖关系。
默认情况下MySQL会使用/var/lib/mysql作为数据目录,我们可以更改为其他位置:
bash复制# 创建新数据目录(例如/data/mysql)
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
修改MySQL配置文件/etc/my.cnf:
ini复制[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
[client]
socket=/data/mysql/mysql.sock
如果使用systemd管理服务,还需要修改服务文件:
bash复制systemctl edit mysqld
添加以下内容:
ini复制[Service]
ExecStartPre=/usr/bin/mkdir -p /data/mysql
ExecStartPre=/usr/bin/chown mysql:mysql /data/mysql
Environment="MYSQLD_OPTS=--datadir=/data/mysql"
执行初始化命令,注意指定自定义数据目录:
bash复制mysqld --initialize --user=mysql --datadir=/data/mysql
初始化完成后,会生成临时root密码,记录在日志文件中:
bash复制grep 'temporary password' /var/log/mysqld.log
bash复制systemctl start mysqld
systemctl enable mysqld
验证服务状态:
bash复制systemctl status mysqld
使用初始密码登录:
bash复制mysql -uroot -p
执行密码修改(MySQL 8.4默认需要强密码):
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewStrong@Pass123';
运行安全向导:
bash复制mysql_secure_installation
建议执行以下操作:
sql复制CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myuser'@'%' IDENTIFIED BY 'User@Pass123';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
在/etc/my.cnf中添加以下优化参数:
ini复制[mysqld]
innodb_buffer_pool_size = 4G # 建议为系统内存的50-70%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
max_connections = 200
thread_cache_size = 10
table_open_cache = 4000
ini复制slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
对于应用连接,建议使用连接池并设置合理参数:
ini复制[mysqld]
wait_timeout = 600
interactive_timeout = 600
max_allowed_packet = 256M
如果MySQL无法启动,检查错误日志:
bash复制tail -n 100 /var/log/mysqld.log
常见问题:
setenforce 0或配置正确策略如果无法连接MySQL,检查:
firewall-cmd --list-allSELECT host,user FROM mysql.user;bind-address配置正确使用以下命令监控性能:
bash复制# 实时监控
mysqladmin -uroot -p processlist
# 查看状态变量
mysql -uroot -p -e "SHOW GLOBAL STATUS"
# 查看InnoDB状态
mysql -uroot -p -e "SHOW ENGINE INNODB STATUS\G"
bash复制mysqldump -uroot -p --all-databases --single-transaction > full_backup.sql
创建/etc/cron.daily/mysql_backup:
bash复制#!/bin/bash
BACKUP_DIR=/backup/mysql
DATE=$(date +%Y%m%d)
mysqldump -uroot -pMyPassword --all-databases --single-transaction | gzip > $BACKUP_DIR/full_$DATE.sql.gz
find $BACKUP_DIR -type f -mtime +7 -delete
设置可执行权限:
bash复制chmod +x /etc/cron.daily/mysql_backup
对于大型数据库,可以使用Percona XtraBackup进行热备份:
bash复制xtrabackup --backup --target-dir=/backup/mysql/full --user=root --password=MyPassword
xtrabackup --prepare --target-dir=/backup/mysql/full
MySQL 8.4引入了多项重要改进:
性能优化:
JSON增强:
安全增强:
升级建议: