背景
有台ubuntu16的机器升级了,然后mysql一直提示要升级,结果升级出了问题,而且导致所有apt安装都报错apt-get --fix-broken install
,然后运行apt-get --fix-broken install
又报错没办法把当前运行的mysql关掉之类的,通过systemctl stop mysql
,而且查看进程已经没有mysql
了,仍然这样。
调整ubuntu源
尝试自动修复
sudo apt-get install -f
失败后清理mysql相关软件包
sudo apt-get purge mysql-community-server mysql-community-server
尝试清理并更新
sudo apt-get autoclean && sudo apt-get clean && sudo apt-get update
结果报错,大致原因是redis deb有问题
一开始以为是ubuntu镜像源有问题,但是换成国内镜像仍然报错,然后想到其实这台机器是直接源码安装的redis,因此直接将/etc/apt/sources.list.d/redis*
删除(自行操作时最好先移动到别的文件夹)
继续执行以下命令未报错
sudo apt-get autoclean && sudo apt-get clean && sudo apt-get update
但在执行sudo apt-get autoremove
的时候报错了
删除原来的升级记录,取消升级
关于如何将原来的升级记录以及安装包删除,以及出错问题修改,主要包括了
- 修改
/var/lib/dpkg/info
中的脚本,注释掉所有操作。比如,按照报错信息,我的提示是在pre_install阶段出错的,所以就把该文件夹下所有mysql开头prerm结尾的脚本全部注释掉,但对我来说没用 - 修改
/var/lib/dpkg/status
文件,这个文件包含了通过apt安装的软件信息,把mysql相关的都删掉,这个确实有用,但要注意是删掉包含mysql的软件包 - 执行
apt-get autoremove
,未报错 - 再执行别的
apt install
也未报错
至于mysql,就没有再升级了
ubuntu换成清华源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
#注释掉原本的,换成
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
具体见help文档https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
ubuntu配置redis源
sudo apt install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
参考https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/