MySQL启动/升级报错: /lib64/libc.so.6: version `GLIBC_2.14‘ not found

一、问题背景

在做 MySQL 从库升级到5.7.19( 升级方案为先升级从库,然后主从切换,再观察,无异常后升级其他slave)的时候,使用5.7.19软件启动MySQL报错:

/lib64/libc.so.6: version `GLIBC_2.14' not found



二、问题分析

查看当前的glib版本。

PRD [mysql@mytest]$ ldd --version
ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
PRD [mysql@mytest]$ lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.9 (Final)
Release:        6.9
Codename:       Final

可以看到glibc版本为2.12,确实低于报错提示的2.14版本。说明操作系统的glibc版本低了。或者说使用的MySQL5.7.19软件依赖的glibc版本高了,并未和操作系统适配。

要解决这个问题,要么升级glibc版本,要么重新下载MySQL5.7.19源码包进行编译。

关于升级glibc版本:这台服务器存在多个MySQL实例,如果升级glib版本,则会影响到其他实例,影响过大。

关于重新下载MySQL5.7.19源码包编译:影响小,推荐。



三、问题处理

1. 下载软件并上传

https://downloads.mysql.com/archives/community/

Compressed TAR Archive, Includes Boost Headers
(mysql-boost-5.7.19.tar.gz) MD5: 0c6253782f16ab3394bb755f4d570758

2. 源码编译

 2.1. 验证下载的软件是否完整

PRD [mysql@mytest]$ md5sum mysql-boost-5.7.19.tar.gz | grep 0c6253782f16ab3394bb755f4d570758 
0c6253782f16ab3394bb755f4d570758  mysql-boost-5.7.19.tar.gz

 2.2. 挪走原软件包

PRD [mysql@mytest]$ cd /mysql/rdbms/5.7.19
PRD [mysql@mytest]$ mv 5.7.19 5.7.19_bak

 2.3. 解压源码包

PRD [mysql@mytest]$ tar zxvf mysql-boost-5.7.19.tar.gz

 2.4. 编译

PRD [mysql@mytest]$ cd mysql-5.7.19
PRD [mysql@mytest]$ cmake \
-DCMAKE_INSTALL_PREFIX=/mysql/rdbms/5.7.19 \
-DWITH_EDITLINE=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=./boost/boost_1_59_0 \
-DDOWNLOAD_BOOST_TIMEOUT=60000

 2.5. 编译安装

PRD [mysql@mytest]$ make -j 24
PRD [mysql@mytest]$ make install

3. 使用5.7.19软件启动数据库

PRD [mysql@mytest]$ mysql_start
Starting MySQL...                                          [  OK  ]

4. 升级MySQL

PRD [mysql@mytest]$ /mysql/rdbms/5.7.19/bin/mysql_upgrade -uroot -p$PWD -S"$socket"
mysql_upgrade: [Warning] Using a password on the command line interface can be insecure.
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
。。。。。。略。。。。。。
Upgrade process completed successfully.
Checking if update is needed.

5. 重启MySQL

略。。

6. 确认5.6.21到5.7.19同步正常

PRD [mysql@mytest]$ mysql -e "show slave status\G"
PRD [mysql@mytest]$ mysql -e "show slave status\G"
PRD [mysql@mytest]$ mysql -e "show slave status\G"

7. 沟通窗口,发起主从切换

。。。略

一周后若无异常,则升级5.6.21的从节点。
至此,MySQL升级完成。



四、事后复盘

其实这个问题比较简单,就是glibc版本的问题。但是处理方案分为两种:

第一种升级glibc版本,这种方案可以说是和解决报错最直接的。但是操作复杂,覆盖面广,不太合适。而且个人认为,这只是找到了问题的直接原因,并没有找到其根本原因

第二种重新安装MySQL软件,这种方案就可能稍微绕了一点,因为我们不仅仅需要考虑到报错,而且需要想到为什么会报错,找到根本原因来解决。
如果我们多了解源码安装依赖的东西,多看看下载页面的选项和包种类。就能发现,MySQL软件的下载是很依赖于glibc包的,下载页面一般都有glibc2.12和glibc2.17两种最常见的包。很明显之前使用的软件是用的glibc2.17的包,或者说是在glibc2.17环境下源码编译出来的。

##新编译的软件
PRD [mysql@mytest]$ strings /mysql/rdbms/5.7.19/bin/mysqld | grep GLIBC | sort
GLIBC_2.10
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBCXX_3.4
GLIBCXX_3.4.11
GLIBCXX_3.4.9

##老软件
PRD [mysql@mytest]$ strings /mysql/rdbms/5.7.19_bak/bin/mysqld | grep GLIBC | sort
GLIBC_2.10
GLIBC_2.14
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBCXX_3.4
GLIBCXX_3.4.11
GLIBCXX_3.4.15
GLIBCXX_3.4.9

从mysqld文件我们可以看到,新编译的软件最高依赖到GLIBC_2.10,老软件需要最高依赖到GLIBC_2.14

后续,需要检查所有MySQL服务器上的MySQL软件,确认都使用到了正确的glibc版本的MySQL软件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值