Skip to content
On this page

MySQL 8.0.x 在Linux下的源码构建与初始化(以CentOS + MySQL 8.0.22为例)

前言:由于项目实践需要,我不得不踏上源码编译MySQL的道路,虽然第一次做的时候见一个坑跳一个,但是在成功编译后,一股成就感涌上心头。这篇文章将分享我编译MySQL的步骤和经验,当然也会有持续更新的可能。

0. MySQL编译前置条件

0.0 更新包管理器

bash
yum update

0.1 查看当前是否运行MySQL实例并终止

bash
lsof -i:3306
# 或
/etc/init.d/mysqld status
# 或
systemctl mysqld status

killall mysqld

0.2 检测依赖项是否存在

bash
<executable> 
# 或
<executable> -v
# 或
<executable> --version

0.3 需要安装的依赖项以及安装方法

cmake

bash
yum install -y cmake

git

bash
yum install -y git

make

bash
yum install -y make

openssl

bash
yum install -y openssl*

ncurses-devel

bash
yum install -y ncurses-devel

libtirpc

bash
yum install -y libtirpc libtirpc-devel

rpcgen

bash
yum install -y rpcgen

1. 下载并解压源码压缩包

由于编译MySQL需要Boost,因此我们直接下载带Boost的MySQL压缩包,然后将Boost放置在/usr/local目录下。

bash
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.22.tar.gz
tar -zxvf mysql-boost-8.0.22.tar.gz
mv ./mysql-boost-8.0.22/boost /usr/bin

2. 编译MySQL

bash
cd mysql-boost-8.0.22
mkdir build
cd build
cmake .. \
    [-DCMAKE_C_COMPILER=<gcc>] \ # C 编译器
    [-DCMAKE_CXX_COMPILER=<g++>] \ # C++ 编译器
    [-DBUILD_CONFIG=<mysql_release>] \ # 构建配置
    [-DCMAKE_BUILD_TYPE=<Release>] \ # MySQL构建类型
    [-DCMAKE_C_FLAGS=""] \ # 传递给 C 编译器的参数
    [-DCMAKE_CXX_FLAGS=""] \ # 传递给 C++ 编译器的参数
    [-DCMAKE_CXX_LINK_FLAGS=""] \ # 传递给 C++ 编译器连接的参数
    [-DWITH_BOOST=<../boost>] # Boost安装路径
make && make install [-DESTDIR=$destdir] # 安装路径

3. 初始化MySQL

3.1 添加用户和组

bash
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

3.2 初始化MySQL实例

bash
cd $destdir/usr/local/mysql/
./bin/mysqld --initialize --user=mysql
# 这里会显示MySQL自动生成的密码$password, 需要记录
./bin/mysql_ssl_rsa_setup

启动并登陆MySQL服务

bash
./bin/mysqld_safe --user=mysql &
# 按下Enter
./bin/mysql -uroot -p"$password"
# 如果$password实在奇怪 可以不需要填写$password 按下enter后再输入密码
mysql>alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)