cd /Users/juni/Private/Git/MySQL-source/mysql-8.0.37/BUILD
./bin/mysql -u root -p${PASSWORD}
먼저 관련 패키지를 인스톨 한다.
brew install openssl
brew install cmake
source code를 다운로드 받는다.
https://dev.mysql.com/downloads/file/?id=528066
cd /Users/uijun-lee/Private/Git/MySQL-source
mv ~/Downloads/mysql-boost-8.0.37.tar.gz .
tar zxvf mysql-boost-8.0.37.tar.gz
mkdir BUILD ; cd BUILD
cmake를 실행한다.
cmake -DWITH_DEBUG=1 -DWITH_BOOST=../boost -DWITH_SSL=/opt/homebrew/opt/openssl@3 ..
병렬 처리를 위해서 cpu의 코어수를 확인한다.
sysctl -n hw.physicalcpu
4병렬처리로 make를 한다.
make -j4
정확히 빌드 되어 있는지 테스트를 실행해 본다.
./mysql-test/mtr --parallel=4
VScode에서 디버그
$ mkdir {etc,data}
$ echo '[mysqld]' > etc/my.cnf
$ echo "basedir=`pwd`" >> etc/my.cnf
$ echo "datadir=`pwd`/data" >> etc/my.cnf
$ bin/mysqld --defaults-file=etc/my.cnf --initialize
$ ./bin/mysqld --defaults-file=etc/my.cnf &
$ ./bin/mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin';
root의 패스워드는 초기화를 할때 출력되어 진다.
초기화의 아웃풋을 잘 확인해 보길 바란다.
debugging을 위해서 c_cpp_properties.json, launch.json를 설정한다.
$ cat .vscode/c_cpp_properties.json
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/opt/homebrew/opt/openssl@3/include/openssl",
"${workspaceFolder}/mysql-8.0.37/bld/include",
"${workspaceFolder}/mysql-8.0.37/**"
],
"defines": [
"MYSQL_SERVER=1",
"MUTEX_EVENT=1",
"ENABLED_DEBUG_SYNC=1"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c99",
"cppStandard": "c++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
$ cat .vscode/launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) ",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/mysql-8.0.37/BUILD/bin/mysqld",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/mysql-8.0.37",
"environment": [],
"externalConsole": false,
"MIMode": "lldb"
}
]
}
클라이언트에서 이것저것 실행하면서 디버깅을 해보도록 하자
cd /Users/juni/Private/Git/MySQL-source/mysql-8.0.37/BUILD
./bin/mysql -u root -p${PASSWORD}
이것으로 소스레벨 분석이 가능해 진다.
'MySQL' 카테고리의 다른 글
ULID, UUID와 MySQL B-tree index (0) | 2022.02.25 |
---|---|
MySQL InnoDB architecture (0) | 2021.09.05 |
Innodb lock monitor (0) | 2021.07.12 |
페이지 통합과 분할 (0) | 2021.07.12 |
Gap lock & Next key lock (0) | 2021.07.08 |