先确认mysql 5.7是否残留或损坏:运行mysql --version和dpkg -l | grep mysql检查版本及混装情况;若systemctl status mysql显示failed但/var/lib/mysql仍存在,说明卸载不干净。需依次执行:sudo systemctl stop mysql、sudo apt purge mysql-server mysql-client mysql-common mysql-server-5.7、sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql、sudo apt autoremove && sudo apt autoclean;再通过官方apt仓库(选5.7、禁8.0)安装mysql-server-5.7,并注意配置bind-address、认证插件及sql_mode兼容性。

确认当前 MySQL 是否为 5.7 版本且已损坏或残留
直接运行 mysql --version 和 dpkg -l | grep mysql,看输出是否含 mysql-server-5.7 或多个版本混装(如 mysql-server-8.0 同时存在)。若 systemctl status mysql 显示 failed 但 /var/lib/mysql 目录仍存在,说明是“卸载不干净”而非单纯重装问题。
彻底清除旧版 MySQL 5.7 及所有配置和数据
Ubuntu 20.04 的 APT 包管理器不会自动删配置文件和数据目录,必须手动干预。执行以下命令顺序不能错:
sudo systemctl stop mysql-
sudo apt purge mysql-server mysql-client mysql-common mysql-server-5.7(注意包含mysql-common,否则/etc/mysql会残留) -
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql(强制删除,避免后续安装报Can't find file: './mysql/plugin.frm') sudo apt autoremove && sudo apt autoclean
特别注意:/var/lib/mysql 是数据根目录,删前务必确认你不需要旧库——它不会被 purge 命令自动清理。
安装官方 MySQL 5.7 APT 仓库并安装
Ubuntu 20.04 默认源只提供 MySQL 8.0,要装 5.7 必须用 MySQL 官方仓库。别用 apt install mysql-server,那只会装 8.0。
- 下载并安装官方 GPG key 和 repo:
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-5.7,取消勾选mysql-8.0,再按OK -
sudo apt update(此时apt list mysql-server*应显示mysql-server-5.7/focal,now) -
sudo apt install mysql-server-5.7(显式指定包名,防止误装 8.0)
安装过程会提示设置 root 密码;若跳过,后续需用 sudo mysql_secure_installation 补上,且首次登录要用 sudo mysql -u root(因默认认证插件是 auth_socket)。
验证安装并检查默认行为差异
MySQL 5.7 在 Ubuntu 20.04 上启动后默认禁用远程访问、启用严格模式、且 root@localhost 使用 auth_socket 插件——这些和 8.0 不同,容易导致应用连接失败。
- 检查监听地址:
sudo ss -tlnp | grep :3306,若只显示127.0.0.1:3306,需改/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address - 确认 root 认证方式:
sudo mysql -e "SELECT user,host,plugin FROM mysql.user;",若 plugin 是auth_socket,远程客户端会连不上,需执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass'; FLUSH PRIVILEGES; - 5.7 默认开启
STRICT_TRANS_TABLES,某些老应用插入零日期('0000-00-00')会报错,可在[mysqld]段加sql_mode = ""临时兼容(不推荐长期关闭)
最关键的遗漏点:很多人删了 /var/lib/mysql 却忘了 /etc/mysql/conf.d/ 下可能有自定义 .cnf 文件,它们会在启动时被加载,干扰新安装的默认配置。











