暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

动态库libstdc++.so.6及libc.so.6版本过低导致MySQL无法安装

数据库干货铺 2022-07-11
3418
点击上方蓝字关注我

最近安装新版本MySQL(Percona Server)时发现所依赖的libstdc++.so.6、libc.so.6均较高(尤其在Centos 6版本上安装时),导致无法完成数据库安装。

因Percona官方文档也有说明5.7.31版本后不再是OpenSSL库方式的二进制包了。

升级动态库并安装新版本MySQL的案例如下文所示。

1、初始化报错

安装Percona Server 5.7.38-41,进行初始化,将出现如下报错信息:

    [root@c6 mysql5.7]# bin/mysqld --defaults-file=/data/mysql/mysql3306/etc/my.cnf  --initialize --user=mysql 
    bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
    复制

    此报错直接安装numactl即可解决。

      yum install -y numactl
      复制

      再次初始化时,报错信息如下:

        bin/mysqld: usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by bin/mysqld)
        bin/mysqld: lib64/libc.so.6: version `GLIBC_2.16' not found (required by bin/mysqld)
        bin/mysqld: lib64/libc.so.6: version `GLIBC_2.14' not found (required by bin/mysqld)
        bin/mysqld: lib64/libc.so.6: version `GLIBC_2.14' not found (required by usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libssl.so)
        bin/mysqld: lib64/libc.so.6: version `GLIBC_2.17' not found (required by usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libssl.so)
        bin/mysqld: lib64/libc.so.6: version `GLIBC_2.14' not found (required by usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libcrypto.so)
        bin/mysqld: lib64/libc.so.6: version `GLIBC_2.17' not found (required by usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libcrypto.so)
        复制

        提示找不到对应的依赖包GLIBCXX_3.4.15以及 GLIBC_2.14 - GLIBC_2.18

        查看系统对应的版本为Centos6.9)GLIBCXX_3.4.13以及 GLIBC_2.12,(Centos7.6 GLIBCXX_3.4.15以及 GLIBC_2.17) 因此需安装对应依赖包,其对应的动态库分别为: 

          GLIBCXX_3.4.15 -->libstdc++.so.6
          GLIBC_2.18 -->libc.so.6
          复制

          2.  升级libstdc++.so.6

          下载libstdc++6包

            wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.9/libstdc++6_4.9.2-10+deb8u1_amd64.deb
            复制

            进行安装

              ar -x libstdc++6_4.9.2-10+deb8u1_amd64.deb
              xz -d data.tar.xz
              tar -xvf data.tar


              cp libstdc++.so.6.0.20
              sln libstdc++.so.6.0.20 usr/lib64/libstdc++.so.6
              chmod +x libstdc++.so.6.0.20
              sln libstdc++.so.6.0.20 libstdc++.so.6
              复制

              此时再查看对应版本已升级完毕:

                strings /usr/lib64/libstdc++.so.6|grep GLIBC
                GLIBCXX_3.4
                GLIBCXX_3.4.1
                GLIBCXX_3.4.2
                GLIBCXX_3.4.3
                GLIBCXX_3.4.4
                GLIBCXX_3.4.5
                GLIBCXX_3.4.6
                GLIBCXX_3.4.7
                GLIBCXX_3.4.8
                GLIBCXX_3.4.9
                GLIBCXX_3.4.10
                GLIBCXX_3.4.11
                GLIBCXX_3.4.12
                GLIBCXX_3.4.13
                GLIBCXX_3.4.14
                GLIBCXX_3.4.15
                GLIBCXX_3.4.16
                GLIBCXX_3.4.17
                GLIBCXX_3.4.18
                GLIBCXX_3.4.19
                GLIBCXX_3.4.20
                GLIBC_2.3
                GLIBC_2.2.5
                GLIBC_2.14
                GLIBC_2.18
                GLIBC_2.17
                GLIBC_2.3.2
                GLIBCXX_DEBUG_MESSAGE_LENGTH
                复制

                3.  升级libc.so.6

                本次仅升级到GLIBC_2.18,满足当前要求即可。

                下载源码包(rpm也可,本次通过源码包编译安装)

                  wget  http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
                  复制

                  编译安装:

                    tar -zxvf glibc-2.18.tar.gz
                    cd glibc/
                    mkdir build
                    cd build
                    ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
                    make && make install  # make的时间较长
                    复制

                    编译安装完成后执行如下命令

                      strings /lib64/libc.so.6 |grep GLIBC
                      复制

                      如安装过程出现如下错误,则需提前安装gcc-c++包,yum直接安装即可

                      如果configure过程中出现如下错误

                        * LD_LIBRARY_PATH shouldn’t contain the current directory when
                        * building glibc. Please change theenvironment variable
                        and run configure again.
                        复制

                        则直接在当前会话窗口将 LD_LIBRARY_PATH 置为空后再次运行即可

                          LD_LIBRARY_PATH=''
                          复制

                          3. 脱坑提示

                          不要直接编译到其他路径后通过软连接的形式升级libc.so.6,否则可能导致所有很多命令无法运行,例如执行ll 命令(其他命令也一样)时出现如下错误

                            ls: relocation error: /usr/local/glibc-2.18/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
                            id: relocation error: /usr/local/glibc-2.18/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference


                            复制

                            也会出现缺少其他动态库的情况。

                            恢复方案:

                              千万不要关闭当前会话!!!
                              通过export LD_PRELOAD= 修复修改已调整的库
                              执行 ldconfig (通常能恢复),如不行,则继续下一步
                              复制

                              其他的坑可能也有,大家遇到了可以相互交流。


                              往期精彩回顾

                              1.  MySQL高可用之MHA集群部署

                              2.  mysql8.0新增用户及加密规则修改的那些事

                              3.  比hive快10倍的大数据查询利器-- presto

                              4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

                              5.  PostgreSQL主从复制--物理复制

                              6.  MySQL传统点位复制在线转为GTID模式复制

                              7.  MySQL敏感数据加密及解密

                              8.  MySQL数据备份及还原(一)

                              9.  MySQL数据备份及还原(二)

                              扫码关注     






                              文章转载自数据库干货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论