Debian10编译安装Mysql5.7.44 笔记250706

71 阅读24分钟

Debian10编译安装Mysql5.7.44 笔记250706

单一脚本安装


### 1. 安装编译依赖
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz




### 2. 创建 MySQL 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

###    3. 下载编译包,解压并配置编译参数
mkdir -pm 777 ~/InstallSetup/mysql && cd $_
if [ ! -e mysql-boost-5.7.44.tar.gz ] ;then
    sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
fi
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_READLINE=1 \
  -DWITH_SYSTEMD=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_JEMALLOC=system \
  -DWITH_LTO=ON \
  -DWITH_DEBUG=0 \
  -DENABLED_LOCAL_INFILE=0 \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQLX_TCP_PORT=33060 \
  -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
  -DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
  -DSYSTEMD_PID_DIR=/var/run/mysqld \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF \
  -DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DFORCE_INSOURCE_BUILD=1 \
  -DENABLE_DOWNLOADS=1   -DWITH_BOOST=../boost/boost_1_59_0  # 用于自带boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以

### 4. 编译, 安装, 设置环境变量
####  1. 编译.安装
make -j$(nproc)       # 使用所有CPU核心
sudo make install
####  2. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile


###   五. 创建配置 mysqld 服务
#### 1. 创建目录设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld

#### 2. 初始化数据库
#####   root无密码初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \
  --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data



#### 3. 创建配置文件

sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock        ### 默认: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

[client]
socket = /var/run/mysqld/mysqld.sock        ### 默认: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE




#####  4. 创建启动服务

###### 创建 systemd 服务

sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

EOFxxxXXXeof---foeXXXxxxFOE

###### 启动启用服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now


















分步安装

1. 安装编译依赖

sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz




2. 创建 MySQL 用户和组

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

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/nologin mysql




3. 下载编译包,解压并配置编译参数

MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。源码包 mysql-boost-5.7.44.tar.gz 已包含正确版本。

下载编译自带 Boost库 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_READLINE=1 \
  -DWITH_SYSTEMD=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_JEMALLOC=system \
  -DWITH_LTO=ON \
  -DWITH_DEBUG=0 \
  -DENABLED_LOCAL_INFILE=0 \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQLX_TCP_PORT=33060 \
  -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
  -DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
  -DSYSTEMD_PID_DIR=/var/run/mysqld \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF \
  -DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DFORCE_INSOURCE_BUILD=1 \
  -DENABLE_DOWNLOADS=1   -DWITH_BOOST=../boost/boost_1_59_0  # 用于自带boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
下载编译不带 Boost库 的版本

MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。

boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包

下载编译不带 Boost库 的版本

mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_READLINE=1 \
  -DWITH_SYSTEMD=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_JEMALLOC=system \
  -DWITH_LTO=ON \
  -DWITH_DEBUG=0 \
  -DENABLED_LOCAL_INFILE=0 \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQLX_TCP_PORT=33060 \
  -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
  -DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
  -DSYSTEMD_PID_DIR=/var/run/mysqld \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF \
  -DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DFORCE_INSOURCE_BUILD=1 \
  -DENABLE_DOWNLOADS=1    -DWITH_BOOST=/usr/local/boost    -DDOWNLOAD_BOOST=1    # 用于无boost版,会自动下载boost1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹
  ## 只能用boost.1.59.0版  -DDOWNLOAD_BOOST=1 会自动下载boost.1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹

也可以手动安装 boost 库(可选) boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包 boost_1_59_0.tar.gz 80多兆 , mysql-boost-5.7.44 50多兆

mkdir -pm 777 /tmp/install/boost && cd $_
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost/




4. 编译, 安装, 设置环境变量

1. make编译
make -j$(nproc)       # 使用所有CPU核心
2. make安装
sudo make install
3. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile




创建配置 mysqld 服务

1. 创建目录设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
2. 初始化数据库
root无密码初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \
  --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data
root随机密码初始化
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3. 创建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock        ### 默认: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

[client]
socket = /var/run/mysqld/mysqld.sock        ### 默认: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
4. 创建启动服务
创建启动服务方式1: 创建 systemd 服务

创建 systemd 服务

sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

EOFxxxXXXeof---foeXXXxxxFOE

启动启用服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now

移除服务

sudo systemctl stop mysqld
sudo systemctl disable mysqld --now
sudo rm -rf /etc/systemd/system/mysqld.service
sudo systemctl daemon-reload

创建启动服务方式2: 用 SysV init 启动脚本方式创建服务

/usr/local/mysql/support-files/mysql.server 是现成的 SysV init 启动脚本

sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld

启动

sudo /etc/init.d/mysqld start

设置开机自启

sudo update-rc.d mysqld defaults

Debian10已支持用 systemctl 启动启用 /etc/init.d 的 服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now

















详解分步安装

1. 安装编译依赖

sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz

以下是对您列出的 Debian 10 编译依赖包的详细讲解和建议优化方案。这些依赖主要用于编译 MySQL 5.7.44 等大型 C/C++ 项目:


               依赖包分类说明

                    1. 核心编译工具

