Linux 离线 tar 包手动安装 MySQL8.0 完整教程(VM 虚拟机环境)
Linux 离线 tar 包手动安装 MySQL8.0 完整教程(VM 虚拟机环境)
前言
很多企业内网服务器无法联网,不能使用 yum / apt 在线安装 MySQL,此时官方压缩包离线部署是最优方案。本文基于 CentOS / RHEL 系列虚拟机,完整记录从环境清理、MySQL 部署初始化、systemd 服务配置、各类报错排错全流程,包含权限、SELinux、socket 连接失败等高频问题解决方案,新手可直接跟着操作落地。
一、前置准备:VM 环境清理
1.1 资源准备
- 搭建 VMware 虚拟机,导入 CentOS 镜像,提前规划放行 3306 端口;
- 下载 MySQL 离线包:
mysql-8.0.46-linux-glibc2.28-x86_64.tar.xz,上传至服务器。
1.2 清理旧环境残留
若宿主机/虚拟机曾经装过 VM、MySQL,残留配置、注册表、旧文件会引发端口冲突、启动失败,必须彻底清理:
- Windows 宿主机:卸载 VMware,删除安装目录、用户目录隐藏
.vmware文件夹,清理注册表 VMware 相关项; - Linux 虚拟机清理旧 MySQL:
sudo systemctl stop mysqld
sudo rm -rf /usr/local/mysql /etc/my.cnf
二、MySQL 解压与基础目录部署
2.1 解压并迁移至标准目录
# 解压 xz 压缩包
tar -xJf mysql-8.0.46-linux-glibc2.28-x86_64.tar.xz
# 移动到系统标准安装目录 /usr/local/mysql
sudo mv mysql-8.0.46-linux-glibc2.28-x86_64 /usr/local/mysql
2.2 创建全局软链接
方便任意终端直接使用 mysql 命令,后续升级只需替换安装目录,无需修改环境变量:
sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
sudo ln -s /usr/local/mysql/bin/mysqld /usr/local/bin/mysqld
2.3 创建专用运行用户(安全规范)
禁止 root 运行数据库,创建无登录权限的独立 mysql 用户:
# 创建用户组
sudo groupadd mysql
# 创建系统用户,归属 mysql 组,禁止登录服务器
sudo useradd -r -g mysql -s /bin/false mysql
2.4 创建数据目录并授权
# 创建数据存储目录
sudo mkdir -p /usr/local/mysql/data
# 赋予 mysql 用户完整目录权限
sudo chown -R mysql:mysql /usr/local/mysql
三、数据库初始化(重点:保存临时密码)
执行初始化命令,终端会输出 root 临时密码,务必复制保存,丢失需重置密码:
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
输出示例:
[Note] A temporary password is generated for root@localhost: Abc9#xyz!def
四、编写 MySQL 配置文件 /etc/my.cnf
sudo tee /etc/my.cnf << 'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
[client]
socket=/tmp/mysql.sock
EOF
五、配置 systemd 服务,实现开机自启
5.1 创建 mysql.service 服务文件
sudo tee /etc/systemd/system/mysql.service << 'EOF'
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
5.2 重载服务并启动 MySQL
# 重载 systemd 识别新服务
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable mysql
# 启动服务
sudo systemctl start mysql
# 查看运行状态
sudo systemctl status mysql
六、登录数据库修改 root 密码
6.1 使用临时密码登录
mysql -u root -p
粘贴初始化生成的临时密码进入数据库。
6.2 修改本地 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的自定义强密码';
6.3 忘记临时密码重置方案
# 停止 MySQL 服务
sudo systemctl stop mysql
# 跳过权限表后台启动
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
# 免密登录
mysql -u root
执行重置 SQL:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;
EXIT;
关闭临时进程,正常启动服务:
sudo pkill mysqld
sudo systemctl start mysql
七、安装完成验证命令
# 查看 MySQL 版本
mysql --version
# 查看服务运行状态
sudo systemctl status mysql
# 登录查看默认库
mysql -u root -p -e "SHOW DATABASES;"
八、常见报错完整排错指南
8.1 服务启动失败:查看日志定位根源
- MySQL 自身错误日志(最有效)
sudo tail -n 50 /usr/local/mysql/data/$(hostname).err
- systemd 服务运行日志
sudo journalctl -xeu mysql.service --no-pager
8.2 报错1:目录权限不足(最高频问题)
# 一键修复目录归属与权限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod 755 /usr/local/mysql
sudo chmod 750 /usr/local/mysql/data
8.3 报错2:SELinux 拦截(CentOS/RHEL 专属)
执行 getenforce,输出 Enforcing 即代表 SELinux 开启拦截。
方案1:给目录添加 SELinux 标签(推荐,不关闭安全机制)
# 数据目录标签
sudo semanage fcontext -a -t mysqld_db_t "/usr/local/mysql/data(/.*)?" 2>/dev/null || true
sudo restorecon -Rv /usr/local/mysql/data
# 二进制程序标签
sudo semanage fcontext -a -t mysqld_exec_t "/usr/local/mysql/bin/mysqld" 2>/dev/null || true
sudo restorecon -v /usr/local/mysql/bin/mysqld
# 整体安装目录标签
sudo semanage fcontext -a -t usr_t "/usr/local/mysql(/.*)?" 2>/dev/null || true
sudo restorecon -Rv /usr/local/mysql
# 重启服务
sudo systemctl restart mysql
优化 service 启动方式
替换 mysql.service 文件适配 SELinux:
sudo tee /etc/systemd/system/mysql.service << 'EOF'
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start mysql
8.4 报错3:2002 socket 路径不匹配
报错信息:Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock'
原因:服务端 socket 为 /tmp/mysql.sock,客户端默认读取 /run/mysqld/mysqld.sock,路径不一致。
方法1:统一 socket 路径(推荐)
# 重写配置文件
sudo tee /etc/my.cnf << 'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/run/mysqld/mysqld.sock
port=3306
[client]
socket=/run/mysqld/mysqld.sock
EOF
# 创建目录并授权
sudo mkdir -p /run/mysqld
sudo chown mysql:mysql /run/mysqld
# 重启 MySQL
sudo systemctl restart mysql
方法2:创建软链接映射 socket
sudo mkdir -p /run/mysqld
sudo ln -s /tmp/mysql.sock /run/mysqld/mysqld.sock
方法3:登录时手动指定 socket
mysql -u root -p --socket=/tmp/mysql.sock
socket 问题校验命令
# 查看服务状态
sudo systemctl status mysql
# 全局查找 socket 文件
sudo find / -name "mysql.sock" -o -name "mysqld.sock" 2>/dev/null
# 查看目录权限
ls -la /run/mysqld/
# 核对配置文件
cat /etc/my.cnf
九、部署完成后必做优化操作
- 设置高强度 root 登录密码,避免弱密码;
- 确认 MySQL 开机自启:
sudo systemctl enable mysql; - 防火墙放行 3306 端口(如需外部远程连接);
- 定期备份
/usr/local/mysql/data数据目录; - 删除匿名用户,限制 root 仅本地访问,提升数据库安全。
结语
离线压缩包部署 MySQL8.0 自由度更高,适合无外网内网服务器。整套流程踩坑点集中在目录权限、SELinux 拦截、socket 路径不匹配,遇到启动失败优先查看 .err 错误日志,基本可以快速定位问题。本文适配 CentOS7/8/9 全系列,VM 虚拟机环境可直接复刻操作。
更多推荐

所有评论(0)