二进制安装 MySQL 8.0

在生产或测试环境中,我们常常希望避免包管理器带来的依赖和交互问题,尤其是当系统自带版本过旧或安装过程频繁弹窗时。此时,使用 MySQL 官方提供的二进制压缩包(Generic Linux Binary) 进行安装,是一种高度可控、跨平台兼容、无交互、可定制化强的解决方案。

本文将详细介绍如何在任意主流 Linux 系统(如 Ubuntu、CentOS、Debian、Red Hat 等)上,通过 二进制方式静默安装 MySQL 8.0,并将数据目录指定为 /data/mysql,适用于需要高性能、独立部署或自动化脚本集成的场景。


一、为什么选择二进制安装?

优势说明
完全可控,避免包管理副作用绕过 apt/yum/dnf 的依赖解析与自动配置,避免因系统库版本冲突导致安装失败或配置被覆盖。
高度可移植,跨 Linux 发行版运行使用官方预编译的 x86_64 通用二进制包,可在 CentOS、Ubuntu、Debian、Red Hat 等任意主流发行版上一致部署,环境一致性更强。
目录结构完全自定义安装路径(basedir)、数据目录(datadir)、日志、socket 文件等均可自由指定,满足企业级部署规范(如 /data/mysql 存放数据)。
实例独立,便于迁移与灾备MySQL 实例完全独立于系统包管理器,可整体打包迁移至其他服务器,适合容器化、离线部署或快速恢复场景。
适合自动化与标准化交付无需处理交互式配置,可通过 Shell 脚本、Ansible、Packer 等工具实现无人值守部署,适用于 CI/CD 流水线和规模化运维。

二、 环境准备

  • 操作系统:任意 Linux 发行版(Ubuntu 18.04+/CentOS 7+/Debian 10+ 等)

  • - 架构:x86_64

    指常见的 64 位服务器 CPU 架构,无论是 Intel 还是 AMD 生产的现代服务器都支持。 ❌ 不支持 ARM 架构(如华为鲲鹏、AWS Graviton、Mac M1/M2)。 验证方法:运行 uname -m,如果显示 x86_64 则符合要求。

  • 内存:建议 ≥ 2GB

  • 磁盘:确保 /data 分区有足够空间

  • 用户权限:具备 rootsudo 权限


三、安装步骤

1. 下载 MySQL 8.0 二进制包

前往 MySQL 官方下载页 或使用以下命令下载通用二进制包:

cd /tmp
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz

🔗 包名说明:mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz
这是官方为 Linux 系统编译的通用二进制版本,适用于大多数现代发行版。


2. 创建安装目录并解压

我们将 MySQL 安装到 /usr/local/mysql,数据目录设为 /data/mysql

