共计 5537 个字符,预计需要花费 14 分钟才能阅读完成。
在 Ubuntu 下编译装置 GreatSQL
本次介绍如何利用 Docker 构建 Ubuntu 环境,并将 GreatSQL 源码编译成二进制文件。
1、筹备工作
先创立本次 Docker 的 workdir 为 /data/docker-ubuntu:
[root@greatsql ~]# mdkir /data/docker-ubuntu
1.1、配置 Ubuntu 环境下的 apt 源配置文件
开始编译之前,倡议先配置好 apt 源,这样后续部署环境下载软件包时速度更快。
以阿里、腾讯两大云主机为例,能够这样配置(两个 apt 源自行二选一):
# 腾讯云
[root@greatsql ~]# cat /data/docker-ubuntu/ubuntu-20.4-sources.list
deb http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted
deb http://mirrors.cloud.tencent.com/ubuntu/ focal universe
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-updates universe
deb http://mirrors.cloud.tencent.com/ubuntu/ focal multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-updates multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-security universe
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-security multiverse
如果是阿里云的话换成上面的内容
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse
这个文件先筹备好,前面会在 Dockerfile 里用到它。
另外,从我本人测试的状况,在构建 docker 镜像的过程中,阿里云的源更容易出错,请自行测试选定。
装置 Docker,下载 boost、GreatSQL 源码包等这些工作我间接略过了,可间接参考这篇文档:在 Linux 下源码编译装置 GreatSQL。
我还筹备了一份自动化编译 GreatSQL 的 shell 脚本,能够自取服用:
[root@greatsql ~]# cat /data/docker-ubuntu/greatsql-automake.sh
#!/bin/bash
MAJOR_VERSION=8
MINOR_VERSION=0
PATCH_VERSION=25
RELEASE=15
REVISION=`date +%Y%m%d%H%M`
BASE_DIR=/usr/local/GreatSQL-8.0.25
JOBS=16
#reversion=`echo $RANDOM | sha256sum | cut -c1-11` && echo $reversion;
cmake . -DBOOST_INCLUDE_DIR=../boost_1_73_0 -DCMAKE_INSTALL_PREFIX=${BASE_DIR} -DWITH_ZLIB=bundled \
-DWITH_NUMA=ON -DFORCE_INSOURCE_BUILD=1 -DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_CONFIG=mysql_release \
-DCOMPILATION_COMMENT="GreatSQL (GPL), Release ${RELEASE}, Revision ${REVISION}" \
-DWITH_TOKUDB=OFF -DWITH_ROCKSDB=OFF -DWITH_COREDUMPER=OFF \
-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} && \
make -j${JOBS} VERBOSE=1 && make install
1.2、构建 docker 镜像
用上面这份 Dockerfile 构建 Ubuntu 镜像:
FROM ubuntu
ENV LANG en_US.utf8
ARG UID=1001
ARG GID=1001
ARG UNAME=mysql
#ENV TZ Asia/Shanghai
ENV PATH="/usr/local/mysql/bin:${PATH}"
ENV LD_LIBRARY_PATH="/usr/loca/mysql/lib:${LD_LIBRARY_PATH}"
ENV TERM=xterm
COPY ubuntu-20.4-sources.list /etc/apt/sources.list
#RUN apt-get update && apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
RUN apt update && apt install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
ENV TZ Asia/Shanghai
RUN apt update -y && apt upgrade -y && \
apt install -y --fix-missing gcc-10 cmake automake build-essential diffutils git lbzip2 libaio-dev libbison-dev \
libcurl4-openssl-dev libevent-dev libexpat1-dev libffi-dev libgflags-dev libgtest-dev libjemalloc-dev \
libldap2-dev liblz4-dev libncurses-dev libnuma-dev libreadline-dev libsnappy-dev libssh-dev libtirpc-dev \
libtool libxml2-dev libzstd-dev make net-tools numactl pkg-config psmisc vim wget \
&& groupadd -g $GID -o $UNAME && useradd -m -g $GID -u $UID -o -s /bin/bash $UNAME \
&& /usr/bin/install -m 0775 -o mysql -g root -d /var/lib/mysql /var/run/mysqld /docker-entrypoint-initdb.d \
&& /usr/bin/install -m 0664 -o mysql -g root /dev/null /etc/sysconfig/mysql
COPY patchelf-0.12.tar.gz /tmp/
RUN cd /tmp && tar -xzvf patchelf-0.12.tar.gz && cd patchelf-0.12 && ./bootstrap.sh && ./configure && make && make install
COPY rpcsvc-proto-1.4.tar.gz /tmp/rpcsvc-proto-1.4.tar.gz
RUN tar zxvf /tmp/rpcsvc-proto-1.4.tar.gz -C /tmp && cd /tmp/rpcsvc-proto-1.4/ && ./configure && make && make install
COPY boost_1_73_0.tar.gz /opt/
COPY greatsql-automake.sh /opt/
RUN rm -fr /tmp/*
开始构建 docker 镜像,胜利后再保留到本地并导入本地镜像:
[root@greatsql ~]# docker build -t docker-ubuntu .
... ...
[root@greatsql ~]# docker save -o docker-ubuntu.tar docker-ubuntu
[root@greatsql ~]# docker load -i docker-ubuntu.tar
创立一个 docker 容器,并将 GreatSQL 源码包 copy 进去:
[root@greatsql ~]# docker run -itd --name greatsql --hostname=greatsql docker-ubuntu
[root@greatsql ~]# docker cp /opt/greatsql-8.0.25-15.tar.gz greatsql:/opt/
[root@greatsql ~]# docker exec -it greatsql bash
[root@greatsql /]# ls -l /opt/
-rw------- 1 root root 128699082 Jul 27 06:56 boost_1_73_0.tar.gz
-rw------- 1 1000 1000 526639994 Jul 27 05:59 greatsql-8.0.25-15.tar.gz
-rw-r--r-- 1 root root 751 Nov 12 15:25 greatsql-automake.sh
其余不同 OS 及架构平台下的 Dockerfile 可戳上面链接参考:
- Dockerfile-centos7-x86
- Dockerfile-centos8-x86
- Dockerfile-centos7-arm
- Dockerfile-centos8-arm
此外,我把 Docker 镜像文件包也放到网盘上共享了,有趣味的也可间接下载:
- 【百度云盘】链接: https://pan.baidu.com/s/188iZ… 提取码: 8c22
2、编译 GreatSQL
进入容器后,解压 GreatSQL 和 boost 源码包:
[root@greatsql /]# tar zxf /opt/greatsql-8.0.25-15.tar.gz -C /opt
[root@greatsql /]# tar zxf /opt/boost_1_73_0.tar.gz -C /opt/
可间接调用自动化编译脚本开始编译,也能够自行手动编译:
[root@greatsql /]# cd /opt/greatsql-8.0.25
[root@greatsql /]# /bin/bash /opt/greatsql-automake.sh
...
编译实现后,就会将二进制文件装置到 /usr/local/GreatSQL-8.0.25 目录下,执行上面的命令查看测试:
[root@greatsql /]# /usr/local/GreatSQL-8.0.25/bin/mysqld --verbose --version
/usr/local/GreatSQL-8.0.25/bin/mysqld Ver 8.0.25-15 for Linux on x86_64 (GreatSQL (GPL), Release 15, Revision 202111121536)
这就编译实现了。
延长浏览
- 玩转 MySQL 8.0 源码编译
- 将 GreatSQL 增加到零碎 systemd 服务
- 利用 GreatSQL 部署 MGR 集群
- InnoDB Cluster+GreatSQL 部署 MGR 集群
- 在 Docker 中部署 GreatSQL 并构建 MGR 集群
- ansible 一键装置 GreatSQL 并构建 MGR 集群
- 在 Docker 中部署 GreatSQL 并构建 MGR 集群
全文完。
Enjoy GreatSQL :)
本文由博客一文多发平台 OpenWrite 公布!