包名作用说明必要性
cmake跨平台构建系统工具 (MySQL 使用 CMake 构建)★★★★★
gcc g++GNU C/C++ 编译器★★★★★
build-essential包含 make, gcc, libc-dev 等基础编译工具★★★★★
pkg-config帮助查找库路径和编译标志的工具★★★★☆

                    2. MySQL 必需依赖

包名作用说明必要性
libncurses5-dev终端处理库 (mysql 命令行依赖)★★★★★
libssl-devOpenSSL 开发库 (加密连接支持)★★★★★
libreadline-dev命令行编辑功能支持★★★★☆
zlib1g-dev数据压缩库 (日志压缩等)★★★★☆
bison语法分析器生成器 (SQL 解析器依赖)★★★★★
libaio-dev异步 I/O 支持 (提升 InnoDB 性能)★★★★☆
libnuma-devNUMA 架构支持 (多 CPU 系统优化)★★★☆☆
libboost-all-devBoost C++ 库全集 (MySQL 测试框架依赖)★★★★☆

                    3. 优化增强依赖

包名作用说明必要性
libjemalloc-dev高性能内存分配器 (替代 glibc malloc)★★★☆☆
libtbb-devIntel 线程构建块库 (并行计算优化)★★☆☆☆

                    4. 调试诊断工具

包名作用说明必要性
gdbGNU 调试器★★★☆☆
strace系统调用跟踪工具★★☆☆☆
ltrace库函数调用跟踪工具★★☆☆☆

                    5. 文档生成工具

包名作用说明必要性
doxygenAPI 文档生成器★☆☆☆☆
graphviz图表生成工具 (配合 doxygen)★☆☆☆☆

                    6. 脚本支持

包名作用说明必要性
libjson-perlPerl JSON 模块 (测试脚本依赖)★★★☆☆
curl wget网络下载工具★★★★☆

               优化建议方案

                    方案 1:精简安装 (最小化依赖)

sudo apt install -y \
cmake gcc g++ build-essential \
libncurses5-dev libssl-dev libreadline-dev zlib1g-dev bison libaio-dev \
libjson-perl libboost-all-dev

适用场景:仅需基础编译功能,节省磁盘空间
节省空间:约 500MB

                    方案 2:推荐安装 (平衡方案)

sudo apt install -y \
cmake gcc g++ build-essential \
libncurses5-dev libssl-dev libreadline-dev zlib1g-dev bison libaio-dev \
libjson-perl libnuma-dev libboost-all-dev \
libjemalloc-dev \
gdb curl wget

优势

  • 包含性能优化组件 (jemalloc)
  • 包含调试工具 (gdb)
  • 保留 NUMA 支持
  • 比完整安装节省 300MB+ 空间

                    方案 3:完整安装 (您列出的所有包)

sudo apt install -y \
cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev libboost-all-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz

注意

  • 总大小约 1.2-1.5GB
  • 包含所有调试和文档工具
  • 适合深度开发和性能调优场景

               关键组件说明

  1. Boost 库处理
    MySQL 5.7 需要 Boost 1.59+,Debian 10 默认提供 1.67.0:

    dpkg -s libboost-dev | grep Version  # 验证版本
    

    若编译报错 Could NOT find Boost,需显式指定路径:

    cmake ... -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/boost
    
  2. 内存分配器选择

    • jemalloc:减少内存碎片,适合长期运行服务
    • tcmalloc:(未包含) Google 高性能分配器
      在 my.cnf 中启用:
    [mysqld]
    malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
    
  3. systemd 集成
    libsystemd-dev 用于生成 systemd 服务文件,编译时添加:

    cmake ... -DWITH_SYSTEMD=1
    

    生成服务文件:

    cmake --install . --component systemd
    

               安装后验证

### 检查关键工具
cmake --version | grep -E "3.[0-9]+"
gcc --version | grep "8\."  # Debian10 应为 gcc 8.x
bison --version | grep "3.[0-9]+"

### 检查库文件
ls -l /usr/lib/x86_64-linux-gnu/{libssl.so,libncurses.so,libaio.so}

               清理建议 (编译完成后)

### 移除开发包节省空间 (约 800MB)
sudo apt purge \
'lib*-dev' \
cmake \
doxygen graphviz \
gdb strace ltrace

### 保留运行时依赖
sudo apt-mark manual \
libncurses6 libssl1.1 libreadline7 zlib1g libaio1 \
libnuma1 libjemalloc2 libtbb2

               总结建议

  1. 生产环境编译:使用方案 2,包含性能优化组件
  2. 开发调试环境:使用方案 3,保留诊断工具
  3. 磁盘空间紧张:使用方案 1,后续按需添加
  4. 关键组件:务必确保 cmake, gcc, bison, libssl-dev 正确安装
  5. Boost 处理:Debian 10 自带版本可用,无需额外下载






2. 创建 MySQL 用户和组

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

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/nologin mysql

这两条命令用于为 MySQL 创建专用的系统用户和组,是 MySQL 安装前的重要安全准备步骤。

