发布于2026-05-22 阅读(0)
扫一扫,手机访问
如果你正在Ubuntu 22.04或更新的24.04系统上,试图通过apt install mysql-server-5.7来安装MySQL 5.7,那么结果几乎是注定的:失败。这并非你的配置有误,而是因为官方仓库已经彻底移除了这个版本。

从Ubuntu 22.04开始,MySQL 8.0被设定为唯一的默认版本。以往用来切换版本的mysql-apt-config工具,在新系统上也已失效——即便你选择了5.7,它也会静默地回退到8.0。即便你手动添加旧版软件源,或者下载旧版的mysql-apt-config_0.8.12-1_all.deb配置包,在执行apt update后,用apt-cache policy mysql-server命令查看,候选列表里依然只会出现8.0。
根本原因在于,MySQL官方已经停止为Ubuntu 22.04及之后的版本提供APT仓库支持。你可以通过一个简单的命令验证:curl -I https://repo.mysql.com/apt/ubuntu/dists/jammy/(针对22.04),返回的将是404状态码,意味着对应的目录根本不存在。
因此,可行的替代方案只剩下两种:手动安装deb包,或者使用二进制tar.gz包安装。前者更接近我们熟悉的传统安装流程,而后者则提供了更高的可控性,但需要自行配置环境变量。
从mysql-server_5.7.40-1ubuntu18.04_amd64.deb-bundle.tar这样的捆绑包中解压出的deb文件,存在严格的依赖顺序。跳过或颠倒顺序执行,dpkg命令就会报出“unresolved dependency”的错误,导致后续的包无法正确配置。
正确的安装顺序是线性的:
mysql-common_5.7.40-1ubuntu18.04_amd64.deblibmysqlclient20_5.7.40-1ubuntu18.04_amd64.deb(这一步很关键,新版Ubuntu默认缺少这个库,不安装它,后续的mysql-community-server安装会在postinst配置阶段卡住)mysql-community-server_5.7.40-1ubuntu18.04_amd64.deb(这才是真正启动MySQL服务的核心包)在安装之前,还需要确保系统依赖已经就位。执行以下命令安装必要依赖:
sudo apt install libaio1t64 libtinfo6 libncurses6 libmecab2 -y
这里有两个细节需要注意:对于Ubuntu 24.04,需要用libaio1t64替代旧版的libaio1;同时,libtinfo5已被libtinfo6取代,因此必须手动创建一个软链接来兼容:
sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
MySQL 5.7在Ubuntu 22.04+系统上首次启动时,其默认的身份验证插件仍可能被设置为caching_sha2_password(尤其是如果你的系统之前安装过MySQL 8.0),这会导致许多老版本的客户端工具连接时报错:“Client does not support authentication protocol”。
最稳妥的办法是防患于未然,不要在安装完成后再去修改。建议在首次配置mysql-community-server包(即运行dpkg -i后会触发的mysql_install_db过程)之前,就创建一个临时配置文件来锁定插件类型:
sudo mkdir -p /etc/mysql/conf.d
然后在该目录下创建一个配置文件(例如default_auth.cnf),并写入以下内容:
[mysqld]
default_authentication_plugin = mysql_native_password
如果已经安装完毕并遇到了连接问题,可以尝试跳过密码验证启动MySQL:
sudo mysqld_safe --skip-grant-tables &
然后使用mysql -u root无密码连接,执行SQL修改root用户的插件:
UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
需要特别警惕的是,在此场景下,不要运行mysql_secure_installation这个安全初始化脚本,因为它会强制将身份验证插件重置为caching_sha2_password,让你的努力前功尽弃。
很多朋友在配置远程连接时,以为在my.cnf里设置bind-address = 0.0.0.0就万事大吉了。这确实解决了服务监听所有IP地址的问题,但在Ubuntu 22.04+上,还有两道“关卡”需要突破。
首先,是系统自带的ufw防火墙。默认情况下,它可能会阻止3306端口的传入连接。记得放行:
sudo ufw allow 3306
其次,是MySQL自身的用户权限。MySQL 5.7安装后,user表中root用户的host字段默认是localhost,这意味着它只允许本地连接。你需要创建一个允许从任何主机连接的root用户(或修改现有用户),命令如下:
CREATE USER 'root'@'%' IDENTIFIED BY 'your_pass';
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
请注意,直接修改现有root@localhost用户的host字段可能并不总是有效,显式创建一个root@‘%’用户是更可靠的做法。修改权限后,务必执行:
FLUSH PRIVILEGES;
最后,验证服务是否在正确监听。执行ss -tlnp | grep :3306,输出中应该看到*:3306,而不是127.0.0.1:3306。
还有一个极其容易被忽略的坑:Ubuntu 22.04+的systemd对MySQL服务单元文件有严格的路径锁定。如果你通过手动安装deb或二进制包的方式安装了5.7,但没有正确注册或更新service文件,那么systemctl start mysql命令可能会静默失败。这时,你需要检查/lib/systemd/system/mysql.service这个文件,确保其中ExecStart指向的mysqld路径是你实际安装的5.7路径,而不是系统里可能残留的MySQL 8.0的路径。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9