环境准备
关闭防火墙
systemctl stop firewalld
深度防火墙修改成disable
vi /etc/selinux/config
#改完要重启
reboot
修改域名符合FQDN规范
主机名+公司域名

MySQL的下载上传
Windows去官网下载得到一个压缩包
Linux这边安装一个工具,rz选择windows机的目录,上传到Linux机
dnf install -y lrzsz

MySQL的解压安装
创建一个管理软件的目录,安装包移动过来
mkdir -p /export/software
mv mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz /export/software
进入目录下,解压到当前路径(安装包,和解压后的东西在同一路径)
#解压安装包 显示过程
tar -xvf mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz
把解压出来的文件夹重命名成mysql(更短,好记)
mv mysql-8.0.43-linux-glibc2.28-x86_64 mysql

看一下以前有没有安装过依赖包啥的然后给删了
rpm -qa | grep mysql
rpm -qa | grep mariadb
#如果有东西 给删了
dnf remove mysql -y
#清理缓存
dnf clean all
rm -rf /etc/my.cnf
dnf list installed | grep mysql
dnf list installed | grep mariadb
dnf clean all
然后再来装依赖包
yum install libaio -y
id mysql
创建一个数据库专用账号mysql(其所属组也为mysql)
useradd mysql -r -s /sbin/nologin
#后面的路径是解压后的MySQL在的路径
chown -Rf mysql:mysql /export/software/mysql
创建mysql和修改所属组和所属用户的这个步骤,一定要在初始化之前
安装后的配置
初始化数据库
初始化数据库(可以实现数据库的初始化,而且会产生一个随机密码)
注意:这个日志文件尽量在创建之前,先查看一下路径,是否已经有这个同名的日志,如果有,先删掉
/export/software/mysql/bin/mysqld --initialize --user=mysql --basedir=/export/software/mysql
--initialize 初始化(真正开始干活)
--user=mysql 以mysql用户的身份初始化数据库,产生文件都是mysql作为拥有者
--basedir=xxx mysql其安装目录,非常重要
把初始化的所有输出(包括临时密码)写入 /tmp/mysqld.log,后面可以直接用 cat /tmp/mysqld.log 查看日志
查看初始化密码
cat /tmp/mysqld.log | grep 'temporary password'

修改密码
修改密码前需要启动服务
启动服务前 配置一个环境变量
把 MySQL 的
bin目录永久加入系统环境变量,让你在任何目录下都能直接敲mysql、mysqldump这些命令,不用每次都写/export/software/mysql/bin/mysql这种全路径
#配置环境变量
echo 'export PATH=/export/software/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
#启动
/export/software/mysql/bin/mysqld_safe --user=mysql &
用临时密码登录
mysql -uroot -p'yrw6toILcp.i'
修改密码
-- 注意:密码要符合复杂度要求(大小写、数字、特殊符号)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
验证密码,重新登录
exit
mysql -uroot -p你的新密码

配置my.cnf
my.cnf 是 MySQL 的全局配置文件,相当于给 MySQL 写了一份 "启动说明书",里面写了 MySQL 启动时要用到的关键参数,比如:
basedir:MySQL 的安装目录datadir:数据文件存放目录socket:客户端和服务端通信的套接字文件character_set_server:默认字符集(这里设置成了utf8mb4,支持 emoji)
核心作用:
- 统一配置 :每次启动 MySQL 时,它会自动读取这个文件里的参数,不用你每次都在命令行里手动写
--basedir、--datadir这些参数。- 持久生效:配置写在文件里,重启服务器或重启 MySQL 后,设置依然有效。
- 方便管理:比如修改端口、字符集、最大连接数这些,直接改配置文件就行,不用修改启动命令。
退出MySQL 把MySQL服务关了
pkill mysqld
vim /etc/my.cnf

