离线安装mysql核心卡点是包与系统严格匹配、依赖手动补全、数据目录显式初始化;需用uname -m和ldd --version核对架构与glibc版本,下载对应linux-generic包,创建mysql用户并赋权,执行--initialize生成临时密码,启动时必须指定--defaults-file指向完整配置的my.cnf。

离线安装 MySQL 不是解压完就能跑,核心卡点在三件事:包与系统严格匹配、依赖必须手动补全、数据目录必须显式初始化。
确认系统架构和 glibc 版本再下载包
直接下错包是离线失败的第一原因。x86_64 包扔到 aarch64 机器上会报 cannot execute binary file;glibc 2.28 编译的包在 CentOS 7(glibc 2.17)上运行会提示 GLIBC_2.28 not found。
- 查 CPU 架构:
uname -m(结果为x86_64或aarch64) - 查 glibc 版本:
ldd --version(看第一行输出,如ldd (GNU libc) 2.17) - 去 MySQL 官网下载页选
Linux - Generic包,文件名必须含对应标识,例如:mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz - 别用
mysql-community-serverRPM 包——它依赖网络源装systemd-sysv、libaio等,离线环境下rpm -ivh会卡死或静默失败
Ubuntu 系统必须提前装好 libaio1 和 libmecab2
Ubuntu 的 .deb-bundle.tar 包不包含系统级依赖,只打包了 MySQL 自身组件。缺 libaio1 启动时会卡在 Can't initialize InnoDB;缺 libmecab2 则全文索引功能不可用,且部分安装流程会中断。
- 在有网机器上用同版本 Ubuntu(如 20.04)执行:
apt download libaio1 libmecab2 - 得到类似
libaio1_0.3.112-9_amd64.deb和libmecab2_0.996-1.2ubuntu1_amd64.deb文件 - 传到目标机后按顺序安装:
sudo dpkg -i libaio1_*.deb libmecab2_*.deb - 如果提示依赖未满足,先运行:
sudo apt-get install -f(仅限首次修复,之后必须离线解决)
初始化数据目录前必须创建 mysql 用户并设权
二进制包解压后没有预建数据目录,直接 mysqld --daemonize 会报 Failed to open log file 或 Can't find error-message file。这不是配置问题,是权限和路径根本没生效。
- 创建系统用户:
sudo useradd -r -s /bin/false mysql - 新建数据目录(不要用默认
/var/lib/mysql,避免残留冲突):sudo mkdir -p /data/mysql - 赋权:
sudo chown -R mysql:mysql /data/mysql和sudo chown -R mysql:mysql /usr/local/mysql - 初始化(关键!必须带完整路径):
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql - 临时密码在终端末尾输出,形如:
A temporary password is generated for root@localhost: xY7#kP2!vNq,立刻记下
启动时必须显式指定 my.cnf 路径
MySQL 二进制包不读取 /etc/my.cnf 以外的默认路径,也不自动识别解压位置。不指定配置文件,mysqld 会用内置默认值,导致 bind-address、character_set_server 等全部失效,甚至无法远程连接。
- 写最小可用配置到
/etc/my.cnf:
[mysqld] port=3306 bind-address=0.0.0.0 user=mysql basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock pid-file=/data/mysql/mysql.pid character_set_server=utf8mb4
- 启动命令必须加
--defaults-file:/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize - 首次登录后立刻改密:
mysql -uroot -p→ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPass123!'; - 禁用密码过期:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
最容易被忽略的是初始化后的错误日志位置——它不在 /var/log,而是在 datadir 下的 hostname.err 文件里,比如 /data/mysql/server01.err。出问题不看这个日志,等于蒙眼排障。











