前往官网选择相对应的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/