在 Rocky 9 上编译 MySQL 8.2.0 Debug 版本编译指南

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~

unsetunset前情提要unsetunset

前文已经介绍了如何安装 Rocky Linux 9.2,这里便不再赘述。 同时,也已经介绍过 MySQL 8.2.0 的参数变化,以及提及如何安装 MySQL 8.2.0。

本文将着重介绍如何编译 MySQL 8.2.0 Debug 版本。

unsetunset环境准备unsetunset

本文使用的操作系统为 Rocky Linux 9.2,下面简称 Rocky。

[shawnyan@rocky9 ~]$ cat /etc/redhat-release 
Rocky Linux release 9.2 (Blue Onyx)
[shawnyan@rocky9 ~]$ cmake --version
cmake version 3.20.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
[shawnyan@rocky9 ~]$ 

mysql-server 的源码为 cpp 语言,编译需要用到 cmake,这里已经安装好,版本为 3.20.2。

unsetunset下载源码unsetunset

mysql-server 的源码,通常有两种下载途径:

  1. 从 MySQL 官网下载源码包。

官网下载地址:https://dev.mysql.com/downloads/mysql/

alt
  1. 从 GitHub 上克隆获取。
git clone https://github.com/mysql/mysql-server.git

源码版本为:mysql-8.2.0, 7307d4

unsetunset编译源码unsetunset

下载源码后,进入源码路径,创建一个 debug 文件夹,专门用于编译。

mkdir debug
cd debug

由于这次是编译 debug 版本,所以需要将构建类型设定为 debug。

cmake .. -DCMAKE_BUILD_TYPE=Debug -DWITH_BOOST=. 
make

编译的过程是漫长的,这个时间可以去煮杯咖啡,慢慢等待。

02-compile-time.png

最后,执行 make install 进行安装,这里安装路径选择为默认路径,即 /usr/local/mysql

unsetunset运行 MySQL 8.2.0 Debug 服务器unsetunset

安装完成后,需要进行数据库初始化。

/usr/local/mysql/bin/mysqld --initialize-insecure

然后启动即可。

[mysql@rocky9 mysql]$ /usr/local/mysql/bin/mysqld
2023-10-30T10:10:05.928804Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2023-10-30T10:10:06.674943Z 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.2.0-debug) starting as process 70140
2023-10-30T10:10:06.734430Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-10-30T10:10:08.003417Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-10-30T10:10:09.939694Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
2023-10-30T10:10:09.945047Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2023-10-30T10:10:10.141478Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2023-10-30T10:10:10.141636Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2023-10-30T10:10:10.460188Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2023-10-30T10:10:10.461041Z 0 [System] [MY-010931] [Server] /usr/local/mysql/bin/mysqld: ready for connections. Version: '8.2.0-debug'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.
2023-10-30T10:10:25Z UTC - mysqld got signal 11 ;

这里可以从日志中看到,MySQL 服务器已经启动,版本为:'8.2.0-debug'。

alt

unsetunset实验:SHOW PARSE_TREE 新特性unsetunset

在 【MySQL 8.2.0】从参数变化解读 MySQL 8.2.0 发版说明 中已经介绍过 SHOW PARSE_TREE 新特性,但该特性仅支持 Debug 版本,所以这里可以进行测试。

示例如下:

show parse_tree select 1\G

输出结果如下:

