由于要使用xtrabackup进行mysql的物理备份,在使用过程中报错:version `GLIBCXX_3.4.15' not found (required by ./xtrabackup)。该错误的原因是当前的GCC版本中,没有GLIBCXX_3.4.15,需要安装更高版本。于是,先查看当前系统中到底有没有GLIBCXX_3.4.15。

      strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX       

经过查看确实没有。

这种情况有两种解决办法:一是更新gcc动态库文件libstdc++.so.6,二是升级gcc。

方法一:更新libstdc++.so.6

于是去下载。下载地址:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb

下载到/usr/local/src中。然后解压   ar -x libstdc++6_4.7.2-5_amd64.deb && tar xvf data.tar.gz

解压后会出现usr目录

cd usr/lib/x86_64-linux-gnu/

cp libstdc++.so.6.0.17 /usr/lib64

cd /usr/lib64

rm libstdc++.so.6

ln libstdc++.so.6.0.17  libstdc++.so.6

至此,已升级完成。可以再次查看是否有GLIBCXX_3.4.15了。


方法二:升级gcc

1.下载源码包

wget http: //ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2

tar -jxvf  gcc-4.8.0.tar.bz2

2.下载编译所需依赖库

cd gcc-4.8.0

./contrib/download_prerequisites

cd ..

3.建立编译输出目录

mkdir gcc-build-4.8.0

4.进入此目录,执行以下命令,生成makefile文件

cd  gcc-build-4.8.0

../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

5.编译

# j 后面的是核心数,编译速度会比较快

make -j4

6.安装

make install

7.切换GCC到新版 确定新安装的GCC的路径,一般默认在/usr/local/bin下。可以先updatedb,然后locate gcc-4.8|tail找一下

ls /usr/local/bin | grep gcc

添加新GCC到可选项,倒数第三个是名字,倒数第二个参数为新GCC路径,最后一个参数40为优先级,设大一些之后就自动使用新版了

update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40 

8.确认当前版本已经切换为新版(重新连接shell生效).

gcc -v

如果此时还是没有GLIBCXX_3.4.15。这是因为虽然升级了GCC,生成的动态库没有替换老版本gcc的动态库。

解决方法:

cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64/
rm -f libstdc++.so.6
ln -s libstdc++.so.6.0.18 libstdc++.so.6