升级glibc到2.28版本
安装二进制包 mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz
初始化时报错:
[root@s2 yum.repos.d]# /soft/mysql/bin/mysqld --defaults-file=/data/mysql/my8039.cnf --initialize --user=mysql --initialize-insecure
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /soft/mysql/bin/mysqld)
/soft/mysql/bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by /soft/mysql/bin/../lib/private/libcrypto.so.3)
/soft/mysql/bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /soft/mysql/bin/../lib/private/libprotobuf-lite.so.3.19.4)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /soft/mysql/bin/../lib/private/libprotobuf-lite.so.3.19.4)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /soft/mysql/bin/../lib/private/libprotobuf-lite.so.3.19.4)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /soft/mysql/bin/../lib/private/libprotobuf-lite.so.3.19.4)
/soft/mysql/bin/mysqld: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /soft/mysql/bin/../lib/private/libprotobuf-lite.so.3.19.4)
glibc版本较低导致,从错误来看至少需要2.28的版本
查看glibc版本
ldd --version
# 安装依赖包
yum install -y wget gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel bison bison-devel zlib-devel bzip2
yum install -y libcurl-devel libarchive-devel boost-devel gnutls-devel libxml2-devel libevent-devel perl-Data-Dumper libtirpc-devel
yum install -y python3
yum install -y nss-devel
# 升级 make
wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz -P /usr/local/src
cd /usr/local/src
tar -xzvf make-4.3.tar.gz
cd make-4.3/
./configure --prefix=/usr/local/make
make
make install
mv /usr/bin/make /usr/bin/make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make
make --version
# 下载mpfr、gmp、mpc等依赖包
wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz -P /usr/local/src
wget ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2 -P /usr/local/src
wget http://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.gz -P /usr/local/src
wget http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.gz -P /usr/local/src
cd /usr/local/src
tar -zxvf mpc-1.1.0.tar.gz
tar -zxvf mpfr-4.0.2.tar.gz
tar -jxvf gmp-6.1.2.tar.bz2
tar -zxvf m4-1.4.18.tar.gz
tar -zxvf gcc-9.2.0.tar.gz
mkdir -p /usr/local/m4-1.4.18
mkdir -p /usr/local/gmp-6.1.2
mkdir -p /usr/local/mpfr-4.0.2
mkdir -p /usr/local/mpc-1.1.0
mkdir -p /usr/local/gcc-9.2.0
cd /usr/local/src/m4-1.4.18
./configure --prefix=/usr/local/m4-1.4.18
make && make install
mv /usr/bin/m4 /usr/bin/m4.bak
ln -s /usr/local/m4-1.4.18/bin/m4 /usr/bin/m4
cd /usr/local/src/gmp-6.1.2
./configure --prefix=/usr/local/gmp-6.1.2
make && make install
cd /usr/local/src/mpfr-4.0.2
./configure --prefix=/usr/local/mpfr-4.0.2/ --with-gmp=/usr/local/gmp-6.1.2/
make && make install
cd /usr/local/src/mpc-1.1.0
./configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2/ --with-mpfr=/usr/local/mpfr-4.0.2/
make && make install
# 编译安装 gcc
wget http://mirror.hust.edu.cn/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz -P /usr/local/src/
cd /usr/local/src/
tar zxvf gcc-8.5.0.tar.gz
cd gcc-8.5.0
mkdir build && cd build
../configure --prefix=/usr/ \
--with-gmp=/usr/local/gmp-6.1.2/ \
--with-mpfr=/usr/local/mpfr-4.0.2/ \
--with-mpc=/usr/local/mpc-1.1.0 \
--disable-multilib
make -j4 && make install
查看gcc版本
gcc --version
注意了,上面那个 prefix 必须用 /usr/,以便覆盖掉旧版的 gcc ,以免编译程序找不到新版 gcc
#编译安装glibc
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz -P /usr/local/src/
cd /usr/local/src/
tar -xvf glibc-2.28.tar.gz
cd glibc-2.28
mkdir -p build
cd build/
../configure --prefix=/usr --with-headers=/usr/include --with-binutils=/usr/bin
make -j 4
make install
如果报错如下,这是因为在新版本中,不再使用lnss_test2库,已经被删除了,这个是在教旧的版本中使用的,忽略即可:
LD_SO=ld-linux-x86-64.so.2 CC="gcc -B/usr/bin/" /usr/bin/perl scripts/test-installation.pl /usr/local/src/glibc-2.28/build/
/usr/bin/ld: cannot find -lnss_test2
collect2: error: ld returned 1 exit status
Execution of gcc -B/usr/bin/ failed!
The script has found some problems with your installation!
Please read the FAQ and the README file and check the following:
- Did you change the gcc specs file (necessary after upgrading from
Linux libc5)?
- Are there any symbolic links of the form libXXX.so to old libraries?
Links like libm.so -> libm.so.5 (where libm.so.5 is an old library) are wrong,
libm.so should point to the newly installed glibc file - and there should be
only one such link (check e.g. /lib and /usr/lib)
fixed all problems!
Btw. the script doesn't work if you're installing GNU libc not as your
primary library!
make[1]: *** [Makefile:111: install] Error 1
make[1]: Leaving directory '/usr/local/src/glibc-2.28'
make: *** [Makefile:12: install] Error 2
#查看glibc版本
ldd --version