成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊 MySQL8.0 源碼編譯和 Clion 調(diào)試

數(shù)據(jù)庫(kù) MySQL
如果Clion的CMake執(zhí)行成功后,就會(huì)出現(xiàn)對(duì)應(yīng)的 Run / Debug Configurations 選項(xiàng),里邊會(huì)有名稱為mysqld的選項(xiàng),它就是 MySQL Server 啟動(dòng)的選項(xiàng)。可以先用該選項(xiàng)執(zhí)行 MySQL 數(shù)據(jù)目錄的初始化操作,生成對(duì)應(yīng)的配置文件和用戶名密碼。

?操作系統(tǒng)環(huán)境

我把個(gè)人的臺(tái)式機(jī)重裝了 Ubuntu 20.04 ,內(nèi)核版本是 5.13.0-44-generic,內(nèi)存16G,磁盤(pán)240G,有關(guān)依賴的編譯工具版本如下所示。

圖片

相關(guān)的安裝命令是從 PolarDB-通過(guò)編譯源碼安裝部署文檔上來(lái)的,專門(mén)適配于 Ubuntu 20版本,Centos的版本可以具體去它文檔中查看:

安裝GCC7
apt install -y gcc-7 g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \
--slave /usr/bin/g++ g++ /usr/bin/g++-7
update-alternatives --config gcc
gcc --version
g++ --version

# 安裝依賴
apt install make automake cmake git bison libaio-dev libncurses-dev libsasl2-dev libldap2-dev libssl-dev pkg-config

MySQL 源碼下載

我們選擇最新的 8.0.28版本,可以去 https://dev.mysql.com/downloads/mysql/ 直接下載帶 Boost 第三方庫(kù)依賴的源碼。

圖片

Boost 是一個(gè)功能強(qiáng)大、構(gòu)造精巧、跨平臺(tái)、開(kāi)源并且完全免費(fèi)的 C++ 程序庫(kù),可以認(rèn)為是半個(gè)C++標(biāo)準(zhǔn)庫(kù)。MySQL 的代碼依賴 Boost庫(kù),所以直接下載一個(gè)攜帶Boost庫(kù)的源碼比較省心,不需要再去下載對(duì)應(yīng)的Boost庫(kù)。

編譯命令

我們首先需要使用 cmake 進(jìn)行編譯,可以直接使用命令行,也可以用 Clion 開(kāi)發(fā)后,配置對(duì)應(yīng)的cmake編譯配置。

圖片

其中,有關(guān) CMake Options 的部分參數(shù)如下所示:

-DWITH_BOOST=~/work/c++/mysql-8.0.28/boost -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/homer/build -DMYSQL_DATADIR=/home/homer/build/data -DSYSCONFDIR=/home/homer/build -DMYSQL_UNIX_ADDR=/home/homer/build/data/mysql.sock -DMYSQL_MAINTAINER_MODE=false

其中比較重要的有:

  • DWITH_BOOST: 指定 boost 路徑,可以直接指向源碼文件夾下的boost文件夾;
  • DCMAKE_BUILD_TYPE: 表示是debug,方便后續(xù)代碼調(diào)試;
  • DCMAKE_INSTALL_PREFIX:  表示編譯狀態(tài)的路徑,選擇源碼文件夾之外的一個(gè)自建的build文件夾
  • DMYSQL_DATADIR:表示MySQL默認(rèn)的數(shù)據(jù)目錄,選擇build文件夾下的data文件

然后執(zhí)行命令進(jìn)行編譯,大概會(huì)花費(fèi)數(shù)分鐘的時(shí)間,并且可能會(huì)出現(xiàn)各類錯(cuò)誤和問(wèn)題。問(wèn)題和錯(cuò)誤會(huì)在本文后邊進(jìn)行記錄。

Clion 調(diào)試

如果Clion的CMake執(zhí)行成功后,就會(huì)出現(xiàn)對(duì)應(yīng)的 Run / Debug Configurations 選項(xiàng),里邊會(huì)有名稱為mysqld的選項(xiàng),它就是 MySQL Server 啟動(dòng)的選項(xiàng)。可以先用該選項(xiàng)執(zhí)行 MySQL 數(shù)據(jù)目錄的初始化操作,生成對(duì)應(yīng)的配置文件和用戶名密碼。然后再使用該選項(xiàng)來(lái)啟動(dòng) MySQL Server。兩個(gè)操作對(duì)應(yīng)的參數(shù)不同。

圖片

第一步初始化數(shù)據(jù)目錄時(shí),也需要先創(chuàng)建對(duì)應(yīng)的用戶。

# 創(chuàng)建 MySQL 用戶組和 MySQL 用戶
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

然后使用 clion 的 mysqld 執(zhí)行選項(xiàng),輸入的 Program arguments 如下所示:

--basedir=/home/homer/build --datadir=/home/homer/build/data --lower_case_table_names=0 --initialize-insecure --user=mysql

其中 --initialize-insecure 表示非安全的初始化,可以設(shè)置無(wú)密碼的用戶。然后需要給對(duì)應(yīng)的文件夾添加讀寫(xiě)和執(zhí)行權(quán)限。

chmod -R 777 /home/homer/build/data

初始化后,就可以繼續(xù)使用 clion 的 mysqld 執(zhí)行選項(xiàng)來(lái)啟動(dòng) MySQL了。輸入的 Program arguments 如下所示:

--basedir=/home/homer/build --datadir=/home/homer/build/data --lower_case_table_names=0 --user=mysql

圖片