这两个命令都用于为 MySQL 服务创建专用的系统用户,核心目标相同但拒绝登录的实现方式不同:

         命令对比解析

参数/特性useradd -r -g mysql -s /bin/false mysqluseradd -r -g mysql -s /bin/nologin mysql
创建用户类型系统用户 (-r)系统用户 (-r)
所属用户组加入 mysql 组 (-g mysql)加入 mysql 组 (-g mysql)
Shell 类型/bin/false/bin/nologin
登录行为静默拒绝,无任何输出显示提示信息后拒绝
退出状态码返回非零状态码 (失败)返回非零状态码 (失败)
安全等级⭐⭐⭐⭐☆ (高)⭐⭐⭐⭐☆ (高)
适用发行版所有 Linux 通用所有 Linux 通用

         /bin/false 详解 行为特点

  1. 当用户尝试登录时立即终止会话
  2. 无任何输出(静默拒绝)
  3. 返回错误状态码 1

验证示例

$ sudo -u mysql /bin/bash
## 无错误提示,直接返回命令行
$ echo $?
1

适用场景

  • 需要完全静默拒绝登录的环境
  • 安全审计要求不产生任何登录痕迹
  • 防止攻击者探测到有效用户名

         /bin/nologin 详解 行为特点

  1. 当用户尝试登录时显示预设信息
  2. 输出提示This account is currently not available.
  3. 返回错误状态码 1
  4. 提示信息可通过 /etc/nologin.txt 自定义

验证示例

$ sudo -u mysql /bin/bash
This account is currently not available.
$ echo $?
1

自定义提示信息

## 创建自定义拒绝消息
echo "MySQL service account - Login prohibited" | sudo tee /etc/nologin.txt

适用场景

  • 需要明确提示账户用途的环境
  • 方便系统管理员理解账户性质
  • 符合某些安全合规的明确拒绝要求

         核心共同作用

  1. 权限隔离
    MySQL 服务以该用户身份运行,避免使用 root

  2. 文件所有权
    数据库文件设置为 mysql:mysql 所有:

    drwxr-x--- 4 mysql mysql 4096 /var/lib/mysql
    
  3. 登录防护
    双重保障:

    • Shell 本身拒绝登录
    • /etc/passwd 中标记为不可登录:
      mysql:x:127:133:MySQL Server:/nonexistent:/bin/false
      
  4. 服务安全
    满足 MySQL 的安全要求:

    [mysqld]
    user=mysql  # my.cnf 中必须配置
    

         如何选择?

场景推荐命令原因
生产服务器-s /bin/false静默拒绝更安全
开发/测试环境-s /bin/nologin明确提示避免误操作
安全合规要求明确拒绝消息-s /bin/nologin + 自定义 /etc/nologin.txt满足审计要求
兼容老系统 (Solaris/AIX)-s /bin/false更广泛兼容
Docker 容器环境-s /bin/false减少镜像层大小

         实践建议

  1. 先创建组再创建用户

    sudo groupadd -r mysql
    # 根据环境选择其一
    sudo useradd -r -g mysql -s /bin/false mysql      # 生产推荐
    # 或
    sudo useradd -r -g mysql -s /bin/nologin mysql    # 开发推荐
    
  2. 验证账户属性

    $ grep mysql /etc/passwd
    # 正确输出:
    mysql:x:998:997:MySQL Server:/nonexistent:/bin/false
    
  3. 修复已存在账户

    # 如果已创建但需要修改
    sudo usermod -s /bin/false mysql
    
  4. 数据目录权限

    sudo chown -R mysql:mysql /var/lib/mysql
    sudo chmod 750 /var/lib/mysql
    

📌 关键原则:无论选择哪种方式,都比使用登录 shell(如 /bin/bash)更安全,这是 MySQL 安全部署的基本要求。






3. 下载编译包,解压并配置编译参数

MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。源码包 mysql-boost-5.7.44.tar.gz 已包含正确版本。

下载编译自带 Boost库 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_READLINE=1 \
  -DWITH_SYSTEMD=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_JEMALLOC=system \
  -DWITH_LTO=ON \
  -DWITH_DEBUG=0 \
  -DENABLED_LOCAL_INFILE=0 \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQLX_TCP_PORT=33060 \
  -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
  -DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
  -DSYSTEMD_PID_DIR=/var/run/mysqld \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF \
  -DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DFORCE_INSOURCE_BUILD=1 \
  -DENABLE_DOWNLOADS=1   -DWITH_BOOST=../boost/boost_1_59_0  # 用于自带boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
下载编译不带 Boost库 的版本

MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。

boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包

下载编译不带 Boost库 的版本

mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_READLINE=1 \
  -DWITH_SYSTEMD=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_JEMALLOC=system \
  -DWITH_LTO=ON \
  -DWITH_DEBUG=0 \
  -DENABLED_LOCAL_INFILE=0 \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQLX_TCP_PORT=33060 \
  -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
  -DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
  -DSYSTEMD_PID_DIR=/var/run/mysqld \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF \
  -DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DFORCE_INSOURCE_BUILD=1 \
  -DENABLE_DOWNLOADS=1    -DWITH_BOOST=/usr/local/boost    -DDOWNLOAD_BOOST=1    # 用于无boost版,会自动下载boost1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹
  ## 只能用boost.1.59.0版  -DDOWNLOAD_BOOST=1 会自动下载boost.1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹

