Linux 系统 MySQL 8.0 详细安装教程


文章目录

  • 一、安装前准备
    • [1. 系统要求](#1. 系统要求)
    • [2. 清理旧版 MySQL(可选)](#2. 清理旧版 MySQL(可选))
  • [二、安装方式一:官方 YUM/APT 仓库安装(推荐)](#二、安装方式一:官方 YUM/APT 仓库安装(推荐))
    • [2.1 CentOS 系统(YUM 仓库)](#2.1 CentOS 系统(YUM 仓库))
    • [2.2 Ubuntu 系统(APT 仓库)](#2.2 Ubuntu 系统(APT 仓库))
  • 三、安装方式二:二进制包安装(适合自定义安装路径)
  • [四、MySQL 基础配置](#四、MySQL 基础配置)
    • [4.1 编辑主配置文件 my.cnf](#4.1 编辑主配置文件 my.cnf)
    • [4.2 启动 MySQL 服务并设置开机自启](#4.2 启动 MySQL 服务并设置开机自启)
    • [4.3 重置 root 密码(关键)](#4.3 重置 root 密码(关键))
    • [4.4 配置远程连接(可选)](#4.4 配置远程连接(可选))
  • 五、安装验证
  • 六、常见问题解决
    • [6.1 启动 MySQL 服务失败](#6.1 启动 MySQL 服务失败)
    • [6.2 远程连接失败](#6.2 远程连接失败)
    • [6.3 密码强度不满足要求](#6.3 密码强度不满足要求)
  • [七、卸载 MySQL(可选)](#七、卸载 MySQL(可选))
  • 八、总结

本文针对 Linux 主流发行版(CentOS 7/8、Ubuntu 20.04/22.04),详细讲解 MySQL 8.0 的两种安装方式(官方 YUM/APT 仓库安装、二进制包安装),附带配置优化和常见问题解决,适合运维人员及开发人员参考。

一、安装前准备

1. 系统要求

  • CentOS:CentOS 7 及以上(64 位),内存 ≥ 2GB,磁盘空间 ≥ 10GB

  • Ubuntu:Ubuntu 20.04 及以上(64 位),内存 ≥ 2GB,磁盘空间 ≥ 10GB

  • 通用要求:关闭防火墙或开放 MySQL 默认端口(3306),禁止安装旧版 MySQL(避免冲突)

2. 清理旧版 MySQL(可选)

若系统已安装旧版 MySQL(如 5.7),需先卸载清理,避免依赖冲突:

(1)CentOS 系统

bash 复制代码
# 停止 MySQL 服务
systemctl stop mysqld
# 卸载 MySQL 组件
yum remove -y mysql-community-server mysql-community-client mysql-community-common mysql-community-libs
# 清理残留文件
rm -rf /var/lib/mysql/
rm -rf /etc/my.cnf
rm -rf /var/log/mysqld.log

(2)Ubuntu 系统

bash 复制代码
# 停止 MySQL 服务
systemctl stop mysql
# 卸载 MySQL 组件(保留配置文件)
apt remove -y mysql-server mysql-client mysql-common
# 彻底卸载(删除配置文件)
apt purge -y mysql-server mysql-client mysql-common
# 清理残留文件
rm -rf /var/lib/mysql/
rm -rf /etc/mysql/
rm -rf /var/log/mysql/

二、安装方式一:官方 YUM/APT 仓库安装(推荐)

通过 MySQL 官方仓库安装,可自动解决依赖,且方便后续版本更新,适合大多数场景。

2.1 CentOS 系统(YUM 仓库)

(1) 步骤 1:下载并安装官方 YUM 源

bash 复制代码
# 进入临时目录
cd /tmp
# 下载 MySQL 8.0 YUM 源(CentOS 7 对应 el7,CentOS 8 对应 el8)
# CentOS 7:
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# CentOS 8:
# wget https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm

# 安装 YUM 源
rpm -ivh mysql80-community-release-el7-3.noarch.rpm

(2)步骤 2:验证 YUM 源是否生效

bash 复制代码
yum repolist enabled | grep mysql

若输出包含 mysql80-community 相关条目,说明源生效。

(3)步骤 3:安装 MySQL 8.0

bash 复制代码
yum install -y mysql-community-server

等待安装完成,YUM 会自动安装所有依赖组件。

2.2 Ubuntu 系统(APT 仓库)

(1)步骤 1:下载并安装官方 APT 源

bash 复制代码
# 安装依赖工具
apt install -y wget gnupg

# 下载 MySQL 8.0 APT 源配置文件
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb

# 安装 APT 源(安装过程中会弹出配置界面,默认选择 MySQL 8.0 即可,点击 OK 确认)
dpkg -i mysql-apt-config_0.8.22-1_all.deb

# 更新 APT 缓存
apt update

(2)步骤 2:安装 MySQL 8.0

bash 复制代码
apt install -y mysql-server

安装过程中会弹出设置 MySQL root 用户密码的界面,输入密码并确认(密码需包含大小写字母、数字、特殊符号,确保安全性)。

三、安装方式二:二进制包安装(适合自定义安装路径)

若需自定义安装路径(如 /data/mysql),可选择二进制包安装,步骤如下(以 CentOS 7 为例,Ubuntu 流程类似):

(1)步骤 1:下载二进制包

我们下载通用二进制包(glibc 2.17,适配 CentOS 7),官网下载地址https://downloads.mysql.com/archives/community/

bash 复制代码
cd /tmp
# 下载 MySQL 8.0 二进制包(Linux x86_64)
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.17-x86_64.tar
#解压
tar -xvf mysql-8.0.36-linux-glibc2.17-x86_64.tar

得到如下文件

(2)步骤 2:解压安装包并移动到自定义路径

bash 复制代码
# 解压压缩包,解压到自定义路径(如 /usr/local/app/mysql)
tar -xvf mysql-8.0.36-linux-glibc2.17-x86_64.tar.xz -C /usr/local/app

# 添加软链接
cd /usr/local/app
ln -s mysql-8.0.36-linux-glibc2.17-x86_64/ /usr/local/app/mysql

# 创建数据存储目录
mkdir -p /data/mysql/data
# 创建日志目录
mkdir -p /data/mysql/log

(3)步骤 3:创建 MySQL 用户和组

bash 复制代码
# 创建 mysql 组
groupadd mysql
# 创建 mysql 用户(加入 mysql 组,不允许登录系统)
useradd -r -g mysql -s /sbin/nologin mysql

# 授权目录权限
chown -R mysql:mysql /usr/local/app/mysql/
chown -R mysql:mysql /data/mysql/

(4)步骤 4:初始化 MySQL

bash 复制代码
# 进入 MySQL 安装目录的 bin 目录
cd /usr/local/app/mysql/bin

# 初始化(生成临时 root 密码,记录日志中的密码)
./mysqld \
--initialize \
--user=mysql \          # 运行用户
--basedir=/usr/local/app/mysql \  # MySQL 安装目录
--datadir=/data/mysql/data \  # 数据存储目录
--log-error=/data/mysql/log/mysqld.log  # 自定义日志文件路径(含文件名)

初始化完成后,查看临时密码:

bash 复制代码
cat /data/mysql/log/mysqld.log | grep "temporary password"

输出示例:2024-05-20T08:30:00.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: XXXXXXXX(临时密码)

(5)步骤 5:配置 MySQL 服务

bash 复制代码
# 复制服务配置文件到 /etc/systemd/system/
cp /usr/local/app/mysql/support-files/mysql.server /etc/systemd/system/mysqld.service

# 编辑服务配置文件,指定安装路径和数据路径
vim /etc/systemd/system/mysqld.service

在配置文件中添加以下内容(若已存在则修改):

ini 复制代码
[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=/usr/local/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql/data --basedir=/usr/local/app/mysql --log-error=/data/mysql/log/mysqld.log 
LimitNOFILE=5000

四、MySQL 基础配置

4.1 编辑主配置文件 my.cnf

bash 复制代码
vim /etc/my.cnf

添加/修改以下核心配置(根据实际需求调整):

ini 复制代码
[mysqld]
# 端口
port=3306
# 数据目录(YUM/APT 安装默认 /var/lib/mysql,二进制包安装为自定义路径)
datadir=/var/lib/mysql
# 套接字文件
socket=/var/lib/mysql/mysql.sock
# 字符集(推荐 UTF8MB4,支持 emoji)
character-set-server=utf8mb4
#  collation
collation-server=utf8mb4_unicode_ci
# 最大连接数
max_connections=1000
# 日志文件
log-error=/var/log/mysqld.log
# 临时表大小
tmp_table_size=64M
max_heap_table_size=64M

[mysql]
# 客户端字符集
default-character-set=utf8mb4

[client]
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8mb4

4.2 启动 MySQL 服务并设置开机自启

(1)CentOS/Ubuntu 通用命令

bash 复制代码
# 重新加载系统服务(修改配置文件后执行)
systemctl daemon-reload

# 启动 MySQL 服务
systemctl start mysqld

# 查看服务状态(active (running) 表示启动成功)
systemctl status mysqld

# 设置开机自启
systemctl enable mysqld

4.3 重置 root 密码(关键)

(1)YUM/APT 安装(Ubuntu 已设置密码,可跳过)

bash 复制代码
# 查看临时密码(YUM 安装默认生成临时密码)
grep 'temporary password' /var/log/mysqld.log

# 登录 MySQL
mysql -u root -p
# 输入上述临时密码

# 重置密码(密码强度需符合要求:大小写字母+数字+特殊符号)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword@2024';

# 刷新权限
FLUSH PRIVILEGES;

(2)二进制包安装

bash 复制代码
# 登录 MySQL(使用初始化时的临时密码)
/usr/local/app/mysql/bin/mysql -u root -p

# 重置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword@2024';

# 刷新权限
FLUSH PRIVILEGES;

4.4 配置远程连接(可选)

默认情况下,root 用户仅允许本地连接,若需远程连接 MySQL,执行以下命令:

bash 复制代码
# 登录 MySQL
mysql -u root -p

# 允许 root 用户远程连接(% 表示所有 IP,也可指定具体 IP,如 192.168.1.100)
CREATE USER 'root'@'%' IDENTIFIED BY 'NewPassword@2024';

# 授予 root 用户所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

# 刷新权限
FLUSH PRIVILEGES;

同时,需开放 Linux 防火墙 3306 端口:

CentOS 系统

bash 复制代码
# 开放 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 重新加载防火墙规则
firewall-cmd --reload

Ubuntu 系统

bash 复制代码
# 开放 3306 端口
ufw allow 3306/tcp

# 重启防火墙
ufw reload

五、安装验证

bash 复制代码
# 登录 MySQL
/usr/local/app/mysql/bin/mysql -u root -p
# 输入重置后的密码

# 查看 MySQL 版本
select version();
# 输出示例:8.0.36

# 查看数据库列表
show databases;
# 输出包含 information_schema、mysql、performance_schema、sys 等默认数据库,说明安装成功

六、常见问题解决

6.1 启动 MySQL 服务失败

  • 查看日志排查原因:cat /var/log/mysqld.log

  • 常见原因:端口被占用(使用 netstat -tuln | grep 3306 查看端口占用,修改 my.cnf 中的 port 配置)、数据目录权限不足(执行 chown -R mysql:mysql /var/lib/mysql 授权)

6.2 远程连接失败

  • 检查防火墙是否开放 3306 端口(执行 firewall-cmd --list-portsufw status 查看)

  • 检查 root 用户远程权限是否配置正确(登录 MySQL 执行 select user,host from mysql.user where user='root';,确保 host 为 % 或指定的远程 IP)

  • 检查网络是否通畅(远程机器执行 ping 服务器 IPtelnet 服务器 IP 3306 测试连接)

6.3 密码强度不满足要求

MySQL 8.0 默认启用密码强度验证插件(validate_password),若需设置简单密码,可临时关闭验证:

bash 复制代码
# 登录 MySQL
mysql -u root -p

# 关闭密码强度验证
set global validate_password.policy=0;
set global validate_password.length=6;

# 重置简单密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

注意:生产环境不建议关闭密码强度验证,需保证密码安全性。

七、卸载 MySQL(可选)

若需卸载 MySQL,执行以下命令(CentOS 为例):

bash 复制代码
# 停止服务
systemctl stop mysqld

# 卸载组件(YUM 安装)
yum remove -y mysql-community-server mysql-community-client mysql-community-common mysql-community-libs

# 二进制包安装卸载
rm -rf /usr/local/app/mysql
rm -rf /data/mysql

# 清理配置文件和日志
rm -rf /etc/my.cnf
rm -rf /var/log/mysqld.log

# 删除 mysql 用户和组
userdel -r mysql
groupdel mysql

八、总结

本文介绍了 Linux 系统下 MySQL 8.0 的两种安装方式,YUM/APT 仓库安装适合快速部署,二进制包安装适合自定义需求。安装完成后,需重点配置 root 密码和远程连接权限,确保数据库安全可用。若遇到问题,可通过查看日志快速定位原因,按常见问题解决方法处理。

相关推荐
何妨呀~2 小时前
Keepalived+Haproxy高可用集群实验
linux·服务器·网络
廋到被风吹走2 小时前
【数据库】【MySQL】锁机制深度解析:从原理到死锁分析实战
数据库·mysql
hqwest2 小时前
码上通QT实战31--系统设置06-保存报警信息
运维·qmessagebox·报警条件·温度报警·报警阀值·报警动作·sqlquery
林鸿风采2 小时前
在Alpine Linux上部署docker和Portainer管理工具
linux·运维·docker·portainer
float_六七2 小时前
设备分配核心数据结构全解析
linux·服务器·数据结构
比奇堡派星星3 小时前
Linux OOM Killer
linux·开发语言·arm开发·驱动开发
@22064 小时前
银河麒麟系统离线环境下用docke方式部署(Postgres、Nginx、Redis、JDK)
运维·数据库·redis·nginx
wifi chicken4 小时前
Linux 内核开发之单链表的增删查改详解
linux·数据结构·链表
阿坤带你走近大数据4 小时前
oracle的varchar2(200)和mysql的varchar(200) 最大支持的字节数和字符数都一样吗
数据库·mysql·oracle