准备工作

下载MySQL

https://dev.mysql.com/downloads/mysql/

MD5: 243d84f7eceef8564d49cbfa8b1d09de

Centos7.9 二进制方式安装 MySQL8.4_linux

检查系统环境

#检查cpu、内存、磁盘信息
lscpu
free -m
df -h

#检查操作系统版本
cat /etc/redhat-release

#检查系统glibc版本
ldd --version

关闭selinux,放行3306端口

#关闭selinux
sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/selinux/config
setenforce 0

#放行3306端口
firewall-cmd --add-port=3306/tcp --permanent

#重启防火墙更新配置
firewall-cmd --reload

#验证
firewall-cmd --list-all

#编辑hosts文件
echo '192.168.0.38 mysql8' >> /etc/hosts

配置本地YUM

#挂载ISO
mount /dev/sr0 /mnt
df -h

#删除现有repo
cd /etc/yum.repos.d/
rm -rf *

#生成新的
cat >> /etc/yum.repos.d/centos.repo << "EOF"
[Centos7.9]
name=centos7.9
baseurl=file:///mnt
gpgcheck=0
EOF

#重新加载
yum repolist

删除mariadb

yum -y remove mariadb-libs

安装 MySQL 8.4

创建数据库用户、目录

#创建目录,3306为一个实例,如部署多实例请按照下面目录结构创建
mkdir -p /mysql/data/mysql3306
mkdir -p /mysql/app/
mkdir -p /mysql/conf/
mkdir -p /mysql/data/mysql3306/data/
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/relaylog/
mkdir -p /mysql/data/mysql3306/slowlog/
mkdir -p /mysql/data/mysql3306/tmp/

#创建用户和用户组
groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /mysql
passwd mysql

#检查用户和用户组
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql

#将安装包上传放在/mysql/app目录下
mv mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz /mysql/app

#修改文件所属用户
chown -R mysql:mysql mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz

#切换到mysql用户
su - mysql

#解压安装包
cd /mysql/app
tar -xvf mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz

#修改目录名
mv mysql-8.4.0-linux-glibc2.17-x86_64 mysql-8.4.0

配置环境变量(mysql用户操作)

cat >> /home/mysql/.bash_profile << "EOF"
MYSQL_HOME=/mysql/app/mysql-8.4
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$MYSQL_HOME/bin
EOF

source ~/.bash_profile

#查看确认
which mysql

#创建参数文件
vi /mysql/conf/my3306.cnf

[mysqld]
server_id = 100
default-storage-engine= InnoDB
basedir=/mysql/data/mysql3306
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

mysql_native_password=ON
#default_authentication_plugin=mysql_native_password
#skip-grant-tables

port=3306
default-time_zone='+8:00'

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

max_connections=1500
slow_query_log=ON
long_query_time=5

初始化数据库(mysql用户操作)

#初始化数据库
mysqld  --defaults-file=/mysql/conf/my3306.cnf --initialize --user=mysql --basedir=/mysql/app/mysql-8.4  --datadir=/mysql/data/mysql3306/data/

#启动数据库
mysqld_safe --defaults-file=/mysql/conf/my3306.cnf --user=mysql &

创建软连接(root用户操作)

su - root

#创建软连接
ln -s /mysql/data/mysql3306/socket/mysql.sock /tmp/mysql.sock

#查看创建情况
ls -l /tmp/mysql.sock

配置开机自启动(root用户操作)

#创建mysql3306.service文件
vi /usr/lib/systemd/system/mysql3306.service

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

[Service]
User=mysql
Group=mysql
ExecStart=/mysql/app/mysql-8.4/bin/mysqld --defaults-file=/mysql/conf/my3306.cnf
LimitNOFILE = 65536
Restart=on-failure # 重启条件
#RestartPreventExitStatus=1 # 退出码为1不重启,即正常shutdown
#ReStartSec=10 # 重启条件满足后等多久自动重启(秒)
#StartLimitInterval=300 # 五分钟内只能重启两次,第三次不重启了
#StartLimitBurst=2 # 五分钟内只能重启两次,第三次不重启了
#TimeoutStartSec=30 # 服务启动的超时时间,单位秒
#TimeoutStopSec=30 # 服务关闭的超时时间,单位秒

#使配置生效
systemctl daemon-reload

systemctl enable mysql3306
systemctl start mysql3306
systemctl status mysql3306

配置 MySQL 8.4

#查看初始化密码
cat /mysql/data/mysql3306/log/mysqld.log | grep password

#首次登陆
mysql -uroot -p

#修改初始密码
alter user root@'localhost' identified by 'abc123';

#检查数据库版本
select version();

#配置远程登录
use mysql
update user set host='%' where user='root';
select user,host,plugin from user;
flush privileges;