也可以手动安装 boost 库(可选) boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包 boost_1_59_0.tar.gz 80多兆 , mysql-boost-5.7.44 50多兆

mkdir -pm 777 /tmp/install/boost && cd $_
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost/



相关cmake配置参数讲解

源码编译安装mysql用到的cmake的配置参数 笔记250401

MySQL 5.7 Source-Configuration Options CMake Option Reference Table 2.14 MySQL Source-Configuration Option Reference (CMake)


               一、基础路径配置

参数说明注意事项
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql安装根目录推荐保持默认
-DMYSQL_DATADIR=/usr/local/mysql/data数据存储目录需手动创建并授权
sudo mkdir -p /usr/local/mysql/data
sudo chown mysql:mysql /usr/local/mysql/data
-DSYSCONFDIR=/etc配置文件目录my.cnf 存放位置

               二、存储引擎配置

参数说明推荐
-DWITH_INNOBASE_STORAGE_ENGINE=1InnoDB 引擎必须启用
-DWITH_PARTITION_STORAGE_ENGINE=1分区表支持按需
-DWITH_ARCHIVE_STORAGE_ENGINE=1ARCHIVE 引擎归档存储
-DWITH_BLACKHOLE_STORAGE_ENGINE=1BLACKHOLE 引擎复制过滤
-DWITH_MYISAM_STORAGE_ENGINE=1MyISAM 引擎兼容旧系统
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1性能监控引擎生产环境建议

               三、系统集成与性能

参数说明优化效果
-DWITH_READLINE=1命令行编辑支持libreadline-dev
-DWITH_SYSTEMD=1Systemd 集成关键参数
• 生成 mysqld.service
• 需后续配置
-DWITH_JEMALLOC=systemJemalloc 内存分配器显著提升性能
• 减少内存碎片
• 提高并发能力
libjemalloc-dev
-DWITH_LTO=ON链接时优化(LTO)激进优化
• 提升运行时性能 5-15%
• 增加编译时间 2-3 倍
• 需要更多内存
-DFORCE_INSOURCE_BUILD=1强制源码内编译简化编译流程

               四、安全与加密

参数说明安全建议
-DWITH_SSL=system系统 OpenSSLlibssl-dev
-DWITH_DEBUG=0禁用调试模式生产必须
-DENABLED_LOCAL_INFILE=1本地文件加载高风险!生产环境设为 0
-DMYSQL_TCP_PORT=3306默认端口建议修改

               五、字符集与压缩

参数说明推荐值
-DDEFAULT_CHARSET=utf8mb4默认字符集Unicode 支持
-DDEFAULT_COLLATION=utf8mb4_general_ci默认校对规则通用排序
-DWITH_ZLIB=system系统 zlib 库zlib1g-dev

               六、编译优化

参数说明性能影响
-DCMAKE_BUILD_TYPE=Release发布模式启用优化
-DBUILD_TESTING=OFF禁用测试套件减少编译时间
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer"C++ 优化-O3:最大优化
-fno-omit-frame-pointer:保留栈帧
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer"C 优化同上

               七、依赖管理

参数说明工作逻辑
-DENABLE_DOWNLOADS=1允许下载依赖需稳定网络
-DWITH_BOOST=/usr/local/boostBoost 库路径MySQL 5.7 必需
-DDOWNLOAD_BOOST=1自动下载 Boost组合逻辑
1. 检查指定路径
2. 不存在则下载
graph LR
    A[开始配置] --> B{检查 /usr/local/boost}
    B -->|存在| C[使用现有Boost]
    B -->|不存在| D[下载Boost 1.59.0]
    D --> E[解压到指定路径]
    C --> F[继续编译]
    E --> F

               新增优化参数详解                     1. Jemalloc 内存分配器 (-DWITH_JEMALLOC=system)

  • 作用:替代 glibc 的 malloc,优化多线程内存管理
  • 优势
    • 减少内存碎片
    • 提高高并发下的性能
    • 降低内存占用
  • 安装依赖
    sudo apt install libjemalloc-dev
    

                    2. 链接时优化 (-DWITH_LTO=ON)

  • 原理:在链接阶段进行全程序优化
  • 效果
    • 提升运行时性能 5-15%
    • 减小二进制体积 10-20%
  • 代价
    • 编译时间增加 2-3 倍
    • 内存需求翻倍(建议 ≥4GB RAM + 4GB Swap)
    • 可能增加编译不稳定性

                    3. 源码内编译 (-DFORCE_INSOURCE_BUILD=1)

  • 作用:强制在源码目录编译(默认推荐 out-of-source 编译)
  • 优点:简化编译流程
  • 缺点:污染源码目录(中间文件混入)
  • 替代方案(推荐):
    mkdir build && cd build
    cmake .. [其他参数]  # 无需 FORCE_INSOURCE_BUILD
    

