MySQL8.0.43的下载安装【二进制安装】【shell脚本】【环境准备】【my.cnf配置】【修改密码】

环境准备

关闭防火墙

复制代码
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 目录永久加入系统环境变量,让你在任何目录下都能直接敲 mysqlmysqldump 这些命令,不用每次都写 /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)
    核心作用:
  1. 统一配置 :每次启动 MySQL 时,它会自动读取这个文件里的参数,不用你每次都在命令行里手动写 --basedir--datadir 这些参数。
  2. 持久生效:配置写在文件里,重启服务器或重启 MySQL 后,设置依然有效。
  3. 方便管理:比如修改端口、字符集、最大连接数这些,直接改配置文件就行,不用修改启动命令。

退出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

脚本里的关键改进点

  1. 变量统一管理:所有路径、密码、端口都在脚本开头定义,方便修改

  2. 依赖检查 :自动安装 libaio-devel 等依赖

  3. 用户创建优化 :先判断 mysql 用户是否存在,不存在才创建,避免报错

  4. 目录判断 :如果 mysql 目录已存在,跳过解压,避免重复操作

  5. 配置文件自动生成 :自动写入 my.cnfmysqld.service,不用手动敲

  6. 密码自动修改:自动提取临时密码,修改为你设置的新密码,并创建远程用户

  7. 提示信息 :每一步都有 echo 提示,方便排查问题

相关推荐
yyuuuzz1 小时前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
yang)1 小时前
jesd204B应用笔记
网络·笔记
凡人叶枫1 小时前
Effective C++ 条款33:避免遮掩继承而来的名字
linux·服务器·开发语言·c++·嵌入式开发
凡人叶枫1 小时前
Effective C++ 条款31:将文件间的编译依存关系降至最低
linux·开发语言·c++·php·嵌入式开发·effective c++
葡萄皮sandy2 小时前
SSE和WebSocket
网络·websocket·网络协议
冰帆<2 小时前
[特殊字符] 深度起底:突破火山引擎 Ark-Helper 的 Linux 底层环境死锁,顺手魔改一份 Windows 一键安装脚本!
linux·windows·火山引擎
酉鬼女又兒2 小时前
零基础入门计算机网络网际层核心:IP数据报发送与转发完整流程、静态路由配置方法、路由环路成因与解决方案及历年考研经典例题深度解析
网络·tcp/ip·计算机网络·考研·职场和发展
我星期八休息2 小时前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring
良枫2 小时前
自进化 agent:核心模块一任务规划器 Planner
java·服务器·windows