文章内容较长,请参考目录进行操作。
目录
1、检测系统是否自带mysql
2、下载MySQL
3、安装MySQL
4、环境变量配置
5、下载/升级依赖
1)定位问题
2)解决问题
gcc版本过低:
使用devtoolset来升级gcc版本
1)安装 centos-release-scl
2)安装 devtoolset
3)激活
注意
可能报错:
解决办法:
手动编译
下载安装包:
安装 isl:
编译安装gcc
安装并编译gcc:
编译过程中可能报错:
collect2: ld terminated with signal 9
gcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory
没有替换老版本gcc动态库:
6、启动mysql
1、检测系统是否自带mysql
rpm -qa | grep mysql #检查是否安装过MySQL
rpm -qa | grep mariadb #检查是否存在 mariadb 数据库(内置的MySQL数据库),有则强制删除
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 #强制删除
rpm -e --nodeps mariadb-5.5.68-1.el7.x86_64 #强制删除
若在删除时提示“mariadb-xxx is not installed”那极为可能是你输入的有误,在Xshell中我们可以鼠标选中查出的信息,右键-复制,再粘贴到你输入的位置即可(一定要右键再选择复制和粘贴,不可以直接使用ctrl+快捷键)
2、下载MySQL
我的项目用的版本是mysql8.0的版本,因此只找了8.0的下载链接,不过5.7的安装步骤之类也是一致的,这个不用担心。无非是下载时选择的版本不同
社区版下载链接:MySQL :: Download MySQL Community Server
进入之后就可以选择下载8.0还是5.7了,不同版本的安装步骤只有这一步不同。
选择要下载的系统
也可以更细致一些,选择适合自己的系统内核
最后,不论上面选择的是哪些选项,都要认准这个下载选项。
(偷摸摸说一句,使用迅雷下载的话速度比官网快很多)
3、安装MySQL
下载完安装包后,就可以使用XFTP上传到服务器上了(建议将软件都安装在/usr/local目录下)
解压命令“tar -zxvf mysql-xxx”
解压完毕后重命名,和安装jdk的过程很类似
不同的是,云服务器安装mysql缺少依赖,可执行“yum -y install numactl”下载相应依赖包
安装常用软件工具命令“yum -y install vim net-tools lrzsz gcc gcc-c++1”
4、环境变量配置
安装完成后就可以开始配置环境变量了
使用命令进入 /etc/profile 目录,配置环境变量
在刚刚配置的jdk的配置文件后,再加一段“export PATH=$PATH:/usr/local/mysql/bin”
ESC-“:wq”退出保存
再次使用命令“source /etc/profile”更新配置
5、下载/升级依赖
初始化mysql时,输入命令“mysqld --initialize --user mysql”进行数据库初始化,而此时会报错“error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory”
这个问题产生原因是因为服务器刚开始什么环境和配置都没有,需要下载依赖。
输入命令“yum install -y libaio”下载依赖即可
下载完成后再次执行初始化命令,此时会报错一大堆
产生这个问题的原因有两种:
- gcc版本过低
- 升级gcc时生成的动态库没有替换老版本gcc的动态库,将gcc最新版本的动态库替换系统中老版本的动态库即可解决
1)定位问题
如何确定自己属于哪一类呢?
通过 strings /usr/lib64/libstdc++.so.6 | grep GLIBC 命令检查动态库
由图上可知,我的gcc的动态库还是旧版本GLIBCXX_3.4.19的
查找编译gcc时生成的最新动态库:find / -name "libstdc++.so*"
/usr/lib64是gcc当前的动态库路径,可以看到该动态库已经是最新的gcc版本动态库了。
因此,问题就属于gcc版本过低。
若在查找最新动态库时发现有更新版本的gcc,那就属于没有替换的问题。
2)解决问题
gcc版本过低:
使用devtoolset来升级gcc版本
1)安装 centos-release-scl
yum install centos-release-scl
2)安装 devtoolset
命令中的9 代表gcc版本,一般安装高版本后低版本的gcc都会自动安装,选择自己适合的版本就可以。
//安装gcc 9 的版本
yum -y install devtoolset-9-gcc*
//安装gcc 7 的版本
yum -y install devtoolset-7-gcc*
3)激活
//激活gcc 9
scl enable devtoolset-9 bash
//激活gcc 7
scl enable devtoolset-7 bash
注意
1.升级完成后一定要运行:gcc --version 看一下版本号变成升级后的gcc版本才算升级成功。
2.scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用的话执行:echo "source /opt/rh/devtoolset-7/enable" >>/etc/profilegcc版本9 执行:echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
gcc版本9 执行:echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
3.升级过gcc后还要进行替换老版本gcc动态库的操作
可能报错:
原因在于系统upgrade的时候,残存了上一个版本的软件包信息(比如升级到了attr-2.4.44,但系统中存在了之前缓存的软件包信息)
解决办法:
1).配置正确的yum源
yum install epel-release
2).执行相关命令
yum clean all ##清除本地yum缓存
yum distro-sync ##同步本地软件和epel源的软件包信息
至此问题基本解决
手动编译
下载安装包:
原地址:Index of /gnu/gcc
国内使用:Index of /gnu/gcc/
终端内操作
wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -zcvf gcc-9.1.0.tar.gz
不要直接编译安装的,先检查一下依赖有没有装好。
cd gcc-9.1.0
./contrib/download_prerequisites
因为我这里都安装了,所以显示成功
若检查过程中发现有缺少相应的依赖,则使用对应的命令进行下载。
yum install gmp-devel
yum install mpfr-devel
yum install libmpc-devel
安装 isl:
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2
tar -jxvf isl-0.18.tar.bz2
cd isl-0.18
./configure
make
make install
安装完成后再次检查:
./contrib/download_prerequisites
编译安装gcc
安装开发环境依赖:
yum groupinstall "Development Tools"
yum install glibc-static libstdc++-static
安装并编译gcc:
cd gcc-9.1.0
mkdir gcc-build-9
cd gcc-build-9
../configure --prefix=/usr/local/gcc9 --enable-languages=c,c++,go --disable-multilib
make -j4
(-j4选项是make对多核处理器的优化,如果不成功请使用 make。建议不要使用make -j来编译,虽然可以缩短编译时间,但极大可能会编译失败)
编译过程中可能报错:
collect2: ld terminated with signal 9
这个报错的原因是华为云并没有默认创建swap分区,使用“free -m”命令查看空余空间,可以看到它的大小是0,也就意味着根本没有给swap分配磁盘。
那么我们有两种方法可以选:
1. 新建磁盘分区作为swap分区(磁盘空间充足)
1)卸载所有swap分区
以root身份进入控制台(登录系统)
swapoff -a #停止所有的swap分区
2)对新增磁盘进行分区
用fdisk命令(例:# fdisk /dev/sdb)对磁盘进行分区,添加swap分区,新建分区,在fdisk中用“t”命令将新添的分区id改为82(Linux swap类型),最后用w将操作实际写入硬盘(没用w之前的操作是无效的)。
3)对分区进行格式化(格式化为swap分区)
# mkswap /dev/sdb2 #格式化swap分区,这里的sdb2要看您加完后p命令显示的实际分区设备名
2. 新建文件(磁盘空间并不充足)
1)创建要作为swap分区的文件
例如:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)
# dd if=/dev/zero of=/root/swapfile bs=1M count=1024
2)格式化为交换分区文件
# mkswap /root/swapfile #建立swap的文件系统
# chmod 600 /root/swapfile #修改权限
3)启用交换分区文件
# swapon /root/swapfile #启用swap文件
4)使系统开机时自启用
在文件/etc/fstab中添加一行: /root/swapfile swap swap defaults 0 0
扩展完分区后再进行编译,还是报错
gcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory
可能的原因:
问题定位: g++ --version gcc --version
没有版本号的话安装1)所示安装编译器,有的话按照2)所示运行查找命令
1)没有安装c++编译器
解决方式:apt install g++ ## 安装c++编译器
2)未添加到环境变量中
解决方式:运行: find / -name "cc1plus"
完成之后,运行make install
没有替换老版本gcc动态库:
查找编译gcc时生成的最新动态库:find / -name "libstdc++.so*"
/usr/local/gcc-9.2.0/lib64/是升级gcc时的输出路径,
使用命令“cp /usr/local/gcc-9.2.0/lib64/libstdc++.so.6.0.27 /usr/lib64”将最新动态库libstdc++.so.6.0.27复制到/usr/lib64路径下(根据自己的路径设置):
重建默认库的软连接:
cd /usr/lib64
ll
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.27 libstdc++.so.6
依次执行完毕后再次检查动态库升级完情况
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
可见gcc库版本已经扩展到27了,证明gcc安装成功。
6、启动mysql
此时再使用命令“mysqld --initialize --user mysql”
进行mysql初始化登录即可