zoukankan      html  css  js  c++  java
  • linux中不小心将rpm命令卸载了,怎么恢复?

      今天在搭建mysql的集群服务时,安装mysql集群服务前,先卸载原来mysql的软件包,不小心将rpm的命令也给卸载掉了,这下惨了,什么也做不了了。在google了翻了好多个页面,甚至官网也看了,没能解决我的问题,根据本人多年linux的经验以及linux系统的rpm软件包安装特点的敏感,本人想出了以下的方法,请注意:独创!为做集群,这里用到了两台机器,下面是拓扑图:

           xiaolyu77(192.168.31.77rpm命令被卸载的机器)   -----------> 参照   xiaolyu76(192.168.31.76 正常机器) 。

    1. 问题出现:

    [root@xiaolyu77 ~]# rpm -e --nodeps rpm -e mysql-libs-5.1.73-7.el6.x86_64
    [root@xiaolyu77 ~]# rpm -ivh MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64.rpm 
    -bash: /bin/rpm: No such file or directory 

    就是一不小心将rpm的命令用rpm强制给卸载了。可以看到已经不存在rpm命令了。

    2. 检查rpm命令安装在哪里:

     1.故障机器查看rpm命令

    [root@xiaolyu77 ~]# whereis rpm
    rpm: /etc/rpm /usr/lib/rpm

     2. 正常机器查看rpm命令

    [root@xiaolyu76 ~]# whereis rpm
    rpm: /bin/rpm /etc/rpm /usr/lib/rpm /usr/share/man/man8/rpm.8.gz
    [root@xiaolyu76 ~]#

    3. 解决方案

    从2.中可以看到77机器上rpm命令被卸载的,连man手册也没有了,bin下面更是没有。

    思路:想到编译安装的软件的卸载方法是直接将安装路径下的文件直接删掉即可,那么我们可不可以缺什么补什么呢?显然可以啊。反过来不是一样么。

    1. 补全whereis缺少的文件

    [root@xiaolyu76 ~]# scp /bin/rpm  root@xiaolyu77:/bin/

    [root@xiaolyu76 ~]# scp /usr/share/man/man8/rpm.8.gz  root@xiaolyu77:/usr/share/man/man8/

    2. 补全安装目录下缺少的文件

    通过whereis命令我们看到/ur/lib/rpm这个文件或者文件夹,实际上这个就是rpm命令的安装路径。现在比较两台机器下该目录的文件是否一致:

    正常机器/usr/lib/rpm目录下的文件情况:

     

     77机器rpm被卸载的机器:

    显然通过对比发现有一些文件77机器上是没有的,尤其是9个软连接文件:

    1.首先在77机器上创建这些软连接文件

    [root@xiaolyu77 rpm]# ln -s ../../bin/db_deadlock rpmdb_deadlock
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_archive rpmdb_archive
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_load rpmdb_load
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_dump rpmdb_dump
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_upgrade rpmdb_upgrade
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_stat rpmdb_stat
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_recover rpmdb_recover
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_printlog rpmdb_printlog
    [root@xiaolyu77 rpm]# ln -s ../../bin/db_verify rpmdb_verify

    验证一下:

    [root@xiaolyu77 rpm]# rpm

    2.将rpmrc文件从76环境复制过来:

    [root@xiaolyu76 rpm]# scp rpmrc  root@xiaolyu77:/usr/lib/rpm/

    再次检验:发现貌似成功了:

    [root@xiaolyu77 rpm]# rpm

    [root@xiaolyu77 ~]# rpm -qa
    error: no dbpath has been set
    error: cannot open Packages database in /%{_dbpath}
    error: no dbpath has been set
    error: cannot open Packages database in /%{_dbpath}

    3.出现这个问题:我们可以将macros 复制过去:

    [root@xiaolyu76 rpm]# scp  macros  root@xiaolyu77:/usr/lib/rpm/

    4. 执行一下updatedb命令

    [root@xiaolyu77 ~]# updatedb

     

    5. reboot重启一下:ok!来检验一下:

    [root@xiaolyu77 rpm]# rpm -qa | grep rpm

    完美的解决了问题,是为记录一下!

     本文为作者原创博客,转载请务必注明本博客地址:http://www.cnblogs.com/jasmine-Jobs/p/5986600.html

  • 相关阅读:
    5.1 面向对象
    golang面向对象初识
    golang:interface{}类型测试
    golang反射初试
    golang构造函数与转换函数
    使用golang+java实现基于ecb的3eds加解密
    golang处理错误的艺术
    golang的nil
    原生javascript实现计时器
    原生javascript之实战 轮播图
  • 原文地址:https://www.cnblogs.com/jasmine-Jobs/p/5986600.html
Copyright © 2011-2022 走看看