0. 环境
Ubuntu 18.04 虚拟机 + VMware WorkStation Pro
1. 准备工作
CMake
sudo apt-get install cmake
GNU Make
Ubuntu 系统本身的 make 就是 GNU 版本的,所以不用额外安装。网上看到说要加一个软连接,当执行gmake
的时候让系统实际上执行make
,但是 MySQL 的编译安装直接用make
就行了。所以这边什么都不用干。
sudo ln -s /usr/bin/make /usr/bin/gmake
GCC 5.3+
sudo apt-get install gcc
一般系统会自带 GCC,可以通过gcc -v
查看版本。
Boost
MySQL 构建所需,不是直接的依赖。不同版本的 MySQL 所需 Boost 版本不同,因此可以等 cmake 命令报错之后再决定安装什么版本。
ncurses
sudo apt-get install libncurses5-dev
SSL
Ubuntu 要安装 libssl-dev,Redhat 系列的安装 openssl-devl。不需要安装普通的 SSL。
sudo apt-get install libssl-dev
Bison 2.1+
只有 Development Source Tree 需要。
2. 编译
下载源码
解压
tar zxvf mysql-VERSION.tar.gz
// zip
unzip mysql-VERSION.zip
编译安装
1. 新建一个 build
文件夹,任意位置都可以。然后用cmake
命令进行配置。
sudo cmake <source-directory> -DWITH_SSL=system -DWITH_BOOST=/usr/local/boost_1_73_0
2. 构建/安装源码
make 的过程超级慢,虚拟机配置了 6G 内存 + 40G 硬盘勉强能跑完。中间如果发生空间不够、无法加载xxx之类的错误都是因为存储不够。
sudo make
sudo make install
之后如果修改了源码,需要重新编译,可以使用以下两条命令清除旧的build文件。
make clean
rm CMakeCache.txt
3. 初始化数据目录
// 进入 MySQL 的安装目录
cd /usr/local/mysql
// 新建文件夹 mysql-files,并且给 mysql 用户组与用户赋予owner的权限
// chmod 的第二个参数:owner/group/other(read/write/execute)
sudo mkdir mysql-files
sudo chown mysql:mysql mysql-files
sudo chmod 750 mysql-files
// 初始化,该命令会产生初始密码,需要记录
sudo bin/mysqld --initialize --user=mysql
4. 启动服务端
cd /usr/local/mysql
sudo bin/mysqld_safe --user=mysql &
5. 启动客户端
mysql -u root -p
// 进去之后第一件事改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password1';
6. 安装配置 IDE
CLion 官网:https://www.jetbrains.com/clion/
Ubuntu 系统直接下 .tar.gz,解压之后进入clion-xxx/bin
目录执行./clion.sh
启动之后选择 open project,选中解压后的 MySQL 源码根目录或者CMakeLists.txt 都可以导入项目。
普通的配置
1. Files | Settings
首先设置一下 CMake 的选项:
2. Configuration
然后在 Edit Configuration 里设置一下 mysqld 这个可执行文件的命令行参数。注意所有的 application 是乱序的,找的时候需要耐心,或者直接搜索。。
乞丐的配置
该配置的产生原因:内存太小,让 IDE 编译会挂掉。。但是又不想直接用命令行的 gdb 调试。。
在之前的基础上修改这几个地方:
1. Files | Settings
Build directory 改成之前命令行编译成功时用的那个目录。
2. Edit Configuration
找到 mysqld,重新选择 Executable 为我们之前用命令行安装的那个 mysqld。
然后在 Before launch 里把 build 去掉。
总而言之,我们不希望让 IDE 执行源码的编译与安装操作,只想白嫖文本编辑、自动跳转、代码联想、图形化 Debug 等功能。
配置完之后 Run 一下试试:
调试
启动服务端
直接点 Debug 按钮,然后查看 Debugger 的 Console,出现和上一节结尾同样的log就算成功了,这一过程可能非常缓慢。
另外,查看端口是否开始监听:netstat | grep 3306
启动客户端
和平时一样打开 mysql、输密码,可以观察到这一过程完全是在客户端进行的,只有当密码输完然后按下 Enter 才会发到服务端验证。