Mysql编译

#!/bin/bash
#centos7编译mysql的rpm包并利用sftp上传脚本
######################变量##########################
config=https://downloads.mysql.com/archives/get/p/23/file/mysql-community-5.7.36-1.el7.src.rpm
#截取名称,截取包名-版本,为编译与传输做准备,这是该组件通用,不用修改;
var=$config
#5.7.32-1.el7.src.rpm
rpmname="`echo ${var#*community-}`"
#5.7.32
version="`echo ${rpmname%-*}`"
#mysql-5.7.32.tar.gz
package="mysql-`echo $version`.tar.gz"
#获取解压后的包
#mysql-5.7.32
var2="mysql-`echo $version`"
#为修改mysqld.cc做准备
route="`echo $var2`/sql/mysqld.cc"
#获取大版本
bigver="`echo ${version%%.*}`"
#连接sftp
user=sftp
passwd='sftp'
port=18884
ip=192.168.0.173
#传输目的地
addr='/sftp/centos7/rpm'

#依赖安装
yum install  time libaio-devel ncurses-devel numactl-devel openssl-devel zlib-devel cyrus-sasl-devel openldap-devel perl-Env perl-Env.noarch cmake cmake3 gcc gcc-c++ make rpm-build vim  perl-devel autoconf libaio perl-JSON.noarch  perl-Data-Dumper perl  wget bison perl-JSON libtirpc-devel  automake libarchive epel-release -y

wget $var
rpm -ivh *.rpm
if [ $bigver -eq 5 ];then
    echo "正在centos7编译大版本为5的mysql"           
    #gcc高版本快速安装,防止修改MySQL源码包里的cmake配置文件
    yum install -y centos-release-scl
    yum install -y devtoolset-7-gcc*
    source /opt/rh/devtoolset-7/enable

    #修改lib库,防止出现prctl函数不能识别,修改mysqld.cc 配置文件 ,添加头文件,该问题为mysqlbug,已在8.0.12解决,https://bugs.mysql.com/bug.php?id=96982
    cd /root/rpmbuild/SOURCES
    #解压tar包
    tar -xf `echo $package` 
    #修改lib库
    sed -i "23a #include <sys/prctl.h>" `echo $route` 
    #vim mysql-5.7.32/sql/mysqld.cc 
    #清理环境
    rm -rf `echo $package` 
    tar -cf `echo $package` `echo $var2` 

else
    yum install cmake3 -y
    echo "正在centos7编译大版本为8的mysq"
    #gcc高版本快速安装,防止修改MySQL源码包里的cmake配置文件
    yum install -y centos-release-scl
    yum install devtoolset-10 -y
    source /opt/rh/devtoolset-10/enable
fi

#执行编译#4表示并发数,要小于内存除以2G ,例如16G内存,则并发数小于8,_smp_mflags -j4 等于同时使用4个内核去并发执行。
rpmbuild -bb --define '_smp_mflags -j4'  /root/rpmbuild/SPECS/mysql.spec

yum install createrepo -y
createrepo /root/rpmbuild/RPMS/aarch64
cd /root/rpmbuild/RPMS/

mkdir $var2
cd /root/rpmbuild/RPMS/aarch64/
cp -r *   ../$var2

#利用sftp传输脚本生成的包
yum install vim wget -y
yum install glibc-headers gcc-c++ make unzip -y
cd /opt
#编译tcl,expect编译依赖tcl
wget  http://core.tcl.tk/tcl/zip/release/tcl.zip
unzip tcl.zip
cd ./tcl/unix
./configure && make -j4 && make install
cd /opt
#编译expect,expect提供了shell中的人机交互
wget https://jaist.dl.sourceforge.net/project/expect/Expect/5.45.3/expect5.45.3.tar.gz --no-check-certificate
tar -xzvf expect5.45.3.tar.gz && cd expect5.45.3/
./configure --build=arm-linux && make -j4 && make install
#安装sftp,传输需要
yum install openssh-clients -y

cd /root/rpmbuild/RPMS

#利用expect工具和sftp协议进行传输编译的包 
/usr/local/bin/expect <<-EOF
set timeout -1
spawn sftp -oPort=$port  $user@$ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"Password:" { send "$passwd\r"; exp_continue }
"sftp" { send "put -r  ./$var2/ $addr\r" }
}
send "exit\r"
expect eof
EOF

echo "make over finishjrt"