MySQL 5.7 编译调试指南(Ubuntu 16.04 + MacOS 10.15)

本文主要介绍在MacOS 10.15Ubuntu 16.04系统下编译构建MySQL 5.7.30并使用JetBrains CLion(以下简称CLion)进行运行调试的方法。

下载源码

可以从两种方式下载MySQL源代码:

从官方代码库下载最新源代码

# clone过程可能耗时比较长
git clone https://github.com/mysql/mysql-server.git
# 可以切换至指定版本对应分支
git checkout 5.7

下载源代码分发包

MySQL提供了各个版本的源码分发包供下载。下载地址:MySQL Product Archives,选择指定版本下载解压即可。

安装依赖

对于各个依赖或者工具,安装前可以先验证一下是否已经安装,一些工具系统已经预装。

1. 构建工具 CMake + make

Ubuntu上:

sudo apt install cmake make

MacOS上:

brew install cmake make

MySQL 5.7 Reference Manual建议的makeGNU make 3.75或者更高版本。

2. 编译工具 GCC/Clang

Ubuntu上,MySQL可以使用GCC或者Clang来编译,这里我们使用apt来安装GCC

sudo apt install gcc

MacOS上,MySQL会使用Clang编译器来编译,一般MacOS系统已经安装好了Clang,如果没有的的话可以通过安装Xcode来方便地安装Clang。可以在App Store中下载完整Xcode,或者使用如下命令来安装Xcode command line tools

xcode-select --install

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的GCC最低版本是4.4,支持的Clang最低版本是3.3

3. OpenSSL

Ubuntu下:

sudo apt install openssl libssl-dev

MacOS下:

brew install openssl

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的最小OpenSSL版本是1.0.1

4. Boost

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,必须要使用1.59.0版本。在Boost Version History下载Boost 1.59.0并解压。

因为1.59.0是比较老的版本,所以并不推荐直接使用包管理器在全局安装一个旧版本的Boost,所以我们这里采用下载后在构建时指定其路径的方法。

5. ncurses

Ubuntu下:

sudo apt-get install libncurses5-dev

MacOS下:

brew install ncurses

6. Bison

Ubuntu下:

sudo apt-get install bison

MacOS下:

brew install bison

根据MySQL 5.7 Reference Manual,对于MySQL 5.7,支持的bison最低版本是2.1

编译构建

为了不影响机器上原本已经安装的MySQL,在配置构建过程中,我们自定义了一些配置避免与机器上另外的MySQL实例冲突。

# 进入源码目录
cd mysql-server
# 创建构建文件的目录及数据目录、临时文件目录
mkdir -p bld/data bld/tmp
# 配置,"/home/jiajiawang/workspace/mysql-server/"为源码目录的绝对路径
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/jiajiawang/workspace/mysql-server/bld -DMYSQL_DATADIR=/home/jiajiawang/workspace/mysql-server/bld/data  -DMYSQL_UNIX_ADDR=/home/jiajiawang/workspace/mysql-server/bld/data/mysql.sock -DTMPDIR=/home/jiajiawang/workspace/mysql-server/bld/tmp/ -DMYSQL_TCP_PORT=3336 -DWITH_BOOST=/home/jiajiawang/software/boost_1_59_0

# 构建
make
# 安装MySQL
make install

上面配置的目录及文件位置最好都配置成绝对路径

CMake选项说明:

参数 含义 默认值
CMAKE_BUILD_TYPE 生成的构建类型,可选值有:RelWithDebInfoDebug ,使用Debug可以禁用优化,更有助于调试 RelWithDebInfo
CMAKE_INSTALL_PREFIX 指定MySQL安装路径 /usr/local/mysql
MYSQL_DATADIR 指定MySQL数据目录
MYSQL_UNIX_ADDR 指定Unix socket文件目录 /tmp/mysql.sock
TMPDIR 指定临时文件目录
MYSQL_TCP_PORT MySQL启动TCP端口号 3306
WITH_BOOST 指定Boost依赖的路径

更多选项说明请参考:MySQL 5.7 Reference Manual

配置并启动MySQL

1. 数据库初始化

cd bld

使用如下命令可以用来初始化数据库。两个参数的区别是--initialize会为root@localhost用户生成一个随机密码,而--initialize-insecure会设置root@localhost用户密码为空:

bin/mysqld --initialize
# 或者
bin/mysqld --initialize-insecure

创建加密连接需要的文件:

bin/mysql_ssl_rsa_setup

2. 启动 MySQL Server

启动MySQL Server

bin/mysqld

关于其他启动方式,参考:MySQL 5.7 Reference Manual

3. 使用 MySQL Client 连接 Server

使用MySQL Client连接Server

# 如果没有生成密码的话可以不指定-p
bin/mysql -uroot -p

使用初始化时生成的随机密码登录后需要修改密码才可以进行其他操作:

alter user 'root'@'localhost' identified by 'root';

4. 关闭MySQL Server

使用ps命令找到mysqld的进程ID,使用kill -9 <pid>杀掉进程。

导入CLion并运行/调试

  1. 导入CLion
  2. 设置CMake参数。点击File菜单栏,Settings | Build, Execution, Deployment | CMake,在CMake options输入框中输入上文执行cmake命令时的参数。
    image
  3. 运行/调试MySQL。点击Run菜单栏,Edit Configurations,左侧CMake Application列出了MySQL中的各个程序,例如mysqldMySQL ServermysqlMySQL CLient,可以在对应的Program arguments中配置各种参数。

参考

  1. Installing MySQL from Source
  2. Postinstallation Setup and Testing
  3. Server Command Options
  4. Running Multiple MySQL Instances on One Machine
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358