# 🔧 1. [mysqld]
# 这是配置块标记,告诉 MySQL:下面所有配置都是给「服务端进程 mysqld」用的
[mysqld]
# 📂 2. basedir=/export/software/mysql
# MySQL 的安装根目录,也就是你解压后放文件的地方
# MySQL 启动时会在这里找 bin/mysqld、lib 等核心文件
basedir=/export/software/mysql
# 🗄️ 3. datadir=/export/software/mysql/data
# MySQL 的数据目录,所有数据库、表、日志文件都存在这里
# 你初始化数据库时生成的文件,全在这个目录里
datadir=/export/software/mysql/data
# 🔌 4. socket=/tmp/mysql.sock
# 本地客户端和服务端通信的"桥梁文件"
# 你用 `mysql -uroot -p` 登录时,就是通过这个文件和 MySQL 建立连接的
# 没有它会报错:Can't connect to local MySQL server through socket
socket=/tmp/mysql.sock
# 🔤 5. character_set_server=utf8mb4
# MySQL 服务端的默认字符集,设置为 utf8mb4
# 它是 utf8 的超集,支持所有中文、emoji 表情,避免存中文变成乱码或问号
character_set_server=utf8mb4
# 📏 6. collation-server=utf8mb4_unicode_ci
# 字符集的"校对规则",决定字符串怎么比较、排序
# utf8mb4_unicode_ci 表示:不区分大小写,兼容多语言,适合绝大多数场景
collation-server=utf8mb4_unicode_ci
# 用配置文件启动MySQL
mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
# 验证端口是否监听
netstat -pantul | grep mysql
netstat 查看系统网络连接、端口监听状态的工具
-pantul 组合参数
-p:显示哪个进程在占用端口
-a:显示所有连接(包括监听和非监听)
-n:用数字显示端口,不解析域名(更快
-t:只显示 TCP 协议的连接
-u:只显示 UDP 协议的连接
-l:只显示正在监听的端口

:::3306表示 MySQL 正在监听 3306 端口LISTEN状态说明服务正常,正在等待连接- 同时还有
33060端口,这是 MySQL 8.0 自带的 X 协议端口,不影响正常使用
把以上所有步骤 封装为一个shell脚本
vim install_mysql8.sh
#!/bin/bash
# MySQL 8.0 一键安装脚本(适配路径 /export/server/mysql)
# ========== 1. 可修改的变量 ==========
MYSQL_DIR="/export/server/mysql"
MYSQL_DATA_DIR="${MYSQL_DIR}/data"
MYSQL_USER="mysql"
MYSQL_PASS="MySQL@666" # 你可以改成自己的密码
MYSQL_PORT=3306
# ========== 2. 环境准备 ==========
echo "=== 1/8 环境准备 ==="
# 安装依赖
yum install -y libaio-devel numactl wget
# 创建 mysql 用户(不存在才创建)
id ${MYSQL_USER} >/dev/null 2>&1
if [ $? -ne 0 ]; then
useradd -r -s /sbin/nologin ${MYSQL_USER}
echo "已创建用户 mysql"
fi
# ========== 3. 下载并解压 MySQL ==========
echo "=== 2/8 下载并解压 MySQL ==="
# 请把下面的 URL 换成你课件里的 MySQL 包地址
# 示例:wget https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz
# 如果你已经把压缩包传到服务器上,注释掉 wget 这行,直接解压即可
if [ ! -d "${MYSQL_DIR}" ]; then
tar -xf mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz
mv mysql-8.0.43-linux-glibc2.28-x86_64 ${MYSQL_DIR}
echo "已解压并移动 MySQL 到 ${MYSQL_DIR}"
else
echo "目录 ${MYSQL_DIR} 已存在,跳过解压"
fi
# ========== 4. 创建数据目录并授权 ==========
echo "=== 3/8 创建数据目录并授权 ==="
mkdir -p ${MYSQL_DATA_DIR}
chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_DIR}
chmod 750 ${MYSQL_DATA_DIR}
# ========== 5. 写入 my.cnf 配置 ==========
echo "=== 4/8 配置 /etc/my.cnf ==="
cat > /etc/my.cnf << EOF
[mysqld]
port=${MYSQL_PORT}
socket=${MYSQL_DIR}/mysql.sock
basedir=${MYSQL_DIR}
datadir=${MYSQL_DATA_DIR}
log-error=${MYSQL_DIR}/error.log
pid-file=${MYSQL_DIR}/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
EOF
# ========== 6. 初始化 MySQL ==========
echo "=== 5/8 初始化 MySQL ==="
${MYSQL_DIR}/bin/mysqld --initialize --user=${MYSQL_USER} --basedir=${MYSQL_DIR} --datadir=${MYSQL_DATA_DIR}
# 提取临时密码
TEMP_PASS=$(grep "temporary password" ${MYSQL_DIR}/error.log | awk '{print $NF}')
echo "临时密码: ${TEMP_PASS}"
# ========== 7. 配置 systemd 服务 ==========
echo "=== 6/8 配置 systemd 服务 ==="
cat > /etc/systemd/system/mysqld.service << EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=${MYSQL_USER}
Group=${MYSQL_USER}
Type=forking
ExecStart=${MYSQL_DIR}/bin/mysqld --daemonize --pid-file=${MYSQL_DIR}/mysqld.pid
ExecStop=${MYSQL_DIR}/bin/mysqladmin --defaults-file=/etc/my.cnf shutdown
PIDFile=${MYSQL_DIR}/mysqld.pid
TimeoutSec=600
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# ========== 8. 启动服务并设置密码 ==========
echo "=== 7/8 启动 MySQL 服务 ==="
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
echo "=== 8/8 修改 root 密码并创建远程用户 ==="
# 修改本地 root 密码
${MYSQL_DIR}/bin/mysql -uroot -p"${TEMP_PASS}" --connect-expired-password -e "
ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_PASS}';
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_PASS}';
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
"
echo "✅ MySQL 8.0 安装完成!"
echo "安装目录: ${MYSQL_DIR}"
echo "本地 root 密码: ${MYSQL_PASS}"
echo "远程 root 密码: ${MYSQL_PASS}"
echo "端口: ${MYSQL_PORT}"
echo "远程连接用户: root@%"
chmod +x install_mysql8.sh
./install_mysql8.sh
脚本里的关键改进点
-
变量统一管理:所有路径、密码、端口都在脚本开头定义,方便修改
-
依赖检查 :自动安装
libaio-devel等依赖 -
用户创建优化 :先判断
mysql用户是否存在,不存在才创建,避免报错 -
目录判断 :如果
mysql目录已存在,跳过解压,避免重复操作 -
配置文件自动生成 :自动写入
my.cnf和mysqld.service,不用手动敲 -
密码自动修改:自动提取临时密码,修改为你设置的新密码,并创建远程用户
-
提示信息 :每一步都有
echo提示,方便排查问题