错误:2 http://repo.mysql.com/apt/ubuntu jammy InRelease
下列签名无效: EXPKEYSIG B7B3B788A8D3785C MySQL Release Engineering <mysql-build@oss.oracle.com>这个错误 `EXPKEYSIG B7B3B788A8D3785C` 的核心原因很明确:MySQL 用于签名仓库的 GPG 密钥过期了。这是一个近期的普遍问题,不只是你一个人遇到。
根据 MySQL 官方的 Bug 报告,问题的关键信息如下:
过期密钥:`B7B3B788A8D3785C` 这个密钥的有效期到 2025年10月22日。
根本原因:你的本地系统还在使用这个已过期的旧密钥来验证 MySQL 仓库,导致验证失败。
官方状态:MySQL 已经更新了同一个密钥的过期日期,将其延长到了 2027年10月23日。所以,我们无需更换新密钥,只需要更新本地这个旧密钥的有效期就行。
解决方案:更新 MySQL GPG 密钥的有效期
这里有三种方法,我推荐你先尝试 方法一,它是最直接且成功率最高的。
在操作前,可以先用命令 `apt-key list` 查看一下现有的 MySQL 相关密钥,这会有助于你理解我们正在操作的对象。如果方法一无效,再按顺序尝试后面的方法。
方法一:从 Ubuntu 密钥服务器更新密钥 (最推荐)
这个方法直接去官方密钥服务器获取密钥的最新信息(包括新的过期日期)。
1. 从密钥服务器接收密钥更新
打开终端,执行以下命令,强制 `gpg` 从 Ubuntu 的密钥服务器获取指定密钥的所有最新信息:
bash
sudo gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C
2. 导出密钥到 MySQL 仓库指定的位置
当本地密钥环中的信息更新后,我们需要把它导出并覆盖 MySQL 仓库实际使用的密钥文件。通常是 `/usr/share/keyrings/mysql-archive-keyring.gpg`。
bash
sudo gpg --export B7B3B788A8D3785C | sudo tee /usr/share/keyrings/mysql-archive-keyring.gpg /dev/null
3. (备用位置) 如果你的配置使用另一个密钥文件
部分系统可能使用的是 `/usr/share/keyrings/mysql-apt-config.gpg`。如果你不确定,可以安全地在两个位置都执行一遍覆盖操作:
bash
sudo gpg --export B7B3B788A8D3785C | sudo tee /usr/share/keyrings/mysql-apt-config.gpg /dev/null
4. 最后,验证修复
执行 `sudo apt update`,如果不再看到 `EXPKEYSIG` 错误,就说明修复成功了。
方法二:直接下载并安装最新的 `mysql-apt-config` 软件包
这个方法更“暴力”一些,即直接从 MySQL 官网下载并安装包含了新密钥的仓库配置包。它会自动覆盖旧的配置和密钥。
1. 下载最新的配置包
bash
wget https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
2. 安装下载好的软件包
bash
sudo dpkg -i mysql-apt-config_0.8.35-1_all.deb
3. 更新软件源列表
bash
sudo apt update
这个新软件包里已经包含了更新过有效期的新密钥,安装后问题应该就解决了。
方法三:手动下载并导入更新后的密钥文件
如果以上两种方法都失败了,可以直接从 MySQL 官网下载并导入密钥。
1. 下载新的密钥文件
bash
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB7B3B788A8D3785C" -o /tmp/fresh.asc
2. 导入密钥到本地
bash
sudo gpg --import /tmp/fresh.asc
3. 将密钥导出到仓库配置目录
再次执行导出命令,覆盖旧的密钥文件(与方法一的步骤2/3相同):
bash
sudo gpg --export B7B3B788A8D3785C | sudo tee /usr/share/keyrings/mysql-archive-keyring.gpg /dev/null
4. 最后,再次运行 `sudo apt update` 验证。
评论