mysql> show parse_tree select 1\G
*************************** 1. row ***************************
Show_parse_tree: {
  "text""select 1",
  "type""PT_select_stmt",
  "components": [
    {
      "text""select 1",
      "type""PT_query_expression",
      "components": [
        {
          "text""select 1",
          "type""PT_query_specification",
          "components": [
            {
              "text""1",
              "type""PT_select_item_list",
              "components": [
                {
                  "text""1",
                  "type""PTI_expr_with_alias",
                  "components": [
                    {
                      "text""1",
                      "type""Item_int"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
1 row in set (0.00 sec)

不过,这里遇到了一个问题,看来这个新特性有严重的bug:

  • [Open] Bug #112883 mysql 8.1.0/8.2.0, mysqld got signal 11, when send sql, show parse_tree

unsetunset遇到问题unsetunset

缺包问题

编译过程中会提示缺少类包,好在代码已经做了 catch 及 tips,这里只需依照提示安装对应缺少的包即可,比如:

-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:92 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:126 (FIND_CURSES)
  cmake/readline.cmake:220 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:1934 (MYSQL_CHECK_EDITLINE)

cmake 过程中遇到报错,提示安装 ncurses-devel

yum install ncurses-devel

安装完成后,再次 cmake 通过。

编译报错

编译过程中,遇到报错,似乎无解,只能扩充 VM 资源,再次进行编译。

  • 第一次报错
[ 88%] Building CXX object sql/CMakeFiles/sql_gis.dir/gis/overlaps.cc.o
g++: fatal error: 已杀死 signal terminated program cc1plus
compilation terminated.
make[2]: *** [sql/CMakeFiles/sql_gis.dir/build.make:300:sql/CMakeFiles/sql_gis.dir/gis/intersection_functor.cc.o] 错误 1
make[2]: *** 正在等待未完成的任务....
make[1]: *** [CMakeFiles/Makefile2:33773:sql/CMakeFiles/sql_gis.dir/all] 错误 2
make: *** [Makefile:166:all] 错误 2

real    150m33.063s
user    192m24.614s
sys     33m36.786s
[root@rocky9 debug]#
  • 第二次报错
[ 61%] Linking CXX executable ../runtime_output_directory/mysqld
collect2: fatal error: ld terminated with signal 9 [已杀死]
compilation terminated.
make[2]: *** [sql/CMakeFiles/mysqld.dir/build.make:157:runtime_output_directory/mysqld] 错误 1
make[2]: *** 正在删除文件“runtime_output_directory/mysqld”
make[1]: *** [CMakeFiles/Makefile2:12706:sql/CMakeFiles/mysqld.dir/all] 错误 2
make: *** [Makefile:156:all] 错误 2

real    98m7.350s
user    79m50.233s
sys     11m1.616s

这里也提示,在编译 MySQL 源码时,机器资源要给多一些,2c2g 是编译不过的。

unsetunset总结unsetunset

文本介绍了如何编译 MySQL 8.2.0 源码,及进行了新特性的尝试。

不过,也遇到了一个问题,就是编译时间很长,如上面的编译报错,是在经历 150 分钟后,才抛出报错。

unsetunset🌻 往期精彩 ▼unsetunset

[MySQL]

  • 再见 mysql_upgrade
  • MySQL 8.1.0 已来!
  • 从鸟山明到 MySQL 5.7 EOL
  • MySQL Server 8.3.0 重要变更解析
  • MySQL 数据库认证考试介绍(2024 版)
  • 如何选择适合的 MySQL Connector/J 版本
  • MySQL 8.4.0 LTS 发布 (MySQL 第一个长期支持版本)
  • MySQL 8.4.0 LTS 变更解析:InnoDB 参数默认值变化
  • MySQL 8.4.0 LTS 变更解析:MySQL 的复制与组复制
  • MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端
  • MySQL 8.4.0 LTS 变更解析:源码编译(类库变更)和密码插件

[Oracle]

  • Oracle 数据库全面升级为 23ai
  • python-oracledb 已率先支持 Oracle 23ai
  • 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
  • SOP for Oracle 23ai:Python 连接 Oracle 的两种方法

-- / END / --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/648950.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣:236.二叉树的最近公共祖先(C++)

文章目录 1. 题目描述2. 题目解析2.1 思路一2.1 思路二 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 题目来源: 力扣…二叉树的最近公共祖先 1. 题目描述 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表…

代码随想录算法训练营第四十一天 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

理论基础 代码随想录 视频:从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili 动归五部曲 1.dp数组以及下标的含义 2.递推公式 3.dp数组如何初始化 4.遍历顺序(例如先背包再…

ue的event dispatch.操作步骤,最详细了

功能:按下键盘1,send方监控键盘事件,recv方打印success Dispatch 间接通信 示例:1.发送方按下键盘1。2.接收方打印success 蓝图很简单: 发送方 接收方 具体操作步骤如下: 1.场景发送方运行监听键盘 2.接受…

Seurat Dimplot函数学习总结

今天为了画这个cluster中怎么显示标签的图&#xff0c;研究了一个Seurat中怎么画这个图的&#xff0c;下面是学习过程中做的总结 运行例子 rm(listls()) library(Seurat) library(SeuratData) library(ggplot2) library(patchwork) pbmc3k.final <- LoadData("pbmc3k…

学浪的缓存怎么导出来

学浪的缓存导出问题困扰着许多用户&#xff0c;备份和管理数据变得至关重要。在数字化时代&#xff0c;保护和利用数据是企业和个人不可或缺的需求。在这篇文章中&#xff0c;我们将深入探讨学浪缓存导出的方法&#xff0c;为您解决疑惑&#xff0c;让您轻松掌握数据的安全与便…

自定义类型详解(结构体,位段,枚举,联合体)

目录 结构体 结构体的自引用 匿名结构体 结构体内存对齐 结构体内存对齐的意义 修改默认对齐数 位段 位段的内存分配 位段的跨平台问题 位段的应用 枚举 枚举类型的定义 枚举和#define的区别 联合体&#xff08;共用体&#xff09; 联合体大小的计算 结构体 C语…

斐讯N1刷OpenWRT并安装内网穿透服务实现远程管理旁路由

文章目录 前言1. 制作刷机固件U盘1.1 制作刷机U盘需要准备以下软件&#xff1a;1.2 制作步骤 2. N1盒子降级与U盘启动2.1 N1盒子降级2.2 N1盒子U盘启动设置2.3 使用U盘刷入OpenWRT2.4 OpenWRT后台IP地址修改2.5 设置旁路由&无线上网 3. 安装cpolar内网穿透3.1 下载公钥3.2 …

08Django项目--用户管理系统--查(前后端)

对应视频链接点击直达 TOC 一些朋友加我Q反馈&#xff0c;希望有每个阶段的完整项目代码&#xff0c;那从今天开始&#xff0c;我会上传完整的项目代码。 用户管理&#xff0c;简而言之就是用户的增删改查。 08项目点击下载&#xff0c;可直接运行&#xff08;含数据库&…

3个完美恢复方案!苹果手机恢复视频就是这么简单

在日常生活中&#xff0c;我们使用苹果手机记录了许多珍贵的视频&#xff0c;包括家庭聚会、旅行经历等。但是我们不小心删除了&#xff0c;在“最近删除”文件夹中也找不到。 别担心&#xff0c;这并不困难&#xff01;无论您是意外删除了重要的视频还是遇到了其他数据丢失问…

PawSQL: 企业级SQL审核工具的新玩家

随着数据库应用在企业中的广泛使用&#xff0c;确保SQL代码质量的重要性日益凸显。现有的SQL审核工具很多&#xff0c;包括Yearning、goInception、Bytebase、爱可生的SQLE、云和恩墨的SQM等等&#xff0c;但是它们或者规则覆盖度、或者是在正确率等方面存在明显不足&#xff1…

【stm32】江科协听课笔记

[3-1] GPIO输出_哔哩哔哩_bilibili 5.GPIO输出 这里&#xff0c;寄存器就是一段特殊的存储器&#xff0c;内核可以通过APB2总线队寄存器进行读写&#xff0c;这样就可以完成输出/读取电平的功能。寄存器的每一位对应一个引脚&#xff0c;stm32是32位的&#xff0c;这里的寄存器…

K8S有了Service,为什么还要Ingress?

1、有了Service为什么还要Ingress? NodePort对外暴露端口存在的不足&#xff1a; 一个端口只能一个服务使用, 端口需要提前规划。 随着业务扩展, 端口的管理将是一个头疼的问题 只支持4层的负载均衡 LoadBalancer存在的不足&#xff1a; 贵、贵、贵。 要上云(俗话说上云…

前端Vue自定义顶部搜索框:实现热门搜索与历史搜索功能

前端Vue自定义顶部搜索框&#xff1a;实现热门搜索与历史搜索功能 摘要&#xff1a; 随着前端开发复杂性的增加&#xff0c;组件化开发成为了提高效率和降低维护成本的有效手段。本文介绍了一个基于Vue的前端自定义顶部搜索框组件&#xff0c;该组件不仅具备基本的搜索功能&am…

Android端 可使用Yolov5训练 路标识别

相信大家对于路标识别&#xff0c;红绿灯识别&#xff0c;图形识别opencv中也是一件烦人的事情&#xff0c;其参数是及其受到现实环境因素的影响的&#xff0c;那么今天我就给大家推荐一种方式&#xff0c;缺点是周期长&#xff0c;但其优点是如果训练效果好久对于环境的各种变…

安卓开发日志采集和分析面面谈

日志面面谈 为什么需要日志 复现问题&#xff0c;回溯到问题产生时候的系统状态&#xff0c;有利于定位和分析问题。 安卓日志有哪些&#xff1f; cpu 关注的纬度&#xff1a; 单个应用使用系统cpu分配温度 有什么用&#xff1a; App卡顿、ANRApp异常退出 怎么用&…

记一次 .NET某企业数字化平台 崩溃分析

一&#xff1a;背景 1. 讲故事 前些天群里有一个朋友说他们软件会偶发崩溃&#xff0c;想分析看看是怎么回事&#xff0c;所幸的是自己会抓dump文件&#xff0c;有了dump就比较好分析了&#xff0c;接下来我们开始吧。 二&#xff1a;WinDbg 分析 1. 程序为什么会崩溃 win…

从0开始回顾ElasticSearch

1 elasticsearch概述 1.1 elasticsearch简介 官网: https://www.elastic.co/ ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的…

芯课堂 | 芯片抗干扰测试方案

MCU芯片对所在环境中存在的电磁干扰须具有一定程度的抗扰度&#xff0c;确保使用该芯片的设备能正常运行。国际电工委员会&#xff08;IEC&#xff09;制定了多项国际标准&#xff0c;其中与MCU芯片相关的有IEC61000-4-2 &#xff08;静电&#xff09;&#xff0c; IEC61000-4-…

RK3568笔记二十六:音频应用

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 音频是我们最常用到的功能&#xff0c;音频也是 linux 和安卓的重点应用场合。 测试使用的是ATK-DLR3568板子&#xff0c;板载外挂RK809 CODEC芯片&#xff0c;RK官方驱动是写好的&#xff0c;不用在自己重新写。…

家居的3D交互展示用什么工具比较专业?

家居的3D交互展示可以使用多种专业工具来实现&#xff0c;这些工具不仅能够在手机和电脑上查看&#xff0c;还能在手机上进行交互操作&#xff0c;如放缩、旋转等&#xff0c;并且支持高清流畅的画面展示。以下是一些推荐的3D交互展示工具&#xff1a; 1、在线3D展示软件&…