此配置结合了高级优化技术(LTO + Jemalloc),适合追求极致性能的生产环境,但需要充足的硬件资源支持编译过程。

源码编译安装mysql用到的cmake的配置参数 笔记250401
MySQL 5.7 Source-Configuration Options CMake Option Reference Table 2.14 MySQL Source-Configuration Option Reference (CMake)






4. 编译, 安装, 设置环境变量

1. make编译
make -j$(nproc)       # 使用所有CPU核心
2. make安装
sudo make install
3. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile






创建配置 mysqld 服务

1. 创建目录设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
2. 初始化数据库
root无密码初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \
  --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data
root随机密码初始化
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3. 创建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock        ### 默认: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

[client]
socket = /var/run/mysqld/mysqld.sock        ### 默认: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
4. 创建启动服务
创建启动服务方式1: 创建 systemd 服务

创建 systemd 服务

sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

EOFxxxXXXeof---foeXXXxxxFOE

启动启用服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now

移除服务

sudo systemctl stop mysqld
sudo systemctl disable mysqld --now
sudo rm -rf /etc/systemd/system/mysqld.service
sudo systemctl daemon-reload

创建启动服务方式2: 用 SysV init 启动脚本方式创建服务

/usr/local/mysql/support-files/mysql.server 是现成的 SysV init 启动脚本

sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld

启动

sudo /etc/init.d/mysqld start

设置开机自启

sudo update-rc.d mysqld defaults

Debian10已支持用 systemctl 启动启用 /etc/init.d 的 服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now

















1️⃣ 参考 1

在 Debian 10 上编译安装 MySQL 5.7.44 需要仔细执行以下步骤,我将提供完整指南并优化关键环节:


准备工作

         1. 安装编译依赖

sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison wget libaio-dev \
gcc g++ libjson-perl libnuma-dev

         2. 创建 MySQL 用户和组

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

         3. 安装 Boost 库 (必需)

wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost

编译安装过程

         1. 下载源码

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

         2. 配置编译选项 (关键优化)

mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
  -DENABLE_DOWNLOADS=1 \
  -DWITH_BOOST=/usr/local/boost \
  -DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
  -DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer"

         3. 编译并安装 (使用多核加速)

make -j$(nproc)       # 使用所有CPU核心
sudo make install

系统配置

         1. 设置目录权限

cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld

         2. 初始化数据库

sudo bin/mysqld --initialize-insecure --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data

         3. 创建配置文件

sudo cp support-files/my-default.cnf /etc/my.cnf
sudo nano /etc/my.cnf

添加以下内容:

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock
port = 3306
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

[client]
socket = /var/run/mysqld/mysqld.sock

服务管理

         1. 创建 systemd 服务

sudo nano /etc/systemd/system/mysqld.service

内容如下:

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

         2. 启动服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld

初始设置

         1. 设置环境变量

echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile

         2. 设置 root 密码

mysql -u root --skip-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourSecurePassword';
FLUSH PRIVILEGES;
EXIT;

         3. 安全加固

mysql_secure_installation

按提示完成安全设置


验证安装

mysql --version
# 输出: mysql  Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using  EditLine wrapper

sudo systemctl status mysqld

故障排除指南

         1. 编译错误处理

# 清除缓存后重新配置
rm CMakeCache.txt
cmake .. [原参数]

         2. 启动失败检查

sudo tail -f /var/log/mysql/error.log

         3. 常见错误解决

  • 缺少 libtinfo: sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5
  • 无法创建 PID 文件: sudo chown -R mysql:mysql /var/run/mysqld

         4. 性能优化建议 在 /etc/my.cnf 添加:

innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
thread_cache_size = 10
query_cache_size = 64M

安全注意事项

  1. 生产环境不要使用 --initialize-insecure
  2. 初始化后立即修改 root 密码
  3. 定期备份数据和配置文件
  4. 启用防火墙限制访问:
    sudo ufw allow 3306/tcp
    

通过以上步骤,您可以在 Debian 10 上成功编译安装高性能的 MySQL 5.7.44。编译过程可能需要 30-60 分钟(取决于硬件配置),请确保系统有足够内存(建议至少 2GB)。

















2️⃣ 参考 2

Debian10编译安装MySQL5.7.44详细步骤

         一、环境准备                1. 更新系统并安装依赖

sudo apt update
sudo apt install -y \
  gcc g++ cmake make \
  libncurses5-dev libssl-dev \
  libboost-dev bison libaio-dev \
  libreadline-dev zlib1g-dev \
  pkg-config libsystemd-dev

         二、下载MySQL源码                1. 下载源码包

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

               2. 验证MD5校验值(可选) 从MySQL官方下载页面获取对应平台的MD5值,执行:

md5sum mysql-5.7.44.tar.gz

对比输出与官方值是否一致。

         三、编译配置                1. 创建构建目录并配置

mkdir build
cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_READLINE=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DENABLED_LOCAL_INFILE=1 \
  -DMYSQL_TCP_PORT=3306 \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DENABLE_DOWNLOADS=1 \
  -DDOWNLOAD_BOOST=1 \
  -DWITH_BOOST=/usr/local/include

         四、编译与安装                1. 编译并安装

