MySQL

macbook에서 MySQL debugging

lejpower 2024. 5. 13. 21:50
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

 

includes boost headers를 선택하는 화면

 

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