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

 更新时间:2026年01月23日 11:11:19   作者:L162476  
MySQL是一个广泛使用的开源关系型数据库管理系统,最新版本为 8.0,这篇文章主要介绍了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/mysqldPID 文件目录(记录 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

九、配置远程访问(可选,如 Navicat 连接)

1. 允许 root 远程连接

mysql -uroot -p"MySQL@8888" << EOF
# 将root的访问主机改为“%”(任意远程主机)
USE mysql;
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;
EOF

2. 解决 Navicat 兼容问题(MySQL 8.0 专属)

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

常见问题排查

  • 初始化失败:Permission denied

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

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

    • 原因:防火墙未开放 3306 端口;
    • 解决:执行firewall-cmd --add-port=3306/tcp --permanent

总结 

到此这篇关于linux环境安装MySQL(二进制包形式)的文章就介绍到这了,更多相关linux安装MySQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQLyog连接不上mysql问题的解决方法(按照步骤,包解决)

    SQLyog连接不上mysql问题的解决方法(按照步骤,包解决)

    这篇文章主要介绍了SQLyog连接不上mysql问题的解决方法,文中给大家分析了SQLyog连接不上mysql的几种原因,并通过图文结合的方式给大家讲解的非常详细,需要的朋友可以参考下
    2024-03-03
  • Mysql插入带有引号的字符串数据最佳实践

    Mysql插入带有引号的字符串数据最佳实践

    在MySQL中可以使用单引号或双引号来包裹字符串,下面这篇文章主要给大家介绍了关于Mysql插入带有引号的字符串数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • mysql如何设置表中字段为当前时间

    mysql如何设置表中字段为当前时间

    这篇文章主要介绍了mysql如何设置表中字段为当前时间问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • mysql数据库id主键自增加删除后不连续如何解决

    mysql数据库id主键自增加删除后不连续如何解决

    这篇文章主要介绍了mysql数据库id主键自增加删除后不连续的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • MySQL数据权限的实现详情

    MySQL数据权限的实现详情

    这篇文章主要介绍了MySQL数据权限的实现详情,文章通过实际案例,从代码实战的角度来实现这样的一个数据权限。具体详细介绍,具有一定的参考价值
    2022-08-08
  • 详细聊聊MySQL中auto_increment有什么作用

    详细聊聊MySQL中auto_increment有什么作用

    auto_increment是用于主键自动增长的,从1开始增长,下面这篇文章主要给大家介绍了关于MySQL中auto_increment有什么作用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL查看锁的实现代码

    MySQL查看锁的实现代码

    本文主要介绍了MySQL查看锁的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • MySQL 数据库定时备份的几种方式(全面)

    MySQL 数据库定时备份的几种方式(全面)

    在操作数据过程中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库。本篇文章主要讲述了几种方法进行 MySQL 定时备份数据库。
    2021-09-09
  • 一文掌握MySQL唯一索引是如何加锁的

    一文掌握MySQL唯一索引是如何加锁的

    这篇文章主要介绍了一文掌握MySQL唯一索引是如何加锁的,本案例其实就是在主键索引上进行等值查询,取决于查询记录是否存在,存在退化成记录锁,否则就是在索引树中找到第一个大于该查询记录的记录后,将改记录的索引中的next-key lock退换成间隙锁,需要的朋友可以参考下
    2024-06-06
  • mysql存储emoji表情步骤详解

    mysql存储emoji表情步骤详解

    在本篇内容中小编给大家整理了关于mysql存储emoji表情的详细步骤以及知识点,需要的朋友们学习下。
    2019-03-03

最新评论