然后我們可以在 /home/homer/build/bin 目錄下執(zhí)行 ./mysql -uroot -h127.0.0.1 -P3306 -p來(lái)使用客戶端連接 MySQL Server。登錄時(shí)無(wú)需密碼,直接回車(chē)。

圖片

然后就可以看到我們?cè)赾lion中設(shè)置斷點(diǎn)的代碼邏輯被攔截,下面我們就可以進(jìn)行調(diào)試和代碼閱讀了。

問(wèn)題記錄

在整個(gè)過(guò)程中,特別是編譯階段遇到了很多問(wèn)題,這里也簡(jiǎn)單記錄一下,相信不同的同學(xué)進(jìn)行這個(gè)過(guò)程中都會(huì)遇到不同的問(wèn)題,大家耐心解決。

1.default.cfg不存在

編譯時(shí)會(huì)有如下報(bào)錯(cuò):

CMake Error: File /home/homer/work/c++/mysql-8.0.28/router/src/harness/tests/data/logger.d/default.cfg does not exist.
CMake Error at router/cmake/testing.cmake:211 (CONFIGURE_FILE):

可以在 cmake配置文件中找到如下片段,直接刪除。

CONFIGURE_TEST_FILE_TEMPLATES(${CMAKE_CURRENT_SOURCE_DIR}/data
"tests-good-1.cfg.in;tests-good-2.cfg.in;tests-start-1.cfg.in")
SET(TEST_FILES
logger.cfg
magic-alt.cfg
tests-bad-1.cfg
tests-bad-2.cfg
tests-bad-3.cfg
)

2.編譯警告作為錯(cuò)誤處理

在編譯過(guò)程中,發(fā)現(xiàn)編譯器會(huì)把warning當(dāng)做error處理,導(dǎo)致整個(gè)編譯過(guò)程失敗。具體報(bào)錯(cuò)如下所示。

cc1plus: all warnings being treated as errors

經(jīng)過(guò)搜索最終在 https://dev.mysql.com/doc/mysql-sourcebuild-excerpt/8.0/en/compilation-problems.html 文檔中找到了對(duì)應(yīng)的解決版本,需要將DMYSQL_MAINTAINER_MODE設(shè)置為false,否則就會(huì)導(dǎo)致編譯器將warning作為error處理。

嵌入可以理解為一種組合或者代理模式的自動(dòng)語(yǔ)法糖。

3.編譯cache

編譯異常后,需要?jiǎng)h除對(duì)應(yīng)的 cmake cache 后再次進(jìn)行編譯,否則每次都會(huì)讀取緩存進(jìn)行相同的報(bào)錯(cuò)。

責(zé)任編輯:武曉燕 來(lái)源: 程序員歷小冰
相關(guān)推薦

2023-03-29 08:13:48

MySQL檢索成本

2013-05-28 10:52:07

Android開(kāi)發(fā)移動(dòng)開(kāi)發(fā)移動(dòng)應(yīng)用

2022-10-10 08:01:08

MySQL字典表

2021-06-03 19:13:06

MySQLJson數(shù)據(jù)

2018-11-28 15:00:58

MySQLGROUP BY索引

2023-01-02 08:20:14

MySQL數(shù)據(jù)庫(kù)

2017-03-27 15:15:43

Hive源碼編譯

2011-03-08 10:18:18

Visual StudMongoDB

2022-08-29 08:01:01

MySQL配置Windows

2021-10-19 10:26:31

MySQL.MySQLJSON

2021-10-17 19:52:40

Python:源碼編譯器

2021-02-02 21:50:31

MySQL 8.0ExcelMySQL 5.7

2021-05-31 19:50:04

MySQL自增鎖InnoDB

2023-03-28 07:12:21

開(kāi)源IoT平臺(tái)源碼

2024-03-25 07:30:03

MySQL數(shù)據(jù)庫(kù)SQL日志

2025-02-14 10:03:40

2024-08-05 10:13:59

MySQL大數(shù)據(jù)優(yōu)化

2021-09-08 06:51:53

CountDownLa閉鎖源碼

2020-12-31 05:35:53

MySQL 8.0MySQL 5.7JSON

2024-01-30 08:01:22

MySQL數(shù)據(jù)庫(kù)分組排序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 超碰人人艹 | 日本不卡免费新一二三区 | 国产一区二区免费 | 欧美国产免费 | 国产探花在线精品一区二区 | 在线看av网址 | 二区在线观看 | 99热在线播放 | 欧美日韩精品免费观看 | 日本小电影网站 | 亚洲欧美成人影院 | www.天天操.com | gav成人免费播放视频 | 日韩免费视频一区二区 | 91高清视频在线观看 | 中文字幕亚洲一区 | 国产在线精品一区二区 | 国产人久久人人人人爽 | 国产精品网址 | 美国黄色毛片 | 狠狠色综合久久婷婷 | 黄色免费在线观看网站 | www亚洲精品| 日日操视频 | 午夜看片 | 国产精品一区二区久久 | 中文字幕免费中文 | 久草在线青青草 | 国产精品精品视频 | 国产一区二区三区亚洲 | 99国内精品久久久久久久 | 欧美lesbianxxxxhd视频社区 | 中文字幕日韩欧美一区二区三区 | 日韩免费高清视频 | 狠狠爱视频 | 小草久久久久久久久爱六 | 成人国产在线视频 | 精品国产免费一区二区三区演员表 | 国产 91 视频| 亚州中文| 久久久999国产精品 中文字幕在线精品 |