# 创建安装目录
sudo mkdir -p /usr/local/mysql# 解压到临时目录并移动
sudo tar -xJf mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz -C /tmp/
sudo mv /tmp/mysql-8.0.36-linux-glibc2.12-x86_64/* /usr/local/mysql/

3. 创建 MySQL 用户和组

为安全起见,MySQL 应以专用用户运行:

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql# 设置安装目录权限
sudo chown -R mysql:mysql /usr/local/mysql

4. 创建数据目录(关键:使用 /data/mysql

sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql

💡 将数据目录放在 /data 下,便于独立挂载大容量磁盘,提升 I/O 性能。


5. 初始化数据库

执行初始化命令,生成系统数据库和临时 root 密码:

cd /usr/local/mysqlsudo bin/mysqld --initialize \--user=mysql \--basedir=/usr/local/mysql \--datadir=/data/mysql

✅ 成功后会输出:

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jj?-kM:A6xLw

⚠️ 请务必记录此临时密码! 后续首次登录需要使用。


6. 生成 SSL/RSA 证书(推荐)

sudo bin/mysql_ssl_rsa_setup \--basedir=/usr/local/mysql \--datadir=/data/mysql

7. 创建配置文件 /etc/my.cnf

sudo tee /etc/my.cnf > /dev/null << 'EOF'
[mysqld]
# 基本路径
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/error.log# 网络配置
port = 3306
bind-address = 0.0.0.0# InnoDB 设置(可选优化)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M[client]
socket = /var/run/mysqld/mysqld.sock[mysql]
socket = /var/run/mysqld/mysqld.sock
EOF

创建日志目录:

sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
# 创建目录
sudo mkdir -p /var/run/mysqld

创建 socket 目录并设置权限

# 创建目录
sudo mkdir -p /var/run/mysqld# 设置属主为 mysql 用户
sudo chown mysql:mysql /var/run/mysqld# 设置权限(关键)
sudo chmod 755 /var/run/mysqld

8. 创建 systemd 服务文件

sudo tee /etc/systemd/system/mysql.service > /dev/null << 'EOF'
[Unit]
Description=MySQL Server
After=network.target[Service]
RuntimeDirectory=mysqld
RuntimeDirectoryMode=0755
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
LimitNOFILE=65535[Install]
WantedBy=multi-user.target
EOF

9. 启动 MySQL 服务

# 重载 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload# 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql# 查看状态
sudo systemctl status mysql --no-pager

10. 获取临时密码并登录修改 root 密码

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jj?-kM:A6xLw

登录 MySQL:

/usr/local/mysql/bin/mysql -u root -p

修改 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password123!';
FLUSH PRIVILEGES;
EXIT;

在 MySQL 中创建内网 root 访问权限

-- 创建 root 用户,仅允许从内网段 192.168.0.0/16 登录
CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'Password123!';-- 授予所有权限(与本地 root 一致)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%' WITH GRANT OPTION;-- 刷新权限
FLUSH PRIVILEGES;
EXIT;

11. 创建专用远程管理员用户(不推荐直接开放 root 远程)

❌ 原始做法风险:CREATE USER 'root'@'%' ...
即使设置了强密码,也极易成为暴力破解和 SQL 注入攻击的目标。

-- 创建专用远程管理员(仅限指定IP登录)
CREATE USER 'admin'@'公司出口IP' IDENTIFIED BY 'StrongPass!2025';-- 授予全局管理权限(等同于 root 权限)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'公司出口IP' WITH GRANT OPTION;-- 刷新权限
FLUSH PRIVILEGES;
EXIT;

📌 说明:

  • 用户名改为 admindba 更安全,避免暴露 root
  • 登录来源限定为 公司出口IP,防止其他 IP 尝试连接
  • 密码需包含大小写+数字+特殊字符,长度 ≥ 12

确保 /etc/my.cnfbind-address = 0.0.0.0,然后重启:

systemctl restart mysql

(可选)进一步最小化权限(更安全)

如果不需要完全 ALL PRIVILEGES,可以按需授权:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, PROCESS, RELOAD, SHUTDOWN,SHOW DATABASES, SUPER, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'admin'@'公司出口IP';

12. 配置 iptables 实现精细网络访问控制

目标:

  • ✅ 允许 公司出口IP 访问 3306(外网特定IP)
  • ✅ 允许 192.168.0.0/16 内网所有机器访问 3306
  • ❌ 拒绝其他所有外部主机访问 3306
方法一:直接使用 iptables 命令(临时生效)
# 允许特定公网IP访问MySQL
sudo iptables -A INPUT -p tcp --dport 3306 -s 公司出口IP -j ACCEPT# 允许内网段访问MySQL
sudo iptables -A INPUT -p tcp --dport 3306 -s 192.168.0.0/16 -j ACCEPT# 拒绝其他所有对3306的访问(必须放在最后)
sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

⚠️ 重要:iptables 规则是按顺序匹配的,-j DROP 必须在所有 ACCEPT 规则之后,否则会被提前拦截!


方法二:持久化保存 iptables 规则(重启不失效)

不同系统保存方式略有差异:

Ubuntu / Debian
# 安装持久化工具
sudo apt-get install -y iptables-persistent# 保存当前规则
sudo netfilter-persistent save
CentOS / RHEL / Rocky Linux
# 安装服务
sudo yum install -y iptables-services || sudo dnf install -y iptables-service# 启用并保存
sudo systemctl enable iptables
sudo service iptables save

13. 验证安装

/usr/local/mysql/bin/mysql --version
# 输出:/usr/local/mysql/bin/mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)/usr/local/mysql/bin/mysql -u root -p -e "SELECT VERSION();"
# 应返回 MySQL 版本号
+-----------+
| VERSION() |
+-----------+
| 8.0.36    |
+-----------+

14. 添加 MySQL 到环境变量(可选)

echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

之后可直接使用 mysqlmysqldump 等命令。


四、如何卸载?

sudo systemctl stop mysql
sudo systemctl disable mysql
sudo rm /etc/systemd/system/mysql.service
sudo rm /etc/my.cnf
sudo rm -rf /usr/local/mysql
sudo rm -rf /data/mysql
sudo rm -rf /var/log/mysql
sudo userdel mysql 2>/dev/null || true
sudo groupdel mysql 2>/dev/null || true

五、最佳实践建议

  1. 定期备份 /data/mysql
    数据目录集中,便于使用 xtrabackupmysqldump 备份。

  2. 监控磁盘空间
    /data 分区应有足够的扩展能力。

  3. 使用专用备份用户

    CREATE USER 'backup'@'localhost' IDENTIFIED BY 'BackupPass!789';
    GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
    
  4. 定期更新 MySQL 版本
    二进制包方式便于快速升级:只需替换 /usr/local/mysql 并保留 /data/mysql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96276.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96276.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/96276.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Z检验与T检验的区别与联系:原理、公式和案例全解

Z检验与T检验全解析&#xff1a;原理、区别与实际案例 统计学的核心任务之一&#xff0c;就是通过有限的样本数据去推断总体特征。在这一过程中&#xff0c;假设检验成为了最常见的工具。而在众多检验方法中&#xff0c;Z检验与T检验几乎是入门必学&#xff0c;也是应用最广泛的…

SpringBoot之缓存(最详细)

文章目录项目准备新建项目并选择模块安装添加依赖添加application.yml删除demos.web包编写pojo层userdto/ResultJson编写mapper层UserMapper编写service层UserService编写controller层编写配置类MybatisPlusConfig编写测试类1 缓存分类1.1 MyBatis一级缓存1.2 MyBatis二级缓存1…

B站 韩顺平 笔记 (Day 29)

目录 1&#xff08;集合的框架体系&#xff09; 2&#xff08;Collection接口和常用方法&#xff09; 2.1&#xff08;Collection接口实现类特点&#xff09; 2.2&#xff08;常用方法&#xff09; 2.3&#xff08;遍历元素方式1&#xff1a;迭代器&#xff09; 1&#x…

axios报错解决:unsupported BodyInit type

目录 问题 原因 解决方法 问题 Got ‘unsupported BodyInit type’ bug on iPhone 14(IOS 17.5) Issue #6444 axios/axios 我这里是iPhone 6plus打开会报错白屏 好多人遇到了相同的问题 当我在 iPhone 14 上浏览页面时,我收到一条错误消息:错误:不支持的 BodyInit 类型,…

iperf3网络性能测试工具

iperf3 是一个功能非常强大的网络性能测试工具,用于测量两个网络节点之间的最大TCP、UDP带宽和性能。它通过创建数据流并测量其吞吐量来工作。 下面我将为您详细介绍其核心用法、常用命令和参数。 核心概念:客户端/服务器模式 iperf3 测试需要两台机器:一台作为服务器端(…

【C#】 资源共享和实例管理:静态类,Lazy<T>单例模式,IOC容器Singleton我们该如何选

文章目录前言一、静态类1.1 静态类的特点1.2 静态类的使用1.3 静态类的缺点二、单例模式2.1 Lazy延迟初始化2.2 Lazy< T>单例模式的使用2.3 单例模式的特点三、IOC的Singleton总结前言 编写程序的时候&#xff0c;常常能碰到当某些数据或方法需要被整个程序共享&#xf…

MySQL——存储引擎、索引

一、存储引擎1.MySQL体系结构2.存储引擎简介存储引擎就是储存数据、建立索引、更新/查询数据等技术的实现方式。储存引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可被称为表类型建表语句&#xff1a;查询数据库支持的储存引擎&#xff1a;show engines…

机器学习01——机器学习概述

上一章&#xff1a;机器学习核心知识点目录 下一章&#xff1a;机器学习02——模型评估与选择 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、参考书推荐二、机器学习的基本概…

Shell编程:检测主机ip所在网段内其他在线ip

一、逻辑设计获取本机 ip 及 网段循环检测网段内所有 ip判断 ping 结果&#xff0c;符合条件的输出相关信息二、代码展示#!/bin/bash#获取本机ip local_iphostname -I #local_ipip addr| grep "inet "|grep -v 127.0.0.1| awk {print $2}#获取本机网段 networkecho $…

Windows安装Chroma DB

安装步骤 安装python 3.8或以上的版本创建虚拟环境&#xff1a;python -m venv chroma_env激活虚拟环境&#xff1a;.\chroma_env\Scripts\activate安装Chroma DB&#xff1a;pip install chromadb(可选)安装扩展功能&#xff1a;pip install sentence-transformers pypdf tikt…

李彦宏亲自说

昨天&#xff0c;李彦宏亲自说&#xff1a;百度的数字人直播以假乱真&#xff0c;很多人是看不出这是数字人&#xff0c;而且转化率很高”这几个月百度一直在推“数字人”不再强调“大模型”了。数字人是AI落地最适合企业的一款产品&#xff0c;一般用于客服、面试、直播带货等…

JS 中bind、call、apply的区别以及手写bind

1.作用call、apply、bind作用是改变函数执行的上下文&#xff0c;简而言之就是改变函数运行时的this指向那么什么情况下需要改变this的指向呢&#xff1f;下面举个例子var name "lucy"; var obj {name: "martin",say: function () {console.log(this.nam…

vue2(7)-单页应用程序路由

1.单页应用程序如 单页&#xff1a;网易云&#xff0c;多页&#xff1a;京东单页应用程序&#xff0c;之所以开发效率高&#xff0c;性能高&#xff0c;用户体验好最大的原因是&#xff1a;页面按需更新 要按需更新&#xff0c;就要明确访问路径和组件的关系这时候就要用…

vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)

直接上完整代码&#xff01;记录实现方式 注意heatmap.min.js需要通过heatmap.js提供的下载地址进行下载&#xff0c;地址放在下边 url&#xff1a;heatmap GIT地址 <template><div class"heatmap-view" ref"heatmapContainer"></div&g…

配置Kronos:k线金融大模型

github地址 网页btc预测demo使用的Kronos-mini模型 huggingface的仓库 文章目录配置环境安装python环境获取市场数据的库通过webui使用example中的例子prediction_example.py补充说明根据原例优化的代码CryptoDataFetcher单币对多周期预测配置环境 使用conda的环境. 首先进行换…

【Deep Learning】Ubuntu配置深度学习环境

【start: 250715】 文章目录ubuntu与深度学习安装cuda查看显卡信息&#xff08;nvidia-smi&#xff09;升级驱动下载cuda安装conda安装anaconda默认指向自己的conda初始化conda确认 conda.sh 被加载安装cuda-toolkit直接安装cuda-toolkit&#xff08;高级的&#xff09;安装高于…

车载数据采集(DAQ)解析

<摘要> 车载数据采集&#xff08;DAQ&#xff09;软件模块是现代汽车电子系统的核心组件&#xff0c;负责实时采集、处理、记录和传输车辆运行数据。本文系统解析了DAQ模块的开发&#xff0c;涵盖其随着汽车智能化演进的历史背景&#xff0c;深入阐释了信号、协议、缓存等…

强化学习框架Verl运行在单块Tesla P40 GPU配置策略及避坑指南

1.前言 由于比较穷,身边只有1块10年前的Tesla P40 GPU卡(2016年9月发布),想利用起来学习强化学习框架Verl。程序员学习开源代码,大部分人的第一直觉不是分析模块组成,而是跑起来试试,然后去debug一下后面的运行逻辑。 由于在官方部署指导文档中并未指明跑通Verl的最低…

leetcode169.多数元素

题目描述给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。题目解法博耶-摩尔多数投票算法&#xff08;英语&#xff1a;Boyer–Moore…

基于机器学习的P2P网贷平台信用违约预测模型

使用平台提供的借款人信息&#xff08;年龄、收入、历史信用等&#xff09;和借款信息&#xff0c;构建一个二分类模型来预测借款人是否会违约。重点解决类别不平衡问题和模型可解释性。逻辑回归、随机森林、XGBoost、SMOTE过采样、模型评估&#xff08;AUC, KS, F1-Score&…