登錄mysqlpxc報錯找不到庫文件libreadline.so.7

一、環境說明:

本博文的演示環境和上篇博文一致
https://blog.51cto.com/wujianwei/2374588

1.1簡述:

基於上篇博文,爲了部署mysqlpxc集羣環境,需要開啓3個vmware虛擬機實例來部署3個mysqlpxc實例。
第一篇博文中在初始化mysqlpxc實例後,登錄實例時,報錯提示:

[root@pxc01 local]# /usr/local/mysqlpxc/bin/mysql -uroot -p
 mysql: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
[root@pxc01 local]# ldd /usr/local/mysqlpxc/bin/mysql
ldd: ./mysql: not regular file
[root@pxc01 local]# ldd /usr/bin/mysql
    linux-vdso.so.1 =>  (0x00007ffd38da9000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f91bc012000)
    libreadline.so.6 => not found

找不到庫文件 libreadline.so.6,出現這樣的問題主要是當時自己在上篇博文的環境中卸載了 readline-6.2-10.el7.x86_64 這個文件導致的找不到 libreadline.so.6 庫文件

[root@pxc01 ~]# rpm -qa|grep readline-6.2-10.el7.x86_64
readline-6.2-10.el7.x86_64
[root@pxc01 ~]# rpm -e --nodeps readline-6.2-10.el7.x86_64 

於是重新安裝 yum install -y readline-devel readline

[root@pxc01 local]# rpm -qa|grep readline*
readline-devel-6.2-10.el7.x86_64
readline-6.2-10.el7.x86_64

到此處第一篇博文找不到libreadline.so.6庫文件的問題才得以解決。

二、解決libreadline.so.7找不到的問題

接下來纔是本博文要重點闡述的問題。
當然此問題的引出還是和上一篇的博文分不開的。

2.1環境簡單說明:

vmware 虛擬機,系統centos7.2,mysqlpxc 版本5.7.24,二進制版本安裝。firewalld 和iptables關閉,selinux關閉。單臺虛擬機安裝單實例mysqlpxc服務。初始化mysqlpxc 和啓動mysqlpxc都是參照上一篇博文https://blog.51cto.com/wujianwei/2374588成功部署。
但是在登錄mysqlpxc實例時,依舊報錯如下:

[root@pxc02 data]# /usr/local/mysqlpxc/bin/mysql -uroot -p
/usr/local/mysqlpxc/bin/mysql: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory
[root@pxc02 mysql3308]# ldd /usr/local/mysqlpxc/bin/mysql|grep 'not found'
    libreadline.so.7 => not found
[root@pxc02 mysql3308]# find / -name 'libreadline.so.7'
[root@pxc02 mysql3308]#
[root@pxc02 mysql3308]# rpm -qa|grep readline*
readline-6.2-9.el7.x86_64

於是換了一種思路來解決此問題。不再採用上篇博文的方式。

2.2 解決過程:

首先嚐試 yum install -y readline-devel readline,本以爲可以解決然而並無卵用,依然報錯

[root@pxc02 mysql3308]# yum install -y readline-devel readline
[root@pxc02 mysql3308]# rpm -qa|grep readline*
readline-devel-6.2-10.el7.x86_64
readline-6.2-10.el7.x86_64
[root@pxc02 mysql3308]#  /usr/local/mysqlpxc/bin/mysql -uroot -p',pL*O3dLkWk)'
/usr/local/mysqlpxc/bin/mysql: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory

[root@pxc02 mysql3308]# ldd /usr/local/mysqlpxc/bin/mysql|grep 'not found'
    libreadline.so.7 => not found

於是換了一種思路,嘗試×××器上存在的libreadline.so 庫文件有哪些?

    [root@pxc02 mysql3308]# find / -name 'libreadline.so*'
/usr/lib64/libreadline.so.6.2
/usr/lib64/libreadline.so
/usr/lib64/libreadline.so.6

[root@pxc02 mysql3308]# ll /usr/lib64/libreadline.so.6
lrwxrwxrwx 1 root root 18 Feb 24 09:33 /usr/lib64/libreadline.so.6 -> libreadline.so.6.2
[root@pxc02 mysql3308]# ll /usr/lib64/libreadline.so.6.2
-rwxr-xr-x 1 root root 285240 Aug  2  2017 /usr/lib64/libreadline.so.6.2

發現源文件是libreadline.so.6.2 ,而libreadline.so.6 這個文件爲源文件libreadline.so.6.2創建的軟連接

根據下面的庫文件的指向,斷定後面的文件應該都是源庫文件的軟連接,而libreadline.so.7 => not found 提示找不到軟連接文件的位置,於是猜測要是根據原庫文件把這個找不到的軟連接文件創建出來,會是一個什麼樣的效果呢??

[root@pxc02 mysql3308]#  ldd /usr/local/mysqlpxc/bin/mysql
    linux-vdso.so.1 =>  (0x00007ffc45bdf000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6e54cf4000)
    libreadline.so.7 => not found
    libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f6e54acc000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f6e548a2000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f6e5468c000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f6e54483000)
    libatomic.so.1 => /lib64/libatomic.so.1 (0x00007f6e5427b000)
    libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f6e5400d000)
    libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f6e53b89000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f6e53985000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6e53603000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f6e53300000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6e530ea000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6e52d29000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6e554ff000)

於是根據源庫文件libreadline.so.6.2 把libreadline.so.7要找的軟連接文件創建出來


    [root@pxc02 mysql3308]# ln -sv /usr/lib64/libreadline.so.6.2 /usr/lib64/libreadline.so.7
/usr/lib64/libreadline.so.7 -> /usr/lib64/libreadline.so.6.2

    [root@pxc02 mysql3308]# ll /usr/lib64/libreadline.so.7
lrwxrwxrwx 1 root root 29 Feb 24 09:46 /usr/lib64/libreadline.so.7 -> /usr/lib64/libreadline.so.6.2
[root@pxc02 mysql3308]# find / -name 'libreadline.so*'
/usr/lib64/libreadline.so.7
/usr/lib64/libreadline.so.6.2
/usr/lib64/libreadline.so
/usr/lib64/libreadline.so.6

檢測如下:發現不在報錯,問題解決。

[root@pxc02 mysql3308]# ldd /usr/local/mysqlpxc/bin/mysql 
    linux-vdso.so.1 =>  (0x00007fffbeb64000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9cef24a000)
    libreadline.so.7 => /lib64/libreadline.so.7 (0x00007f9cef004000)
    libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f9ceeddc000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f9ceebb2000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f9cee99c000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f9cee793000)
    libatomic.so.1 => /lib64/libatomic.so.1 (0x00007f9cee58b000)
    libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f9cee31d000)
    libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f9cede99000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f9cedc95000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f9ced913000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f9ced610000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9ced3fa000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f9ced039000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9cefa55000)
[root@pxc02 mysql3308]#  /usr/local/mysqlpxc/bin/mysql -uroot -p',pL*O3dLkWk)'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
[root@pxc02 mysql3308]# ldd /usr/local/mysqlpxc/bin/mysql 

總結:發現解決此問題簡單了不少。遇到問題一定要先看下報錯,做下簡單的分析,不要盲目的直接google和百度。要有針對性的解決問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章