YOLO813

源码编译mariadb的尝试

    前往官网选择相对应的source版本下载即可,我的服务器版本号如下

[root@korean ~]# uname -a
Linux korean 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

    之前我尝试过按照教程使用dnf工具安装mariadb,网速OK的话全程不超过1分钟,但这次就是想折腾下源码安装mariadb。

    下图可以看到没有configure,那么我们就无法使用其为我们生成Makefile文件进行编译了。


    方法一:按照官网所示的方法进行安装,官网链接如下

https://mariadb.com/kb/en/source-building-mariadb-on-centos/

    如果提示yum-builddep: command not found,使用yum安装yum-builddep即可,然后利用yum-builddep安装mariadb的编译依赖。

yum-builddep mariadb-server
# yum install yum-utils
# rpm -qf `which yum-builddep`

    安装剩余的依赖。

yum install git \
      gcc \
      gcc-c++ \
      bison \
      libxml2-devel \
      libevent-devel \
      rpm-build

    获取源码文件,完成之后,可以看到目录下面多了一个server目录:

git clone --branch 10.3 https://github.com/MariaDB/server.git

    开始配置mariadb,由于没有configure,我们需要用到一个工具cmake。按照官网配置后,报错如下

dnf search cmake
dnf install cmak
cmake -DRPM=centos8 server/

查看CMakeOutput日志,里面只有一句话如下

The system is: Linux - 4.18.0-240.1.1.el8_3.x86_64 - x86_64

    先安装make包,再次尝试cmake。报错如下

    按照提示,安装相关依赖

#查看是否安装了ncurses-devel
rpm -qa | grep ncurses-devel
#查看包名叫啥
dnf search ncurses-devel
dnf install ncurses-devel

    再次尝试,又报错Could NOT find GnuTLS。

dnf install gnutls-devel # centos
sudo apt-get install gnutls-dev # Ubuntu

    成功配置

    开始编译,过程比较慢,卡在了91%十几分钟。。。

#并行编译加快速度
make -j4 package
# 特别慢的地方
>Building CXX object sql/CMakeFiles/sql.dir/sql_yacc_ora.cc.o

    再次报错

#CPackRPM: source dir path '/opt/server' is shorter than debuginfo sources

    创建了一个7级目录,迁移所有内容至7级目录下,删除rm CMakeCache.txt重新开始配置,结果又莫名其妙的报类似make[1],make[2]这种错误,猜测了一下,估计是使用make -j4的问题,导致里面存在先后依赖关系的包安装错误,老老实实使用make编译吧,99%的时候8核cpu直接爆表了。耗时1个小时。。。

    可以看到生成了各式各样的rpm包,使用make install安装。

 

方法二:常规教程中的方法。

    首先安装cmake,由于我本机使用yum安装的cmake版本为3.11.4,我嫌版本旧了,所以去cmake官网下载了cmake-3.19.3.tar.gz源码包。

    使用configure编译,报错Cannot find appropriate C compiler on this system,说明没有装合适的C编译器

dnf install gcc
dnf -y install gcc-c++

        再报错如下,看着像是没有安装make的问题,安装make

dnf install -y make

        再报错,Could NOT find OpenSSL。

dnf install openssl-devel
# 不用openssl,装openssl-devel即

    成功配置cmake。

    之后的编译安装还是老步骤。

      查看版本报错,Could not find CMAKE_ROOT!!!

 # 解决
 hash -r
 cmake --version

 再安装boost,也采用官网源码编译的方式(最新版本1.75)。

wget https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz
tar -zxvf boost_1_75_0.tar.gz
mv boost_1_75_0 /usr/local/boost

获取mariadb源码包

wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-10.5.8/source/mariadb-10.5.8.tar.gz

    进入到解压目录下,使用cmake配置时,我们可以使用如下代码设置相关选项

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/mydata \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_DEBUG=0 \
-DWITH_EMBEDDED_SERVER=1 \
-DOWNLOAD_BOOST=1 -DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost
  • DCMAKE_INSTALL_PREFIX:指定安装路径
  • DMYSQL_DATADIR:指定数据目录
  • DMYSQL_UNIX_ADDR:指定sock文件路径
  • DWITH_INNOBASE_STORAGE_ENGINE:安装Innodb存储引擎
  • DWITH_MYISAM_STORAGE_ENGINE:安装myisam存储引擎
  • DENABLED_LOCAL_INFILE:允许使用load data命令从本地导入数据
  • DEXTRA_CHARSETS...:安装所有字符集,默认utf-8,校验字符
  • DMYSQL_USER:指定mysql用户名,需要先创建这个用户
  • DWITH_DEBUG:关闭debug
  • DWITH_EMBEDDED_SERVER:指定一个libmysqld.a(.so)库,该库同时继承了mysql服务和客户端API
  • DOWNLOAD_BOOST...:允许boost,允许下载boost库文件,下载目录

    毫无疑问,报错了

dnf -y install ncurses-devel
rm CMakeCache.txt # 删除配置重新来过

    编译成功,make install,可以看到/usr/local下面多了一个mysql的文件夹。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
useradd -s /sbin/nologin -r mysql
# tail -f /etc/passwd
chown mysql:mysql /usr/local/mysql/ -R
# 方便使用
ln -sf /usr/local/mysql/bin/* /usr/bin/
ln -sf /usr/local/mysql/lib/* /usr/lib/
ln -sf /usr/local/mysql/man/man1/* /usr/share/man/man1
ln -sf /usr/local/mysql/man/man8/* /usr/share/man/man8

    关于不存在配置文件,官网有说明,在10.0.13以上的mariadb版本中,会默认的从/etc/my.cnf(全局)逐步往下读取,具体官网链接如下,我们可以在这个目录下面自己制作配置文件。

https://mariadb.com/kb/en/configuring-mariadb-with-option-files/


    总结,心累,如果有兴趣了解源码编译的过程,可以自己多折腾几次,就当学习linux了,另外,还是建议新手使用yum或者dnf工具安装吧。


参考文章:

#为什么使用mariadb
https://www.zhihu.com/question/41832866
https://book.51cto.com/art/201504/471380.htm
# Building MariaDB on CentOS
https://mariadb.com/kb/en/source-building-mariadb-on-centos
#Installing yum build dependencies with yum-builddep
https://possiblelossofprecision.net/?p=949
# CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles"
https://nanxiao.me/en/install-make-before-using-cmake/
# Could NOT find GnuTLS
https://stackoverflow.com/questions/45687453/compile-mariadb-errors-occur-could-not-find-gnutls-but-it-installed
# cmake
https://cmake.org/download/
# Could not find CMAKE_ROOT !!!
https://blog.csdn.net/suibianshen2012/article/details/81504577
# 关于my.conf文件不存在疑惑
https://mariadb.com/kb/en/configuring-mariadb-with-option-files/