参考

官方安装文档

卸载 mariadb

yum remove -y mariadb-libs-5.5.68

下载mysql8.4

https://dev.mysql.com/downloads/mysql/
在这里插入图片描述

下载RPM包

wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.4-1.el7.x86_64.rpm-bundle.tar

创建解压目录

mkdir -p mysql8.4.4

tar -xvf mysql-8.4.4-1.el7.x86_64.rpm-bundle.tar -C mysql8.4.4
在这里插入图片描述

安装依赖

yum install libaio-devel  libaio-devel

安装mysql-server

rpm -ivh mysql-community-{server,client,client-plugins,icu-data-files,common,libs}-*

修改基础配置文件

  • 需要先修改配置文件,用于初始化,否则后期修改配置文件中参数与mysql默认参数冲突时,数据库会无法启动。
vim /etc/my.cnf
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#慢日志
slow_query_log=ON
long_query_time=5
slow_query_log_file=/var/log/mysql-slow.log

#日志写入优化  
innodb_redo_log_capacity=8G # 重做日志总磁盘空间大小,建议4-16G
innodb_log_buffer_size=256M    # 增大日志缓冲区

##设置缓冲池实例为8个
innodb_buffer_pool_instances=8
#为所有线程打开的表的数量
table_open_cache=65536

#### Threads ###
innodb_purge_threads=4
innodb_page_cleaners=8
innodb_read_io_threads=16
innodb_write_io_threads=16

#### Buffer Cache ###
##### Global ###
##设置缓冲池大小为
innodb_buffer_pool_size=24G
innodb_buffer_pool_chunk_size=128M
innodb_change_buffering=ALL
innodb_change_buffer_max_size=25

#### Connections ###
back_log=1500
max_connections=10000
max_connect_errors=100000
open_files_limit=65535
table_definition_cache=10000
thread_cache_size=1000
#connect_timeout=30
#interactive_timeout=3600
#wait_timeout=3600
#net_read_timeout=86400
#net_write_timeout=86400


### InnoDB Engine ###
###事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
transaction_isolation=READ-COMMITTED

# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4

# 不区分表名大小写
lower_case_table_names=1

# 默认使用“mysql_native_password”插件认证
mysql_native_password=ON
#MySQL 8.4 以上版本
authentication_policy=mysql_native_password
#MySQL 8.0-8.3 版本
#default_authentication_plugin=mysql_native_password

# 关闭DNS解析
skip_name_resolve=ON

# 单个数据包(网络传输或 SQL 语句)的最大值,不建议超过1G,默认值64M
max_allowed_packet=960M

##########################################
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 取消了 ONLY_FULL_GROUP_BY 为了兼容老代码

# 全文检索
innodb_ft_total_cache_size=1600M
innodb_ft_cache_size=80M
innodb_ft_min_token_size=2
ft_min_word_len=2
ngram_token_size=2

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
  • 创建慢日志文件
sudo -u mysql echo "" > /var/log/mysql-slow.log

修改systemd配置文件

cat /usr/lib/systemd/system/mysqld.service
#
# systemd service file for MySQL forking server
#

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables
ExecStartPre=/usr/bin/mysqld_pre_systemd

# Start main service
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE=141082 

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false
systemctl daemon-reload 

启动mysqld

systemctl start mysqld

获取默认root密码

grep ‘temporary password’ /var/log/mysqld.log
在这里插入图片描述

登录修改密码

mysql -uroot -p
在这里插入图片描述

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

修改root@localhost,允许远程连接

mysql> use mysql;
mysql> UPDATE user SET host='%' WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit

重启服务

systemctl restart mysqld

netstat -nltp

在这里插入图片描述

数据库重新初始化

  • 如果修改配置文件后,数据库无法启动时,请检查日志文件,错误例如:
Different lower_case_table_names settings for server ('1') and data dictionary ('0') 

造成原因是,使用默认配置文件初始化数据库,后期又修改配置文件中的lower_case_table_names参数,造成配置冲突。

  • 此时需要重新初始化数据库
    1. 还原默认配置文件,并启动数据库
    2. 登录数据库后,查询 'datadir’路径;
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.4 MySQL Community Server - GPL

Copyright (c) 2000, 2025, 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> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)

mysql> 
  1. 删除数据存储目录下的所有文件;
rm -rf  /var/lib/mysql/*
  1. 初始化数据库;
mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize --console
  1. 查看新密码
[root@centos7-172-028-002-001 log]# grep 'temporary password' /var/log/mysqld.log 
2025-03-18T14:03:20.458408Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: wrV2G*jwLbjy

更多推荐