make -j$(nproc)  # 多核编译加速
sudo make install

         五、初始化配置                1. 创建MySQL用户和组

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

               2. 初始化数据库

cd /usr/local/mysql
sudo mkdir -p data
sudo chown -R mysql:mysql .
sudo bin/mysqld --initialize --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data
  • 记录临时密码:初始化完成后,控制台会输出临时root密码,如:
    A temporary password is generated for root@localhost: XXXXXXXXX
    

         六、启动服务                1. 配置开机启动

sudo cp support-files/mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo systemctl start mysql
sudo systemctl enable mysql

               2. 验证服务状态

sudo systemctl status mysql

         七、安全配置                1. 运行安全脚本

sudo bin/mysql_secure_installation
  • 步骤说明
    1. 输入临时root密码。
    2. 设置新root密码(建议复杂密码)。
    3. 移除匿名用户。
    4. 禁止root远程登录。
    5. 移除测试数据库。
    6. 重新加载权限表。

         八、环境变量配置

echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

         九、验证安装                1. 检查MySQL版本

mysql --version

输出应类似:

mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64)

               2. 登录MySQL

mysql -u root -p

输入设置的root密码,成功登录后执行:

SELECT VERSION();

         十、卸载MySQL

sudo apt purge mysql-server mysql-client mysql-common
sudo rm -rf /etc/mysql /var/lib/mysql /usr/local/mysql
sudo apt autoremove

通过以上步骤,您可以在Debian10系统上成功编译安装MySQL5.7.44,并进行基础配置和安全加固。

















3️⃣ 参考 3

以下是在 Debian 10 系统上通过源码编译安装 MySQL 5.7.44 的完整步骤,结合依赖管理、编译优化和初始化配置的关键要点,并附常见问题解决方案:


📦 一、安装依赖与环境准备

  1. 安装编译依赖
    确保系统已安装必要的开发工具和库:

    sudo apt update
    sudo apt install -y gcc g++ cmake make libncurses5-dev libssl-dev libaio-dev \
                        libreadline-dev zlib1g-dev bison libboost-dev pkg-config
    

    关键说明

    • libboost-dev 是 MySQL 5.7 编译的必需依赖,需确保版本匹配(官方要求 Boost 1.59.0)。
    • 若安装时提示 libmecab2 缺失,需额外安装:sudo apt install libmecab2
  2. 下载源码(推荐自带 Boost 版本)

    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
    tar -zxvf mysql-boost-5.7.44.tar.gz
    cd mysql-5.7.44
    

    注意:若官网链接失效,需从 downloads.mysql.com/archives/co… 手动下载。


⚙️ 二、编译配置与安装

  1. 配置编译参数
    在源码目录创建 build 并配置 CMake:

    mkdir build
    cd build
    cmake .. \
      -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  # 安装根目录
      -DMYSQL_DATADIR=/usr/local/mysql/data \    # 数据存储路径
      -DSYSCONFDIR=/etc \                       # 配置文件目录
      -DWITH_INNOBASE_STORAGE_ENGINE=1 \         # 启用InnoDB引擎
      -DWITH_SSL=system \                        # 使用系统OpenSSL
      -DWITH_ZLIB=system \                       # 使用系统Zlib
      -DDEFAULT_CHARSET=utf8mb4 \                # 默认字符集
      -DDEFAULT_COLLATION=utf8mb4_general_ci \   # 默认排序规则
      -DWITH_BOOST=../boost/boost_1_59_0         # 指定自带Boost路径
    

    参数说明

    • 若使用无 Boost 的源码包,需添加 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/include(自动下载 Boost 1.59.0)。
  2. 编译与安装
    启用多核编译加速(根据 CPU 核心数调整 -j 参数):

    make -j$(nproc)        # 编译(耗时约 30-60 分钟)
    sudo make install       # 安装到指定目录
    

🔧 三、初始化与系统配置

  1. 创建系统用户和组

    sudo groupadd mysql
    sudo useradd -r -g mysql -s /bin/false mysql
    
  2. 初始化数据库
    创建数据目录并初始化(记录输出的临时 root 密码):

    sudo mkdir -p /usr/local/mysql/data
    sudo chown -R mysql:mysql /usr/local/mysql
    sudo /usr/local/mysql/bin/mysqld --initialize \
      --user=mysql \
      --basedir=/usr/local/mysql \
      --datadir=/usr/local/mysql/data
    

    注意

    • 若需无密码初始化(不推荐),使用 --initialize-insecure
    • 临时密码格式:A temporary password is generated for root@localhost: xxxxxx
  3. 配置 systemd 服务(推荐)
    创建服务文件 /etc/systemd/system/mysql.service

    [Unit]
    Description=MySQL Server
    After=network.target
    
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    启动服务:

    sudo systemctl daemon-reload
    sudo systemctl start mysql
    sudo systemctl enable mysql
    
  4. 修改 root 密码
    使用临时密码登录并更新:

    /usr/local/mysql/bin/mysql -u root -p
    
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    FLUSH PRIVILEGES;
    

