YOLO813

源码编译mariadb的尝试(二)

    之前折腾过一次源码编译mariadb数据库,准确的说是失败了,吸收了教训之后,这一次再来尝试一次,照例,为了防止依赖的影响,服务器已经完全格式化,服务器版本如下:

CentOS Linux release 8.0.1905 (Core)


    安装必要的依赖,我就直接使用yum工具来解决了,

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

    前往官网下载mariadb,系统选择Source。

#官网
https://mariadb.org/download/

    我是放在了服务器opt目录下

[root@opt]# pwd ; ls
/opt
mariadb-10.5.9.tar.gz

    创建mysql用户专门负责运行mysql数据库,为了提高系统安全性,将该类账户的Bash终端设置为nologin解释器。

[root@opt]# useradd mysql -s /sbin/nologin
[root@opt]# cat /etc/passwd | grep mysql
mysql:x:1000:1000::/home/mysql:/sbin/nologin

    创建用于保存mysql数据库程序和数据库文件的目录,并将其所有者和所属组修改为mysql,下面我将使用mysql保存数据库服务程序,var用于保存真实数据库文件。

mkdir -p /usr/local/mysql/var
chown -R mysql:mysql /usr/local/mysql
# 检查是否修改成功
ls -il /usr/local/mysql/
527361 drwxr-xr-x 2 mysql mysql 4096 Mar  3 20:01 var

    开始解压文件,没什么好说的

tar -zxvf mariadb-*

    因为没有configure,所以考虑使用cmake来帮我们生成Makefile,首先查看服务器是否具备cmake。

[root@mariadb-10.5.9]# cmake --version
-bash: cmake: command not found
# 安装
yum install cmake -y
cmake version 3.11.4

    进行环境检测生成makefile文件,下面的参数和之前的说明是一样的,分别是数据库服务程序的保存目录,真实数据库文件目录和数据库配置文件的目录:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/usr/local/mysql/var \
    -DSYSCONFDIR=/etc

配置文件报错Could NOT find GnuTLS,参考之前的文章

yum install gnutls-devel

记得删除目录下的CMakeCache.txt缓存文件再重新开始配置,

rm CMakeCache.txt

最后提示如下,可以看到目录下生成了Makefile

    再进行编译和安装即可,时间会比较久。

    有可能会提示以下错误,可能是内存不够

cc: fatal error: Killed signal terminated program cc1 compilation terminated.

ls /usr/local/mysql/
# 安装成功之后的目录如下

    为了让数据库程序正常运行,找到scripts目录下面的mariadb-install-db(可以看到这个目录下的mysql_install_db是mariadb-install-db的符号链接)程序运行如下命令

/usr/local/mysql/scripts/mariadb-install-db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var

    !!!不要加入 --user=mysql参数,会莫名其妙的报错,而且目前我查到的两个答案都没法解决(一种是直接修改mariadb-install-db文件,一种是删除大约300行的代码),如下:

chown: cannot access './plugin/auth_pam/auth_pam_tool_dir/auth_pam_tool': No such file or directory
Couldn't set an owner to './plugin/auth_pam/auth_pam_tool_dir/auth_pam_tool'.
It must be root, the PAM authentication plugin doesn't work otherwise..

    将程序目录中的开机程序文件复制到/etc/rc.d/init.d/目录中,这样可以使用service命令来管理数据库,并将脚本文件权限修改成755方便执行:

cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld

    编辑脚本文件,将在45行,46行basedir和datadir的修改成前面预设的目录

vim /etc/rc.d/init.d/mysqld

    配置好脚本文件后使用service命令启动mysqld服务,mysqld是数据库程序的服务名称(一般来讲,服务器上后缀为d的都是daemon进程),再利用chkconfig命令将mysqld加入到开机自启:

service mysqld start
chkconfig mysqld on

    我们想要方便快捷的使用mysql数据库程序的命令,可以考虑将将命令保存的目录定义到PATH变量当中,未配置之前可以输入my然后按两下tab键,可以看到是没有数据库命令的:

vim /etc/profile
# 最后一行加入mysql的命令所在目录
export PATH=$PATH:/usr/local/mysql/bin
# 保存退出后,让其马上生效
source /etc/profile

    如何验证命令已经生效呢?还是输入my然后按两下tab键,可以看到很多可用命令:

    mysql数据库服务器程序还会调用一些程序文件和函数库文件,由于是源码安装,所以也必须要手动将这些文件链接过来:

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
mkdir /var/lib/mysql
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
ln -s /usr/local/mysql/include/mysql /usr/include/mysql

    一切准备就绪,即可按照之前yum或者dnf安装mariadb一样进行操作数据库了,熟悉的配置画面

mysql_secure_installation

    配置完成之后的提示:

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!


    终于完成!!!


参考文章:

#mariadb源码编译参数说明
https://blog.csdn.net/d_o_n_g2/article/details/76797564