可行,但必须严格按解压→用户隔离→配置→初始化四步执行:解压后需创建mysql用户、配置/etc/my.cnf(含basedir/datadir/socket/log-error/user)、用--initialize生成临时密码并记录,再配环境变量和systemd服务方可启动。

二进制包安装 MySQL 5.7 在 Linux 上是可行的,但必须严格按顺序执行解压、用户隔离、配置、初始化四步,跳过任意一环都会导致 mysqld 启动失败或无法生成有效数据目录。
解压后不能直接运行 mysqld
MySQL 5.7 二进制包(如 mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz)解压后只是静态文件集合,没有预编译服务单元或自动注册机制。常见错误是解压完就执行 ./bin/mysqld,结果报错:Can't find error-message file '/usr/share/mysql/errmsg.sys' 或 Failed to open log file。
- 必须先创建独立的
mysql系统用户(不能用 root 直接跑) - 必须显式指定
--basedir和--datadir,否则mysqld会按内置路径硬编码查找资源 - 推荐解压到
/usr/local/下并建软链接(如/usr/local/mysql),避免路径写死
my.cnf 配置必须覆盖默认搜索路径
Linux 下 mysqld 启动时默认按顺序读取 /etc/my.cnf → /etc/mysql/my.cnf → $MYSQL_HOME/my.cnf → ~/.my.cnf。如果只在解压目录里放了 my.cnf,它根本不会被加载。
- 务必把配置文件放在
/etc/my.cnf(最可靠),或确保MYSQL_HOME已设且指向解压根目录 -
[mysqld]段中至少包含:basedir(指向解压路径)、datadir(指向空数据目录)、socket(建议用/tmp/mysql.sock)、log-error(指定错误日志路径) - 别漏掉
user=mysql—— 这是 systemd 或手动启动时降权的关键项,否则初始化会因权限拒绝失败
初始化必须用 --initialize 且记录临时密码
MySQL 5.7 强制要求初始化生成数据字典和 root 临时密码。用 --initialize-insecure 虽能跳过密码,但仅限测试环境;生产环境必须用 --initialize,否则后续 mysql -u root -p 会因密码为空被拒绝。
- 命令示例:
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql - 临时密码在
log-error指定的日志末尾,形如:A temporary password is generated for root@localhost: rp.+9(&vscE+ - 若初始化中途失败(如
datadir不为空或权限不对),先清空该目录再重试,不可跳过 - 初始化成功后,
datadir下会出现mysql、sys等系统库目录,这是验证是否成功的最直观依据
环境变量和 systemd 服务不是可选项
不配环境变量,mysql 客户端命令找不到;不配 systemd,无法用 systemctl start mysqld 统一管理,也难以设置开机自启。
- 在
/etc/profile末尾追加:export PATH=$PATH:/usr/local/mysql/bin,然后source /etc/profile - systemd 服务文件必须写入
/etc/systemd/system/mysqld.service,其中ExecStart要带完整路径和--defaults-file=/etc/my.cnf - 启动前执行:
systemctl daemon-reload,否则新 service 文件不生效 - 启动后立即检查:
systemctl status mysqld和tail -n 20 /data/mysql/mysql_error.log,不要只看 “active (running)” 就以为没问题
最容易被忽略的是:初始化后首次登录必须用临时密码,并立刻执行 ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_pass';,否则后续任何操作(包括改密码本身)都会被 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 拦住。











