YUM安装MySQL 5.7(CentOS 7)必须禁用mysql80-community、启用mysql57-community仓库,否则默认装8.0;需先卸载mariadb-libs、安装libaio,再下载mysql57-community-release-el7-11.rpm配置源,清理缓存后安装并验证版本。

mysqld 服务起不来,多半是没关 mariadb、没装 libaio,或者仓库配置冲突——直接按版本选对方法,别混着用。
YUM安装MySQL 5.7(CentOS 7)必须禁用8.0仓库
官方YUM源默认启用最新版(即8.0),不手动关掉就会装错。装完发现 mysql --version 显示 8.0,说明没切成功。
- 先装仓库配置包:
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm && sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm - 立刻禁用8.0、启用5.7:
sudo yum-config-manager --disable mysql80-community && sudo yum-config-manager --enable mysql57-community - 验证是否生效:
yum repolist enabled | grep mysql—— 输出里只应有mysql57-community - 安装后首次启动会自动生成数据目录和临时密码,日志在
/var/log/mysqld.log,用sudo grep 'temporary password' /var/log/mysqld.log提取
APT安装MySQL 8.0(Ubuntu 20.04/22.04)注意认证插件兼容性
8.0 默认用 caching_sha2_password 插件,老客户端(比如某些Python驱动或Navicat旧版)连不上,报错 Authentication plugin 'caching_sha2_password' cannot be loaded。
- 下载并安装APT配置工具:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb,交互界面中用方向键选中mysql-8.0,Tab 切到 OK 回车 - 更新索引后安装:
sudo apt update && sudo apt install mysql-server -y - 若需兼容旧客户端,初始化后进库执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES; -
systemctl status mysql必须显示active (running),否则检查/var/log/mysql/error.log
手动解压安装(通用Linux,双版本共存场景)端口和路径必须隔离
想同时跑 5.7 和 8.0?不能共用 /var/lib/mysql 或都监听 3306,否则启动一个另一个就失败。
- 解压后重命名目录,例如:
tar -xvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.xz -C /opt && mv /opt/mysql-5.7.44-linux-glibc2.12-x86_64 /opt/mysql57 -
my.cnf里强制指定不同端口和路径:port=3307、datadir=/opt/mysql57/data、socket=/opt/mysql57/tmp/mysql.sock - 初始化必须带参数:
/opt/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql57 --datadir=/opt/mysql57/data(加--initialize-insecure才不生成随机密码) - 启动时要用绝对路径:
/opt/mysql57/bin/mysqld_safe --defaults-file=/opt/mysql57/my.cnf &,别依赖全局PATH
装完连不上?先查这三处硬性依赖
不管哪个版本,只要 systemctl start mysqld 报 Failed to start mysqld.service,90% 是以下三个漏了:
-
mariadb-libs冲突:运行rpm -qa | grep mariadb,若有输出,必须先sudo yum remove mariadb-libs -y(加--nodeps强制删) -
libaio缺失:CentOS 默认不装,sudo yum install libaio -y,否则mysqld启动直接 segfault - SELinux 拦截:临时关闭测试
sudo setenforce 0;若确认是它,用sudo semanage fcontext -a -t mysqld_db_t "/opt/mysql57/data(/.*)?"加持久策略
my.cnf 的 [mysqld] 段必须显式写全 basedir、datadir、socket、pid-file,任何一项靠默认值都可能串库或权限错乱。


















