linux环境安装MySQL的详细步骤(二进制包形式)

二进制包安装 MySQL 是灵活度最高 的方式(支持自定义程序目录、数据目录等所有路径),以下是分步骤、带详细解释 的完整流程(适配aarch64/x86_64架构,以 MySQL 8.0.44 为例):

一、前置准备(必做:环境检查 + 依赖 + 用户组)

1. 确认系统架构(选对应二进制包)
复制代码
# 查看系统架构(aarch64/x86_64)
uname -m
  • 若输出aarch64:选aarch64版本的二进制包;
  • 若输出x86_64:选x86_64版本的二进制包。
2. 安装依赖包(避免初始化 / 启动失败)
复制代码
# CentOS/RHEL系
yum install -y libaio-devel numactl-devel perl net-tools openssl-devel
# Debian/Ubuntu系
apt-get install -y libaio-dev numactl perl net-tools libssl-dev
  • 依赖作用:libaio是 InnoDB 引擎的异步 IO 依赖;numactl优化多 CPU 架构性能。
3. 创建 MySQL 专用用户 / 组(安全规范)

MySQL 服务需以非 root 用户运行,避免权限过大:

复制代码
# 创建系统组(-r:系统组,ID<1000)
groupadd -r mysql
# 创建系统用户(-r:系统用户;-g:关联mysql组;-s:禁止登录;-M:不创建家目录)
useradd -r -g mysql -s /sbin/nologin -M mysql
# 验证创建结果
id mysql

二、下载并解压二进制包

1. 下载对应架构的二进制包

从 MySQL 官网获取包(或用 wget 直接下载):

复制代码
# 进入临时目录(避免污染系统目录)
cd /tmp

# ① aarch64架构下载链接
wget https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.44-linux-glibc2.28-aarch64.tar.xz