🔒 四、安全加固与优化

  1. 运行安全脚本
    删除匿名用户、禁止远程 root 登录等:

    sudo /usr/local/mysql/bin/mysql_secure_installation
    
  2. 配置环境变量
    将 MySQL 二进制路径加入全局 PATH

    echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
    source /etc/profile
    

⚠️ 五、常见问题解决

问题解决方案
CMake 配置失败删除 build/CMakeCache.txt 后重试,检查依赖完整性(如 libtinfo-dev)。
初始化权限错误确保 /usr/local/mysql 及子目录属主为 mysql:mysql
临时密码丢失删除数据目录并重新初始化:sudo rm -rf /usr/local/mysql/data
服务启动失败检查日志 /var/log/mysql/error.log,确认 my.cnf 中的路径配置正确。
内存不足导致编译中断添加交换空间或减少编译线程数(如 make -j2)。

💎 总结建议

  • 编译优势:源码安装适合需深度定制(如特定存储引擎、字符集优化)的场景,但耗时较长。
  • 替代方案:若无定制需求,推荐使用 APT 仓库安装(快速安装最新 5.7.x):
    wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
    sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb  # 选择 MySQL 5.7
    sudo apt update
    sudo apt install mysql-server-5.7
    
  • 验证安装
    mysql -V  # 输出示例:mysql  Ver 14.14 Distrib 5.7.44
    systemctl status mysql
    

完成安装后,建议通过 mysql_secure_installation 加固安全,并配置防火墙限制 3306 端口访问。

















4️⃣ 参考 4

在 Debian 10 上编译安装 MySQL 5.7.44 需要手动下载源码、配置编译选项并完成安装。以下是详细的步骤:


1. 安装依赖

在编译 MySQL 之前,需要安装必要的依赖包:

sudo apt update
sudo apt install -y build-essential cmake libncurses5-dev libssl-dev libaio-dev libnuma-dev

2. 创建 MySQL 用户和组

为了安全,建议创建一个专用的 mysql 用户和组来运行 MySQL 服务:

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

3. 下载 MySQL 5.7.44 源码

从 MySQL 官方下载源码包(需要注册 MySQL 账号):

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz

如果无法直接下载,可以访问 MySQL 官网 手动下载。


4. 解压源码包

tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

5. 创建编译目录

mkdir build
cd build

6. 配置编译选项

使用 cmake 配置编译选项。以下是一个常见的配置示例:

cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/var/lib/mysql \
  -DSYSCONFDIR=/etc \
  -DMYSQL_USER=mysql \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  -DWITH_DEBUG=0 \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_LIBWRAP=0

说明

  • CMAKE_INSTALL_PREFIX:指定 MySQL 的安装目录。
  • MYSQL_DATADIR:指定数据存储目录。
  • SYSCONFDIR:指定配置文件 my.cnf 的位置。
  • DEFAULT_CHARSETDEFAULT_COLLATION:设置默认字符集为 utf8mb4
  • 如果需要其他功能(如调试支持),可以调整 -DWITH_DEBUG1

7. 编译和安装

make -j$(nproc)  # 使用多线程编译以加快速度
sudo make install

8. 设置权限

sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /var/lib/mysql

9. 初始化 MySQL 数据库

sudo /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql

说明

  • --initialize-insecure:不生成随机密码。
  • 如果需要生成随机密码,可以使用 --initialize 替代,并在 /var/lib/mysql 下的日志文件中查看密码。

10. 配置 MySQL 服务

         10.1 创建 systemd 服务文件 创建 /etc/systemd/system/mysqld.service 文件,内容如下:

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

         10.2 创建 my.cnf 配置文件 创建 /etc/my.cnf 文件,内容如下:

