暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

手把手教你编译安装 MySQL8.0.22

IT云鼎 2020-11-10
8049

最新

版本

手把手教你编译安装 MySQL8.0.22

2020 年 10 月 19 日,MySQL 的最新版本 8.0.22 正式发行,为了庆祝于是有了这篇文章。

前言


一般来说,我们生产环境的 MySQL 是安装在 RHEL/CentOS 7 下的,常见安装部署的方法有三种:


  • yum/rpm 安装

  • 二进制 安装

  • 源码 安装


生产环境建议使用二进制安装法,其优点是部署简单、快速、方便,并且相对"yum/rpm 安装" 方法能更方便地自定义文件存放的目录结构,方便用脚本批量部署,方便日后运维管理。


在生产上很少用到源码编译安装 MySQL, 最主要的原因,就是编译安装太慢了,二进制部署只需要几十秒。并且,源码编译安装容易遇到一些不好解决的编译问题。


那么什么时候需要用到编译安装呢?

当我们需要修改 MySQL 源代码以修复功能、修改功能、新增功能时,当我们想修改 MySQL 默认设定时,当我们需要对 MySQL 做 debug 时,我们就需要用到编译安装。


  • 改源码

  • 改默认设定

  • debug


话不多说,下面看看我们的实战步骤,如何编译安装 MySQL 的最新版本。

编译安装 MySQL8.0.22


01

我们的目标

1. 通过实验,在 CentOS 7.5 (minimal 安装版) 操作系统下,编译安装 MySQL 社区版的最新版本 8.0.22

2. 修改源代码,实现一个假的 MySQL 版本号。

3. 通过修改默认设定,禁用不常用的两个存储引擎,FEDERATED 和 ARCHIVE;修改默认设定,使默认读的是 my.cnf,取代 etc/my.cnf

4. 让 MySQL 可以 debug。


02

环境准备——编译的先决条件

由于 MySQL Server 是 C/C++ 开发的,所以编译安装需要先安装 cmake 和 gcc 等编译工具,构造编译环境。

https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html


参考官方文档,经过测试,编译工具有以下版本要求:

(系统使用的是 CentOS 7.5 minimal 安装版)



命令行

    # 安装 cmake
    cd ~
    yum -y install wget
    wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz
    tar zxvf cmake-3.8.2-Linux-x86_64.tar.gz
    mv cmake-3.8.2-Linux-x86_64 usr/local/cmake
    echo -e "\nexport PATH=/usr/local/cmake/bin:\$PATH" >>/etc/profile
    source /etc/profile


    # 安装gcc
    ## 安装编译安装时需要用的工具包
    yum -y install bzip2 gcc gcc-c++


    wget http://mirror.hust.edu.cn/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz
    tar zxvf gcc-5.5.0.tar.gz
    cd gcc-5.5.0


    ## 下载mpfr、gmp、mpc、isl等依赖包
    ./contrib/download_prerequisites


    ## 开始编译安装 gcc
    mkdir build && cd build
    ../configure --prefix=/usr/ --enable-checking=release \
    --enable-languages=c,c++ --disable-multilib
    make -j4 && make install
    ## 注意了,上面那个 prefix 必须用 usr/,以便覆盖掉旧版的 gcc ,以免编译程序找不到新版 gcc


    ## 检查验证 gcc 版本
    gcc -v




    # 安装 ncurses-devel、bison、openssl-devel
    yum -y install ncurses-devel bison openssl-devel

    03

    下载源代码

    打开 http://mysql.com/downloads/下载页面

    到 MySQL Community(GPL)Downloads


    还是找到 MySQL Communtiy Server


    放心,这个页面的版本,就是 MySQL 的最新版本,选择 "Source Code" 下载源码,再选择 Generic Linux (Architecture Independent), 下载选择 "Compressed TAR Archive, Includes Boost Headers"。


    在这里,你可以选择下载,或者右键 "复制链接地址"。(我选择的是后者)


    到 Linux 上,下载

      cd ~
      wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.22.tar.gz

      04

      编译安装

        tar zxvf mysql-boost-8.0.22.tar.gz
        cd mysql-8.0.22


        # 修改版本号
        vi MYSQL_VERSION
        # 修改为以下内容
        MYSQL_VERSION_MAJOR=100
        MYSQL_VERSION_MINOR=9
        MYSQL_VERSION_PATCH=99
        MYSQL_VERSION_EXTRA=


        # cmake
        cmake . \
        -DWITH_BOOST=./boost/ \
        -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
        -DMYSQL_DATADIR=/data/mysql/mysql3306/data \
        -DSYSCONFDIR=/ \
        -DWITH_DEBUG=1 \
        -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
        -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \
        -DFORCE_INSOURCE_BUILD=1


        ## SYSCONFDIR=/ # 修改读取 my.cnf 的路径
        ## WITH_DEBUG=1 # 可 debug 的版本
        ## WITHOUT_FEDERATED_STORAGE_ENGINE=1 \ # 摘掉 FEDERATED 存储引擎
        ## WITHOUT_ARCHIVE_STORAGE_ENGINE=1 \ # 摘掉 ARCHIVE 存储引擎


        # 编译安装
        make -j4 && make install

        MySQL 的编译是有进度条的,等待吧。


        完成编译安装了~


        05

        配置环境变量

          echo -e "export PATH=/usr/local/mysql/bin:\$PATH" >>/etc/profile
          source etc/profile

          验证

            [root@localhost mysql-8.0.22]# mysql -V
            mysql Ver 100.9.99 for Linux on x86_64 (Source distribution)


            06

            建组建用户

              groupadd mysql
              useradd -M -g mysql -s sbin/nologin -d usr/local/mysql mysql

              07

              创建目录结构

                mkdir -p data/mysql/mysql3306/{data,logs,tmp}
                chown mysql:mysql data/mysql/mysql3306/ -R

                08

                准备配置文件

                vi /my.cnf

                  [mysqld]
                  user = mysql
                  basedir = /usr/local/mysql
                  datadir = /data/mysql/mysql3306/data
                  tmpdir = /data/mysql/mysql3306/tmp
                  socket = /tmp/mysql.sock
                  log_error = /data/mysql/mysql3306/error.log

                  09

                  初始化实例

                    mysqld --initialize-insecure

                    10

                    启动 MySQL

                      mysqld &

                      11

                      验收环境

                      1. 确认版本号,确认是 debug 版本

                        cat /data/mysql/mysql3306/error.log |grep -i version
                        mysql -V
                        mysql -e "select @@version"

                        2. 确认默认读取的配置文件是 /my.cnf

                          yum install strace -y
                          strace mysql -e "select 1" 2>2.log
                          cat 2.log |grep my.cnf

                          检查发现,读取 /etc/my.cnf ,但后面还会读取 /my.cnf 。

                          说明之前我们对 SYSCONFDIR=/ 编译参数确实生效了。

                          作为对比,请参考下图正常版本的 MySQL:

                          对比后可以发现,取代的是默认第三读取顺序的路径,即 /usr/local/mysql/etc/

                          3.确定已经摘掉了 FEDERATED 和 ARCHIVE。

                            select version();
                            show engines;

                            正常的 MySQL


                            我们编译的 MySQL

                            确实已经内置摘除了 FEDERATED 和 ARCHIVE 存储引擎。


                            Enjoy MySQL!


                            参考:

                            https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html

                            https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html




                            扫描二维码

                            关注我们

                            国内最大IT云-移动IT云IAAS产品、云管服务介绍、新鲜消息、产品体验、运营推广、前沿技术、精华文章分享



                            文章转载自IT云鼎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论