# ② x86_64架构下载链接
# wget https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz
2. 解压到自定义程序目录 (示例:/opt/mysql

二进制包可解压到任意目录(如/opt//usr/local),这里以/opt/mysql为例:

复制代码
# 解压包(替换为实际包名)
tar -xvf mysql-8.0.44-linux-glibc2.28-aarch64.tar.xz -C /opt/

# 重命名(或创建软链接,方便后续升级)
# 方式1:重命名(简单直接)
mv /opt/mysql-8.0.44-linux-glibc2.28-aarch64 /opt/mysql

# 方式2:软链接(升级时只需替换软链接指向)
# ln -s /opt/mysql-8.0.44-linux-glibc2.28-aarch64 /opt/mysql

三、配置环境变量(简化命令调用)

若不配置环境变量,需用/opt/mysql/bin/mysql这类完整路径调用命令,配置后可直接用mysql

复制代码
# 将MySQL的bin目录加入系统环境变量
echo "export PATH=/opt/mysql/bin:\$PATH" >> /etc/profile

# 立即生效环境变量
source /etc/profile

# 验证(输出MySQL版本则成功)
mysql --version

四、准备自定义目录(数据 / 日志 / PID)

二进制包的所有目录都需手动创建,核心目录包括:

目录 作用
/data/mysql 数据存储目录(存放数据库、表、InnoDB 文件等核心数据)
/data/mysql/log 日志目录(存放错误日志、慢查询日志等)
/var/run/mysqld PID 文件目录(记录 MySQL 服务的进程 ID)
1. 创建目录并设置权限
复制代码
# 1. 数据目录
mkdir -p /data/mysql
# 2. 日志目录
mkdir -p /data/mysql/log
# 3. PID目录
mkdir -p /var/run/mysqld

# 给所有目录赋予mysql用户权限(必须!否则MySQL无读写权限)
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /var/run/mysqld
# 设置目录权限(755:用户可读可写可执行,组/其他可读可执行)
chmod -R 755 /data/mysql

五、编写 MySQL 主配置文件(/etc/my.cnf

my.cnf是 MySQL 的核心配置文件,所有目录、参数都在这里定义,直接复制以下内容(需根据你的目录调整):

复制代码
vi /etc/my.cnf

写入配置:

复制代码
[mysqld]
# 1. 程序目录(二进制包解压路径)
basedir=/opt/mysql
# 2. 数据目录(自定义的/data/mysql)
datadir=/data/mysql
# 3. Socket文件路径(本地连接的通信文件,需和数据目录同权限)
socket=/data/mysql/mysql.sock
# 4. 运行用户
user=mysql
# 5. 端口(默认3306)
port=3306
# 6. 错误日志路径(自定义到日志目录)
log-error=/data/mysql/log/mysqld.log
# 7. PID文件路径
pid-file=/var/run/mysqld/mysqld.pid
# 8. 禁用符号链接(安全选项)
symbolic-links=0
# 9. 字符集(避免乱码)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 10. 打开文件数限制(避免高并发时文件数不足)
open_files_limit=65535

[client]
# 客户端连接的Socket路径(必须和mysqld的socket一致)
socket=/data/mysql/mysql.sock
# 客户端字符集
default-character-set=utf8mb4

六、初始化 MySQL(生成系统表 + 临时密码)

初始化是创建 MySQL 系统库(如mysql库,存储用户权限)、生成临时密码的关键步骤:

复制代码
# 执行初始化(--user:指定运行用户;--datadir:指定数据目录)
mysqld --initialize --user=mysql --datadir=/data/mysql
1. 获取临时密码

初始化成功后,临时密码会写入错误日志/data/mysql/log/mysqld.log):

复制代码
# 从日志中提取临时密码(最后一行的"root@localhost:"后即为密码)
TEMP_PWD=$(grep "temporary password" /data/mysql/log/mysqld.log | awk '{print $NF}')
echo "MySQL临时密码:$TEMP_PWD"
  • 示例输出:MySQL临时密码:abc123!@#

七、配置 Systemd 服务(用systemctl管理 MySQL)

手动创建 Systemd 服务文件,实现systemctl start/stop等便捷管理:

复制代码
vi /usr/lib/systemd/system/mysqld.service

写入配置:

复制代码
[Unit]
# 服务描述
Description=MySQL Server
# 启动依赖(网络就绪后再启动)
After=network.target remote-fs.target nss-lookup.target

[Service]
# 进程类型(notify:MySQL启动后主动通知Systemd)
Type=notify
# 运行用户/组
User=mysql
Group=mysql
# 启动命令(指定配置文件路径)
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
# 打开文件数限制(和my.cnf保持一致)
LimitNOFILE=65535
# 进程数限制
LimitNPROC=65535
# 失败后自动重启
Restart=on-failure
# 禁止重启的退出状态码
RestartPreventExitStatus=1
# 超时时间(0:无超时)
TimeoutSec=0

[Install]
# 多用户模式下启动
WantedBy=multi-user.target

八、启动 MySQL 并配置

1. 启动服务并设置开机自启
复制代码
# 1. 重新加载Systemd配置(识别新的mysqld.service)
systemctl daemon-reload
# 2. 启动MySQL
systemctl start mysqld
# 3. 设置开机自启
systemctl enable mysqld
# 4. 检查服务状态(显示Active: running则成功)
systemctl status mysqld
2. 重置初始密码(临时密码已过期)

MySQL 初始化的临时密码仅用于首次登录,必须重置后才能使用:

复制代码
# 用临时密码登录并重置密码(替换为你的临时密码和新密码)
mysql -uroot -p"$TEMP_PWD" --connect-expired-password << EOF
# 新密码需符合策略(至少8位,含大小写+数字+特殊字符)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MySQL@8888';
# 刷新权限(确保修改生效)
FLUSH PRIVILEGES;
EOF
1. 允许 root 远程连接
复制代码
mysql -uroot -p"MySQL@8888" << EOF
# 将root的访问主机改为"%"(任意远程主机)
USE mysql;
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;
EOF

MySQL 8.0 默认用caching_sha2_password认证插件,旧版 Navicat 不兼容,需改为传统插件:

复制代码
mysql -uroot -p"MySQL@8888" << EOF
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MySQL@8888';
FLUSH PRIVILEGES;
EOF
3. 开放防火墙端口
复制代码
# 开放3306端口(永久生效)
firewall-cmd --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload

十、验证安装成功

复制代码
# 1. 验证MySQL版本
mysql --version
# 2. 验证数据目录(输出/data/mysql则正确)
mysql -uroot -p"MySQL@8888" -e "show variables like 'datadir';"
# 3. 创建测试库(验证数据写入)
mysql -uroot -p"MySQL@8888" -e "CREATE DATABASE test_db;"
# 查看/data/mysql下是否生成test_db目录
ls -l /data/mysql | grep test_db

常见问题排查

  1. 初始化失败:Permission denied

    • 原因:目录权限未给mysql用户;
    • 解决:重新执行chown -R mysql:mysql /data/mysql
  2. 启动失败:Can't read PID file

    • 原因:/var/run/mysqld权限不足;
    • 解决:chown -R mysql:mysql /var/run/mysqld
  3. 远程连接超时

    • 原因:防火墙未开放 3306 端口;
    • 解决:执行firewall-cmd --add-port=3306/tcp --permanent
相关推荐
阿巴~阿巴~15 小时前
TCP可靠传输的底层密码:序号、窗口与六大标志位全解析
运维·服务器·网络·tcp·序列号·六大标志位·确认序号
默默在路上16 小时前
CentOS Stream 9 安装mysql8.0
linux·mysql·centos
❀͜͡傀儡师16 小时前
docker部署filebrowser轻量级个人云盘
运维·docker·容器
游戏23人生16 小时前
QT linux下 虚拟键盘使用及注意事项
linux·qt·计算机外设
AAA.建材批发刘哥16 小时前
03--C++ 类和对象中篇
linux·c语言·开发语言·c++·经验分享
hellodaoyan16 小时前
网络技术企业级交换机配置
运维
softshow102617 小时前
使用 Windows 子系统 WSL 安装 Ubuntu 22.04
linux·windows·ubuntu
wadesir17 小时前
简易制作LinuxShell完全指南(深入解析原理、设计与实践步骤)
linux·运维·服务器
BigBigHang17 小时前
【docker】ollama的docker-compose及一些启动踩坑
运维·docker·容器