[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
port=3306
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve

11. 启动 MySQL 服务

sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld

12. 设置 root 密码

         12.1 登录 MySQL

/usr/local/mysql/bin/mysql -u root

         12.2 修改 root 密码 在 MySQL 命令行中执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

13. 验证安装

/usr/local/mysql/bin/mysql -u root -p

输入密码后,如果成功进入 MySQL 命令行,则表示安装完成。


14. 配置环境变量(可选)

将 MySQL 的 bin 目录添加到系统路径中:

echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

15. 常见问题解决

         1. 编译失败

  • 错误示例CMake Error: The following variables are used in this project, but they are set to NOTFOUND...
    • 解决方法:检查依赖是否安装完整(如 libncurses5-dev, libssl-dev 等)。

         2. 权限问题

  • 错误示例Can't start server: access denied for user 'mysql'...
    • 解决方法:确保 /var/lib/mysql 的权限为 mysql:mysql

         3. 启动失败

  • 错误示例Failed at step EXEC_START spawning...
    • 解决方法:检查 mysqld.service 文件中的路径是否正确。

16. 安全配置

运行 mysql_secure_installation 工具进一步加固 MySQL:

/usr/local/mysql/bin/mysql_secure_installation

17. 总结

通过以上步骤,您已成功在 Debian 10 上编译安装了 MySQL 5.7.44。如果需要进一步优化性能或配置高级功能(如主从复制、集群),可以参考 MySQL 官方文档或相关教程。

















5️⃣ 参考 5

在Debian 10系统上编译安装MySQL 5.7.44,可按以下步骤操作:

1. 安装编译依赖

sudo apt update
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \
                    libmysqlclient-dev libreadline-dev libffi-dev libz-dev

2. 创建MySQL用户和数据目录

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql

3. 下载并解压MySQL源码

wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -xzf mysql-5.7.44.tar.gz
cd mysql-5.7.44

4. 配置编译选项

cmake . \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DWITH_EMBEDDED_SERVER=1 \
  -DENABLED_LOCAL_INFILE=1 \
  -DENABLE_DOWNLOADS=1

5. 编译和安装

make -j$(nproc)  # 根据CPU核心数加速编译
sudo make install

6. 配置MySQL

sudo cp support-files/my-default.cnf /etc/my.cnf
sudo vi /etc/my.cnf  # 根据需要调整配置参数

7. 初始化数据库

cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

注意初始化后输出的临时密码,用于首次登录

8. 启动MySQL服务

sudo bin/mysqld_safe --user=mysql &

9. 设置开机自启

sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults

10. 安全配置

sudo bin/mysql_secure_installation

验证安装

/usr/local/mysql/bin/mysql -u root -p

环境变量配置

echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc
source ~/.bashrc

Debian 10编译安装MySQL 5.7.44脚本

#!/bin/bash

# Debian 10编译安装MySQL 5.7.44脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 错误处理函数
handle_error() {
    echo -e "${RED}错误: $1${NC}"
    exit 1
}

# 安装依赖
echo -e "${GREEN}正在安装编译依赖...${NC}"
sudo apt update || handle_error "更新APT源失败"
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \
                    libmysqlclient-dev libreadline-dev libffi-dev libz-dev \
                    libjemalloc-dev || handle_error "安装依赖包失败"

# 创建MySQL用户和组
echo -e "${GREEN}正在创建MySQL用户和组...${NC}"
sudo groupadd mysql || handle_error "创建mysql组失败"
sudo useradd -r -g mysql -s /bin/false mysql || handle_error "创建mysql用户失败"

# 创建安装目录
echo -e "${GREEN}正在创建安装目录...${NC}"
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql || handle_error "设置目录权限失败"

# 下载并解压源码
echo -e "${GREEN}正在下载和解压MySQL源码...${NC}"
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz || handle_error "下载源码失败"
tar -xzf mysql-5.7.44.tar.gz || handle_error "解压源码失败"
cd mysql-5.7.44 || handle_error "进入源码目录失败"

# 配置编译选项
echo -e "${GREEN}正在配置编译选项...${NC}"
cmake . \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DWITH_EMBEDDED_SERVER=1 \
  -DENABLED_LOCAL_INFILE=1 \
  -DENABLE_DOWNLOADS=1 \
  -DWITH_JEMALLOC=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system || handle_error "CMake配置失败"

# 编译和安装
echo -e "${GREEN}正在编译MySQL,这可能需要一段时间...${NC}"
make -j$(nproc) || handle_error "编译失败"
echo -e "${GREEN}正在安装MySQL...${NC}"
sudo make install || handle_error "安装失败"

# 配置MySQL
echo -e "${GREEN}正在配置MySQL...${NC}"
sudo cp support-files/my-default.cnf /etc/my.cnf
# 添加基础配置
sudo tee -a /etc/my.cnf > /dev/null <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/mysql.pid
log-error = /usr/local/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 500
innodb_buffer_pool_size = 1G
EOF

# 初始化数据库
echo -e "${GREEN}正在初始化MySQL数据库...${NC}"
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data || handle_error "数据库初始化失败"

# 获取临时密码
TEMP_PASSWORD=$(grep 'temporary password' /usr/local/mysql/error.log | awk '{print $NF}')
echo -e "${YELLOW}临时密码: $TEMP_PASSWORD${NC}"

# 配置系统服务
echo -e "${GREEN}正在配置系统服务...${NC}"
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults || handle_error "设置开机自启失败"

# 启动MySQL
echo -e "${GREEN}正在启动MySQL服务...${NC}"
sudo systemctl start mysql || handle_error "启动MySQL服务失败"

# 添加到环境变量
echo -e "${GREEN}正在配置环境变量...${NC}"
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile || handle_error "更新环境变量失败"

# 安全配置
echo -e "${GREEN}请手动进行安全配置,设置新密码等...${NC}"
echo -e "${YELLOW}执行: mysql_secure_installation${NC}"

echo -e "${GREEN}MySQL 5.7.44编译安装完成!${NC}"
echo -e "${YELLOW}使用命令 'mysql -u root -p' 登录MySQL${NC}"    

如果编译过程中遇到依赖问题,可以通过apt search命令查找对应的库包并安装。编译完成后,建议进行性能测试和安全加固。

















6️⃣ 参考 6

















7️⃣ 参考 7

















8️⃣ 参考 8

































9️⃣ 参考 9

































🔟 参考 10