安装
- MySQL gcc13 编译成功
- MySQL 当前最高只支持 gcc11
- 后续使用高版本gcc编译,测试性能,当前已经是gcc15
- 需要解决一些编码错误
- 在编译 release 的时候,需要把 CPPFLAGS 去掉
mysql配置文件
有些配置只能在初始化的时候配置,一旦配置完成之后,就不能再修改了,所以需要预先确定自己的参数配置
名字为 my.cnf ,可以存在在多个位置,按照优先级读取,按照sever和client进行分组设置,分组的名字是启动的程序名字,例如 mysqld, mysqladmin, mysqldump 等。 此外还有两个独立的分组 server 和 clint 单独表述服务端和客户端
-
server 的启动文件是 mysqld,所有直接或间接调用 mysqld 的程序都会调用其配置文件
-
client 的启动文件是 mysql,mysqladmin, mysqldump 等,这些程序会读取 client 配置文件
-
具体的程序和实现有关,有些程序是脚本,而有的是单独的程序
-
相同的配置项以出现在最后的选项为主
# /etc/my.cnf
[mysqld]
lower_case_table_names=1
#performance_schema=off
log-error=/tmp/logerror.log
general_log=on
general_log_file=/tmp/mysqllog.log
slow_query_log = on
log-queries-not-using-indexes=on
slow-query-log-file=/tmp/mysqlslow.log
long_query_time=20
编译安装
docker 安装
docker run -itd --name mdev --hostname vscode --cap-add=SYS_PTRACE --privileged=true \
--mount type=bind,source=/home/asky/.mdep/boost_1_77_0,target=/home/vscode/.mdep/boost_1_77_0 \
--shm-size 32G dev bash
docker exec -it -u vscode mdev bash
docker cp /home/asky/percona_8032 mdev:/home/vscode
sudo chown -R vscode:vscode percona_8032
alias dev_msql='docker exec -it -u vscode mdev zsh'
alias stop_msql='docker stop mdev'
alias start_msql='docker start mdev'
sudo apt install g++-11 gcc-11 gdb cmake git vim clangd
sudo apt-get install -y ninja-build libnuma-dev libcurl4-openssl-dev
sudo apt-get install -y libncurses5-dev pkg-config libreadline-dev
sudo apt install libtirpc-dev libpam-dev bison flex zsh
sudo apt update
sudo apt-get -y install git vim gcc-15 g++-15
sudo apt-get -y install ninja-build
sudo apt-get install libedit-dev
sudo apt-get install liblz4-dev
sudo apt-get install libicu-dev
sudo apt-get install libprotobuf-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libprotobuf-dev
sudo apt-get install protobuf-compiler
sudo apt-get install protobuf-c-compiler
sudo apt-get install libprotobuf-c-dev
sudo apt-get install libprotoc-dev
sudo apt-get install libtirpc-dev
sudo apt-get install zsh
sudo apt-get install curl flex bison g++ gcc gdb make libzstd-dev libxml2-dev libcurl4-openssl-dev vim libbz2-dev \
libperl-dev software-properties-common pkg-config libreadline-dev python3-dev libldap-dev zlib1g-dev \
openssh-server iputils-ping libxslt-dev libpam-dev libssl-dev libreadline6-dev libssh2-1-dev cmake ninja-build sudo locales
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110
# sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
cmake -DCMAKE_BUILD_TYPE:STRING=Debug \
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE \
-DWITH_TURBO_MTR_TEST=OFF \
-DWITH_TURBO=ON \
-DWITH_QUERY_PLAN_PLUGIN=ON \
-DFEATURE_SET=community \
-DWITH_PAM=ON \
-DWITH_ROCKSDB=OFF \
-DWITH_TOKUDB=OFF \
-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \
-DWITH_KEYRING_VAULT=OFF \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_ZLIB=bundled \
-DWITH_NUMA=ON \
-DWITH_LIBEVENT=bundled \
-DWITH_SSL=system \
-DWITH_AUTHENTICATION_LDAP=OFF \
-DDOWNLOAD_BOOST=0 \
-DWITH_BOOST=/home/vscode/.mdep/boost_1_77_0 \
-DWITH_LICENSE=ON \
-DWITH_DBLINK=0 \
-DCMAKE_C_COMPILER=/usr/bin/gcc-11 \
-DCMAKE_CXX_COMPILER=/usr/bin/g++-11 \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DINSTALL_MYSQLTESTDIR=0 \
-DCMAKE_INSTALL_PREFIX=/home/vscode/.grdb \
--no-warn-unused-cli \
-S/home/vscode/percona \
-B/home/vscode/percona/build/debug \
-G Ninja
export PATH=/home/vscode/.percona/bin:$PATH
export LD_LIBRARY_PATH=/home/vscode/.percona/lib:$LD_LIBRARY_PATH
alias imysql='mysql -u root'
alias mstart='/home/vscode/.percona/support-files/mysql.server start --skip-grant-tables'
alias mstop='/home/vscode/.percona/support-files/mysql.server stop'
- MySQL 使用 cmake 管理项目
- MySQL 源码中 test 占据非常大的一部分,在build和安装中,会有多分拷贝
- INSTALL_MYSQLTESTDIR 不安转 test。开发中,test 可以直接在 build 目录下测试
- 下载boost依赖
git clone http://gitlab.greatopensource.com/deps/boost_1_77_0.git
- 拉取依赖
git submodule
git submodule sync --recursive
git submodule update --init --recursive
- 编译安装及环境配置 这里使用的是 vscode 开发,所以一些vscode配置如下,包括安装位置,clangd配置,项目文件夹可见性配置
{
"clangd.arguments": [
"--compile-commands-dir=build/debug",
"--all-scopes-completion",
"--completion-style=bundled",
"--cross-file-rename",
"--header-insertion=iwyu",
"--header-insertion-decorators",
//"--background-index",
"--clang-tidy",
"--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*",
"-j=6",
"--pch-storage=disk",
"--function-arg-placeholders=false",
],
// cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DWITH_TURBO_MTR_TEST=OFF -DWITH_TURBO=ON -DWITH_QUERY_PLAN_PLUGIN=ON -DCMAKE_INSTALL_PREFIX=/home/asky/.grdb -DFEATURE_SET=community -DWITH_PAM=ON -DWITH_ROCKSDB=OFF -DWITH_TOKUDB=OFF -DGROUP_REPLICATION_WITH_ROCKSDB=OFF -DWITH_KEYRING_VAULT=OFF -DWITH_INNODB_MEMCACHED=ON -DWITH_ZLIB=bundled -DWITH_NUMA=ON -DWITH_LIBEVENT=bundled -DWITH_SSL=system -DWITH_AUTHENTICATION_LDAP=OFF -DDOWNLOAD_BOOST=0 -DWITH_BOOST=/home/asky/.mdep/boost_1_77_0 -DWITH_LICENSE=ON -DWITH_DBLINK=0 -DCMAKE_EXPORT_COMPILE_COMMANDS=True -DCMAKE_C_COMPILER=/usr/bin/gcc-11 -DCMAKE_CXX_COMPILER=/usr/bin/g++-11 -DCMAKE_POLICY_VERSION_MINIMUM=3.5 --no-warn-unused-cli -S/home/asky/percona-server -B/home/asky/percona-server/build/debug -G Ninja
"cmake.configureArgs": [
// "-DCMAKE_BUILD_TYPE=RelWithDebInfo",
// "-DBUILD_CONFIG=mysql_release",
"-DWITH_TURBO_MTR_TEST=OFF",
"-DWITH_TURBO=ON",
"-DWITH_QUERY_PLAN_PLUGIN=ON",
"-DCMAKE_INSTALL_PREFIX=/home/asky/.grdb",
"-DFEATURE_SET=community",
"-DWITH_PAM=ON",
"-DWITH_ROCKSDB=OFF",
"-DWITH_TOKUDB=OFF",
"-DGROUP_REPLICATION_WITH_ROCKSDB=OFF",
"-DWITH_KEYRING_VAULT=OFF",
"-DWITH_INNODB_MEMCACHED=ON",
"-DWITH_ZLIB=bundled",
"-DWITH_NUMA=ON",
"-DWITH_LIBEVENT=bundled",
"-DWITH_SSL=system",
"-DWITH_AUTHENTICATION_LDAP=OFF",
"-DDOWNLOAD_BOOST=0",
"-DWITH_BOOST=/home/asky/.mdep/boost_1_77_0",
"-DWITH_LICENSE=ON",
"-DWITH_DBLINK=0",
"-DCMAKE_EXPORT_COMPILE_COMMANDS=True",
"-DCMAKE_C_COMPILER=/usr/bin/gcc-11",
"-DCMAKE_CXX_COMPILER=/usr/bin/g++-11",
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
],
"cmake.buildDirectory": "${workspaceFolder}/build/debug",
"files.exclude": {
"**/extra": true,
"boost_1_77_0": true
},
"files.watcherExclude": {
"**/extra": true,
"boost_1_77_0": true
},
"explorer.autoRevealExclude": {
"**/extra": true,
"boost_1_77_0": true
},
"search.exclude": {
"**/extra": true,
"boost_1_77_0": true
},
"cmake.automaticReconfigure": false,
"cmake.autoSelectActiveFolder": false,
"cmake.configureOnEdit": false,
"cmake.configureOnOpen": false,
}
- 配置环境变量
export PATH=/home/asky/.percona/bin:$PATH
export LD_LIBRARY_PATH=/home/asky/.percona/lib:$LD_LIBRARY_PATH
alias imysql='mysql -u root'
alias mstart='/home/asky/.percona/support-files/mysql.server start --skip-grant-tables'
alias mstop='/home/asky/.percona/support-files/mysql.server stop'
- 测试
// test
cd mysql-test
./mtr --force \
--max-save-core=0 \
--max-save-datadir=0 \
--max-test-fail=0 \
--verbose-restart \
--retry=0 \
--big-test \
--testcase-timeout=120 \
--suite-timeout=6000 \
--mysqld=--synonym-translation-enabled=on \
--debug-server \
--parallel=50 \
--suite=main,sys_vars,ora_compat,awr,innodb,mac,system_role \
--skip-test-list=skip_err_test_list_for_mtrdebug
- 启动mysql
mysqld --initialize
mstart
imysql
mstop
// 如果需要修改密码,
alter user 'root'@'localhost' identified by '123456';
mysqld &
mysql -u root -p