当前位置: 首页 > news >正文

Debian-10编译安装Mysql-5.7.44 笔记250706

Debian-10编译安装Mysql-5.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 ] ;thensudo 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. 编译, 安装, 设置环境变量
<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1. 编译.安装</font>
make -j$(nproc)       # 使用所有CPU核心
sudo make install
<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2. 设置环境变量</font>
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile###   五. 创建配置 mysqld 服务
<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 创建目录设置目录权限</font>
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<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 初始化数据库</font>
<font size=3 color=#cc00cc>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;    root无密码初始化</font>
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 创建配置文件</font>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<font size=3 color=#cc00cc>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;   4. 创建启动服务</font><font size=2 color=#cccc00>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;&nbsp;  创建 systemd 服务</font>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.targetEOFxxxXXXeof---foeXXXxxxFOE<font size=2 color=#cccc00>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;&nbsp;  启动启用服务</font>
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.targetEOFxxxXXXeof---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 安全部署的基本要求。

在 Linux 系统中用于创建一个专门用于运行 MySQL 服务的系统用户,其主要作用和设计原理如下:

         命令分解及作用

参数作用说明
useraddLinux 创建用户的命令
-r创建系统用户(UID < 1000,不创建家目录)
-g mysql指定用户所属的主用户组mysql
-s /bin/false设置用户的登录 shell 为不可交互的无效 shell , 静默拒绝,无任何输出
-s /bin/nologin 设置用户的登录 shell 为不可交互的无效 shell , 显示提示信息后拒绝
mysql要创建的用户名

         核心作用详解

               1. 安全隔离(最小权限原则)

  • 创建专用用户运行 MySQL 服务,避免使用 root 账户
  • MySQL 进程以 mysql 用户权限运行,即使被入侵也受限于该用户权限
  • 防止数据库服务获得 root 权限造成系统级破坏

               2. 文件权限控制

  • MySQL 数据文件(/var/lib/mysql)的所有者设置为 mysql:mysql
  • 确保只有 MySQL 服务本身能访问数据库文件:
    drwxr-x--- 4 mysql mysql 4096 Jul  6 10:00 /var/lib/mysql/
    

               3. 服务运行隔离

  • MySQL 启动时自动切换到 mysql 用户身份运行
  • 与其他系统服务(如 Apache/Nginx 的 www-data 用户)权限分离
  • 防止服务间权限互相影响

               4. 禁止用户登录(安全加固)

  • /bin/false 作为登录 shell 会立即终止任何登录尝试:
    $ sudo su - mysql
    This account is currently not available.
    
  • 无法通过 SSH、su 或控制台登录
  • 防止攻击者利用该用户作为跳板

         工作流程示例

启动MySQL服务
mysqld 进程
以哪个用户身份运行?
mysql 用户
访问 /var/lib/mysql 数据目录
绑定 3306 端口

         为什么需要这样创建?

  1. 安全必要性

    • MySQL 5.7+ 强制要求使用非 root 用户运行
    • 避免 CVE-2012-2122 等提权漏洞风险
  2. 权限最小化

    # 查看 mysql 用户权限
    $ sudo -u mysql id
    uid=997(mysql) gid=998(mysql) groups=998(mysql)
    
    • 无 home 目录、无登录 shell、无 sudo 权限
  3. 系统兼容性

    • 适用于所有 Linux 发行版
    • 与 MySQL 官方安装包行为一致

         重要注意事项

  1. 必须在安装 MySQL 前创建
    否则数据目录权限可能不正确

  2. 组应先于用户创建
    正确顺序:

    sudo groupadd -r mysql    # 先创建组
    sudo useradd -r -g mysql -s /bin/false mysql  # 再创建用户
    
  3. 目录权限修复
    若安装后权限错误:

    sudo chown -R mysql:mysql /var/lib/mysql
    sudo chmod 750 /var/lib/mysql
    
  4. 不要修改此用户
    禁止解锁或更改 shell,否则会引入安全风险

这种用户创建方式是 Linux 服务部署的安全最佳实践,不仅适用于 MySQL,也适用于 PostgreSQL、Redis 等其他需要权限隔离的服务。

               1. sudo groupadd mysql

  • 作用:创建名为 mysql 的系统组
  • 参数详解
    • 无额外参数:直接创建指定名称的用户组
  • 必要性
    • 所有 MySQL 相关进程将以该组身份运行
    • 统一管理 MySQL 文件权限(数据文件、配置文件、日志等)
  • 系统影响
    • /etc/group 文件中添加条目:
      mysql:x:GID:(GID 为系统自动分配的组ID)

               **2. sudo useradd -r -g mysql -s /bin/false mysqlsudo useradd -r -g mysql -s /bin/nologin mysql **

  • 作用:创建系统用户 mysql 并加入 mysql 组,禁止登录

  • 参数详解

    参数说明安全意义
    -r创建系统账户(UID < 1000)区别于普通用户账户,不创建家目录
    -g mysql指定主组为 mysql确保文件权限一致性
    -s /bin/false设置登录 shell 为伪终端 , 静默拒绝登录关键安全配置
    -s /bin/nologin设置登录 shell 为伪终端, 明确拒绝登录关键安全配置
    mysql用户名行业标准命名
  • /bin/false 的特殊作用

    /bin/bash
    /bin/false
    /sbin/nologin
    登录尝试
    Shell类型
    允许登录
    立即静默退出
    显示拒绝消息后退出
    • 任何登录尝试(SSH、su 等)都会立即失败
    • 无任何输出信息,避免暴露系统用户存在
    • 返回状态码 1(失败),阻止会话建立
  • 系统影响

    • /etc/passwd 中添加条目:
      mysql:x:UID:GID::/home/mysql:/bin/false
    • UID 为系统分配的小于 1000 的值(通常 999 或 110-120 范围)
    • 不会创建 /home/mysql 目录

               为什么需要专用用户?

  1. 最小权限原则

    • MySQL 服务不需要 root 权限运行
    • 被入侵时限制攻击者权限范围
  2. 文件所有权控制

    sudo chown -R mysql:mysql /usr/local/mysql/data
    sudo chmod 750 /usr/local/mysql/data
    
  3. 进程隔离

    • MySQL 进程以 mysql 用户身份运行
    • 通过 ps -ef | grep mysqld 可验证:
      mysql    12345  0.0  2.1 1280000 42000 ?      Ssl  10:00   0:02 /usr/sbin/mysqld
      

               安全增强建议

  1. 验证用户属性

    # 检查用户配置
    grep mysql /etc/passwd
    # 期望输出:mysql:x:110:110::/home/mysql:/bin/false# 检查组配置
    grep mysql /etc/group
    # 期望输出:mysql:x:110:
    
  2. 禁止家目录创建(即使未使用 -m 参数):

    sudo usermod -d /nonexistent mysql
    
  3. SELinux/AppArmor 集成

    # 为 MySQL 创建专用安全配置文件
    sudo semanage user -a -R "staff_r system_r" mysql_u
    sudo semanage login -a -s mysql_u mysql
    

               替代方案对比

命令优点缺点
useradd -r -g mysql -s /bin/false mysql完全静默,无日志污染管理员无法获知登录尝试
useradd -r -g mysql -s /sbin/nologin mysql有拒绝登录提示可能产生无效系统日志
adduser --system --disabled-login --group mysql更简洁的语法部分系统不可用

               MySQL 安装后的权限设置
安装完成后需执行:

### 设置 MySQL 目录所有权
sudo chown -R mysql:mysql /usr/local/mysql### 初始化数据目录(使用 mysql 用户)
sudo -u mysql /usr/local/mysql/bin/mysqld --initialize

重要安全提示:永远不要将 MySQL 用户 shell 改为 /bin/bash 或有效 shell,即使临时使用。如需维护,应使用 sudo -u mysql /bin/sh -c "command" 代替。

这些步骤为 MySQL 创建了一个安全的运行环境,遵循了 Linux 服务账户管理的最佳实践,是生产环境部署的必要前提。


               /bin/false/bin/nologin 对比

在 Linux 中创建 MySQL 系统用户时,/bin/false/bin/nologin 都是用于禁止用户登录的 shell,但它们在行为上有细微但重要的区别:

  1. useradd -r -g mysql -s /bin/false mysql
  • 行为:当用户尝试登录时,立即以非零状态退出(静默失败)
  • 特点
    • 不显示任何消息
    • 立即终止登录尝试
    • 返回退出代码 1(失败)
  • 使用场景
    • 最严格的登录限制
    • 服务账户的理想选择
    • 推荐用于数据库等关键服务
  1. useradd -r -g mysql -s /bin/nologin mysql
  • 行为:当用户尝试登录时,显示提示信息后退出
  • 特点
    • 显示默认消息:“This account is currently not available.”
    • 可以通过创建 /etc/nologin.txt 自定义消息
    • 返回退出代码 0("成功"拒绝登录)
  • 使用场景
    • 需要向尝试登录者显示提示信息
    • 临时禁用账户时更合适
    • 某些系统管理场景

关键区别对比表:

特性/bin/false/bin/nologin
登录尝试响应静默拒绝显示拒绝消息
退出状态码1 (失败)0 (成功拒绝)
自定义消息不支持支持(通过 /etc/nologin.txt)
安全性更高(不泄露账户存在信息)稍低(揭示账户存在)
推荐用于服务账户✅ 强烈推荐⚠️ 可用但不理想

最佳实践建议:

  1. 对于 MySQL 等数据库服务

    sudo useradd -r -g mysql -s /bin/false mysql
    
    • 这是更安全的选择
    • 防止潜在攻击者探测服务账户
    • 符合最小信息泄露原则
  2. 何时使用 nologin

    • 当需要向可能尝试登录的用户显示信息时
    • 临时禁用普通用户账户
    • FTP 等需要显示自定义消息的场景
  3. 验证用户配置

    grep mysql /etc/passwd
    

    正确输出示例:

    mysql:x:112:116:MySQL Server:/nonexistent:/bin/false
    

安全提示:对于服务账户(如 MySQL),始终优先选择 /bin/false。它不仅更安全,还能避免在系统日志中留下不必要的认证尝试记录,符合安全加固的最佳实践。




         useradd -r -g mysql -s /bin/false mysql 命令详解

这个命令用于创建 MySQL 服务专用的系统用户,是 MySQL 安装过程中的关键安全步骤。下面我将详细解释每个参数的作用和重要性:

               命令结构解析

useradd      # 创建新用户-r         # 创建系统用户(无主目录、无登录能力)-g mysql   # 指定用户的主组为 "mysql"-s /bin/false  # 设置用户的登录 shell 为 /bin/false(禁止登录)mysql      # 要创建的用户名

               各参数详细说明

                    1. -r (创建系统用户)

  • 作用:创建特殊权限受限的系统用户
  • 特点
    • 不会创建用户主目录 (/home/mysql)
    • UID 从系统用户范围分配(通常 < 1000)
    • 无法用于交互式登录
  • 安全意义
    • 最小权限原则:MySQL 服务只需必要权限运行
    • 攻击面缩小:即使 MySQL 被入侵,攻击者也无法获得完整用户权限

                    2. -g mysql (指定主用户组)

  • 前提:需先创建 mysql 用户组:
    sudo groupadd -r mysql  # 创建系统组
    
  • 作用
    • 将新用户加入 mysql
    • 确保 MySQL 相关文件和目录有统一的所有权
  • 权限管理
    # 查看结果
    $ id mysql
    uid=997(mysql) gid=997(mysql) groups=997(mysql)
    

                    3. -s /bin/false (禁用登录)

  • 安全机制
    • /bin/false 是一个特殊的"假 shell"
    • 任何登录尝试会立即终止,返回失败状态
  • 替代方案
    • /usr/sbin/nologin:显示"此账户不可用"提示
    • /bin/false 更安全,不提供任何反馈
  • 验证效果
    $ sudo su - mysql
    This account is currently not available.
    

                    4. mysql (用户名)

  • 行业标准用户名,便于识别服务
  • 与 MySQL 官方文档和配置保持一致

               为什么需要这样创建用户?

                    安全最佳实践

  1. 权限隔离

    • MySQL 以非 root 用户运行
    • 数据库被入侵时,系统不会被完全控制
  2. 文件所有权

    sudo chown -R mysql:mysql /usr/local/mysql
    sudo chown -R mysql:mysql /var/lib/mysql
    
    • 确保数据库文件只能被 MySQL 服务访问
  3. 进程隔离

    ps aux | grep mysqld
    mysql     1234  0.0  2.1 1287000 43200 ?       Ssl  10:00   0:05 /usr/sbin/mysqld
    

                    容器环境中的特殊处理
在 Dockerfile 中需要额外步骤:

RUN groupadd -r mysql && \useradd -r -g mysql -s /bin/false mysql && \mkdir -p /var/lib/mysql && \chown -R mysql:mysql /var/lib/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. 不存在则下载
存在
不存在
开始配置
检查 /usr/local/boost
使用现有Boost
下载Boost 1.59.0
解压到指定路径
继续编译

               新增优化参数详解
                    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)

FormatsDescriptionDefaultIntroducedRemoved
BUILD_CONFIGUse same build options as official releases
CMAKE_BUILD_TYPEType of build to produceRelWithDebInfo
CMAKE_CXX_FLAGSFlags for C++ Compiler
CMAKE_C_FLAGSFlags for C Compiler
CMAKE_INSTALL_PREFIXInstallation base directory/usr/local/mysql
COMPILATION_COMMENTComment about compilation environment
CPACK_MONOLITHIC_INSTALLWhether package build produces single fileOFF
DEFAULT_CHARSETThe default server character setlatin1
DEFAULT_COLLATIONThe default server collationlatin1_swedish_ci
DISABLE_PSI_CONDExclude Performance Schema condition instrumentationOFF
DISABLE_PSI_FILEExclude Performance Schema file instrumentationOFF
DISABLE_PSI_IDLEExclude Performance Schema idle instrumentationOFF
DISABLE_PSI_MEMORYExclude Performance Schema memory instrumentationOFF
DISABLE_PSI_METADATAExclude Performance Schema metadata instrumentationOFF
DISABLE_PSI_MUTEXExclude Performance Schema mutex instrumentationOFF
DISABLE_PSI_PSExclude the performance schema prepared statementsOFF
DISABLE_PSI_RWLOCKExclude Performance Schema rwlock instrumentationOFF
DISABLE_PSI_SOCKETExclude Performance Schema socket instrumentationOFF
DISABLE_PSI_SPExclude Performance Schema stored program instrumentationOFF
DISABLE_PSI_STAGEExclude Performance Schema stage instrumentationOFF
DISABLE_PSI_STATEMENTExclude Performance Schema statement instrumentationOFF
DISABLE_PSI_STATEMENT_DIGESTExclude Performance Schema statements_digest instrumentationOFF
DISABLE_PSI_TABLEExclude Performance Schema table instrumentationOFF
DISABLE_PSI_THREADExclude the performance schema thread instrumentationOFF
DISABLE_PSI_TRANSACTIONExclude the performance schema transaction instrumentationOFF
DOWNLOAD_BOOSTWhether to download the Boost libraryOFF
DOWNLOAD_BOOST_TIMEOUTTimeout in seconds for downloading the Boost library600
ENABLED_LOCAL_INFILEWhether to enable LOCAL for LOAD DATAOFF
ENABLED_PROFILINGWhether to enable query profiling codeON
ENABLE_DOWNLOADSWhether to download optional filesOFF
ENABLE_DTRACEWhether to include DTrace support
ENABLE_GCOVWhether to include gcov support
ENABLE_GPROFEnable gprof (optimized Linux builds only)OFF
FORCE_UNSUPPORTED_COMPILERWhether to permit unsupported compilersOFF
IGNORE_AIO_CHECKWith -DBUILD_CONFIG=mysql_release, ignore libaio checkOFF
INSTALL_BINDIRUser executables directoryPREFIX/bin
INSTALL_DOCDIRDocumentation directoryPREFIX/docs
INSTALL_DOCREADMEDIRREADME file directoryPREFIX
INSTALL_INCLUDEDIRHeader file directoryPREFIX/include
INSTALL_INFODIRInfo file directoryPREFIX/docs
INSTALL_LAYOUTSelect predefined installation layoutSTANDALONE
INSTALL_LIBDIRLibrary file directoryPREFIX/lib
INSTALL_MANDIRManual page directoryPREFIX/man
INSTALL_MYSQLKEYRINGDIRDirectory for keyring_file plugin data fileplatform specific5.7.11
INSTALL_MYSQLSHAREDIRShared data directoryPREFIX/share
INSTALL_MYSQLTESTDIRmysql-test directoryPREFIX/mysql-test
INSTALL_PKGCONFIGDIRDirectory for mysqlclient.pc pkg-config fileINSTALL_LIBDIR/pkgconfig
INSTALL_PLUGINDIRPlugin directoryPREFIX/lib/plugin
INSTALL_SBINDIRServer executable directoryPREFIX/bin
INSTALL_SCRIPTDIRScripts directoryPREFIX/scripts
INSTALL_SECURE_FILE_PRIVDIRsecure_file_priv default valueplatform specific
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIRsecure_file_priv default value for libmysqld
INSTALL_SHAREDIRaclocal/mysql.m4 installation directoryPREFIX/share
INSTALL_SUPPORTFILESDIRExtra support files directoryPREFIX/support-files
MAX_INDEXESMaximum indexes per table64
MEMCACHED_HOMEPath to memcached; obsolete[none]5.7.33
MUTEX_TYPEInnoDB mutex typeevent
MYSQLX_TCP_PORTTCP/IP port number used by X Plugin330605.7.17
MYSQLX_UNIX_ADDRUnix socket file used by X Plugin/tmp/mysqlx.sock5.7.15
MYSQL_DATADIRData directory
MYSQL_MAINTAINER_MODEWhether to enable MySQL maintainer-specific development environmentOFF
MYSQL_PROJECT_NAMEWindows/macOS project nameMySQL
MYSQL_TCP_PORTTCP/IP port number3306
MYSQL_UNIX_ADDRUnix socket file/tmp/mysql.sock
ODBC_INCLUDESODBC includes directory
ODBC_LIB_DIRODBC library directory
OPTIMIZER_TRACEWhether to support optimizer tracing
REPRODUCIBLE_BUILDTake extra care to create a build result independent of build location and time5.7.19
SUNPRO_CXX_LIBRARYClient link library on Solaris 10+
SYSCONFDIROption file directory
SYSTEMD_PID_DIRDirectory for PID file under systemd/var/run/mysqld
SYSTEMD_SERVICE_NAMEName of MySQL service under systemdmysqld
TMPDIRtmpdir default value
WIN_DEBUG_NO_INLINEWhether to disable function inliningOFF
WITHOUT_SERVERDo not build the server; internal use onlyOFF
WITHOUT_xxx_STORAGE_ENGINEExclude storage engine xxx from build
WITH_ASANEnable AddressSanitizerOFF
WITH_ASAN_SCOPEEnable AddressSanitizer -fsanitize-address-use-after-scope Clang flagOFF5.7.21
WITH_AUTHENTICATION_LDAPWhether to report error if LDAP authentication plugins cannot be builtOFF5.7.19
WITH_AUTHENTICATION_PAMBuild PAM authentication pluginOFF
WITH_AWS_SDKLocation of Amazon Web Services software development kit5.7.19
WITH_BOOSTThe location of the Boost library sources
WITH_BUNDLED_LIBEVENTUse bundled libevent when building ndbmemcache; obsoleteON5.7.33
WITH_BUNDLED_MEMCACHEDUse bundled memcached when building ndbmemcache; obsoleteON5.7.33
WITH_CLASSPATHClasspath to use when building MySQL Cluster Connector for Java. Default is an empty string.
WITH_CLIENT_PROTOCOL_TRACINGBuild client-side protocol tracing frameworkON
WITH_CURLLocation of curl library5.7.19
WITH_DEBUGWhether to include debugging supportOFF
WITH_DEFAULT_COMPILER_OPTIONSWhether to use default compiler optionsON
WITH_DEFAULT_FEATURE_SETWhether to use default feature setON
WITH_EDITLINEWhich libedit/editline library to usebundled
WITH_EMBEDDED_SERVERWhether to build embedded serverOFF
WITH_EMBEDDED_SHARED_LIBRARYWhether to build a shared embedded server libraryOFF
WITH_ERROR_INSERTEnable error injection in the NDB storage engine. Should not be used for building binaries intended for production.OFF
WITH_EXTRA_CHARSETSWhich extra character sets to includeall
WITH_GMOCKPath to googlemock distribution
WITH_INNODB_EXTRA_DEBUGWhether to include extra debugging support for InnoDB.OFF
WITH_INNODB_MEMCACHEDWhether to generate memcached shared libraries.OFF
WITH_KEYRING_TESTBuild the keyring test programOFF5.7.11
WITH_LDAPInternal use only5.7.29
WITH_LIBEVENTWhich libevent library to usebundled
WITH_LIBWRAPWhether to include libwrap (TCP wrappers) supportOFF
WITH_LZ4Type of LZ4 library supportbundled5.7.14
WITH_MECABCompiles MeCab
WITH_MSANEnable MemorySanitizerOFF
WITH_MSCRT_DEBUGEnable Visual Studio CRT memory leak tracingOFF
WITH_NDBAPI_EXAMPLESBuild API example programs.OFF
WITH_NDBCLUSTERNDB 8.0.30 and earlier: Build NDB storage engine. NDB 8.0.31 and later: Deprecated; use WITH_NDB insteadON
WITH_NDBCLUSTER_STORAGE_ENGINEPrior to NDB 8.0.31, this was for internal use only. NDB 8.0.31 and later: toggles (only) inclusion of NDBCLUSTER storage engineON
WITH_NDBMTDBuild multithreaded data node binaryON
WITH_NDB_BINLOGEnable binary logging by default by mysqld.ON
WITH_NDB_DEBUGProduce a debug build for testing or troubleshooting.OFF
WITH_NDB_JAVAEnable building of Java and ClusterJ support. Enabled by default. Supported in MySQL Cluster only.ON
WITH_NDB_PORTDefault port used by a management server built with this option. If this option was not used to build it, the management server's default port is 1186.[none]
WITH_NDB_TESTInclude NDB API test programs.OFF
WITH_NUMASet NUMA memory allocation policy5.7.17
WITH_PROTOBUFWhich Protocol Buffers package to usebundled5.7.12
WITH_RAPIDWhether to build rapid development cycle pluginsON5.7.12
WITH_SASLInternal use only5.7.29
WITH_SSLType of SSL supportsystem
WITH_SYSTEMDEnable installation of systemd support filesOFF
WITH_TEST_TRACE_PLUGINBuild test protocol trace pluginOFF
WITH_UBSANEnable Undefined Behavior SanitizerOFF
WITH_UNIT_TESTSCompile MySQL with unit testsON
WITH_UNIXODBCEnable unixODBC supportOFF
WITH_VALGRINDWhether to compile in Valgrind header filesOFF
WITH_ZLIBType of zlib supportbundled
WITH_xxx_STORAGE_ENGINECompile storage engine xxx statically into server






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.targetEOFxxxXXXeof---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

讲解:

/etc/systemd/system/etc/init.d 是 Linux 系统中服务管理的两种不同机制的核心目录,分别对应 systemdSysVinit 初始化系统。以下是详细对比:


         1. 所属初始化系统

目录初始化系统出现时间现代发行版支持
/etc/init.dSysVinit传统系统(1980s)逐步淘汰(兼容模式保留)
/etc/systemd/systemsystemd2010年后主流默认(如 Ubuntu 16.04+、CentOS 7+)

         2. 文件类型与结构

目录文件类型文件示例配置结构
/etc/init.dShell 脚本nginx(可执行脚本)单一脚本文件,包含启动/停止逻辑
/etc/systemd/system单元文件(文本)nginx.service(配置文件)结构化配置([Unit][Service]等节)
  • /etc/init.d/nginx 脚本片段

    start() {/usr/sbin/nginx -c /etc/nginx/nginx.conf
    }
    stop() {killproc nginx
    }
    
  • /etc/systemd/system/nginx.service 单元文件

    [Unit]
    Description=NGINX Web Server
    After=network.target[Service]
    ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    Type=forking[Install]
    WantedBy=multi-user.target
    

         3. 管理命令对比

操作SysVinit (/etc/init.d)systemd (/etc/systemd/system)
启动服务/etc/init.d/nginx startsystemctl start nginx
停止服务/etc/init.d/nginx stopsystemctl stop nginx
状态查看/etc/init.d/nginx statussystemctl status nginx
开机自启chkconfig nginx on (Red Hat)systemctl enable nginx
update-rc.d nginx defaults (Debian)

         4. 依赖管理与启动顺序

特性/etc/init.d (SysVinit)/etc/systemd/system (systemd)
依赖管理通过脚本中的顺序号(如 S20nginx)粗略控制精确声明(After=, Requires=
并行启动❌ 串行启动(按数字顺序)✅ 支持并行,加快启动速度
资源控制❌ 不支持✅ 支持(CPU/内存限制、安全沙盒等)

         5. 配置覆盖与扩展

目录扩展机制优先级
/etc/init.d直接修改脚本(风险高)无覆盖机制
/etc/systemd/system支持以下扩展:
1. 自定义单元文件(覆盖默认配置)
2. nginx.service.d/override.conf(片段覆盖)
优先级高于系统默认单元文件(/usr/lib/systemd/system/

         6. 日志管理

目录日志系统查看日志命令
/etc/init.dsyslog(分散)grep nginx /var/log/syslog
/etc/systemd/systemjournald(集中)journalctl -u nginx

         7. 兼容性与共存

  • systemd 兼容 SysVinit
    当 systemd 检测到 /etc/init.d/ 中的脚本时,会自动生成对应的 .service 单元文件(名称如 sysvinit-nginx.service),但功能有限(依赖管理弱)。
  • 避免混用
    修改服务配置时,不要同时使用两种目录(例如:避免在 /etc/init.d 修改脚本的同时在 /etc/systemd/system 覆盖配置)。

         总结:如何选择?

场景推荐目录
现代 Linux 发行版(≥2015年)/etc/systemd/system
传统系统或兼容旧脚本⚠️ /etc/init.d(临时过渡)
自定义服务配置/etc/systemd/system(优先使用 systemctl edit nginx 生成覆盖片段)

最佳实践

  • 新服务配置始终通过 systemd 单元文件(.service)管理。
  • 旧脚本迁移到 systemd 时,将其转换为单元文件以获得完整功能。
  • 调试时优先使用 journalctl -u service_name 查看日志。

















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 wrappersudo 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)。

















在Debian 10上编译安装MySQL 5.7.44需要执行以下步骤。注意:编译过程耗时较长(1小时以上)且需要充足内存(建议≥2GB),生产环境建议使用官方二进制包。

1. 安装依赖

sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev libreadline-dev zlib1g-dev

2. 创建MySQL用户和组

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

3. 下载源码

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

4. 配置编译选项

mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci

5. 编译和安装

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

6. 初始化数据库

cd /usr/local/mysql
sudo mkdir mysql-files
sudo chown mysql:mysql mysql-files
sudo chmod 750 mysql-files# 初始化数据目录(记录输出的临时root密码)
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data# 生成SSL证书
sudo bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

7. 配置启动脚本

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

8. 配置环境变量

echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee /etc/profile.d/mysql.sh
source /etc/profile

9. 启动MySQL服务

sudo /etc/init.d/mysqld start

10. 修改root密码

# 使用初始化时的临时密码登录
mysql -u root -p# 在MySQL命令行中修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;

11. 设置开机自启

sudo update-rc.d mysqld defaults

验证安装

mysqladmin --version
sudo netstat -tulnp | grep mysqld

常见问题解决

  1. 编译失败

    • 检查依赖是否完整:sudo apt install libboost-dev
    • 清除构建缓存:rm CMakeCache.txt && make clean
  2. 启动失败

    • 检查错误日志:sudo tail -f /usr/local/mysql/data/*.err
    • 确认端口未被占用:sudo lsof -i :3306
  3. 连接问题

    • 检查socket路径:/tmp/mysql.sock
    • 配置文件位置:/etc/my.cnf

重要提示:编译安装适合特定定制需求,常规使用建议通过官方APT源安装:

sudo apt install mysql-server-5.7

















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,并进行基础配置和安全加固。

















在 Debian 10 系统上编译安装 MySQL 5.7.44,可按照以下步骤进行,此方法能灵活定制参数,但需处理依赖和编译配置:

一、准备工作

  1. 更新系统包

    sudo apt update && sudo apt upgrade -y
    
  2. 安装编译依赖

    sudo apt install -y gcc g++ cmake make libncurses5-dev libssl-dev libboost-dev bison libaio-dev libreadline-dev zlib1g-dev pkg-config systemd-dev
    
    • 说明libncurses5-dev(终端界面库)、libssl-dev(SSL支持)、libboost-dev(Boost库)、bison(语法分析器)、libaio-dev(异步I/O支持)等为编译必需依赖。
  3. 卸载冲突的 MariaDB(如存在)

    sudo apt purge mariadb-* -y
    sudo rm -rf /var/lib/mysql/
    

二、下载源码

  1. 获取 MySQL 5.7.44 源码

    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
    
    • 备用方案:若链接失效,访问 MySQL Archives 手动下载。
  2. 选择 Boost 库版本(可选)

    • 自带 Boost 的版本:直接下载 mysql-boost-5.7.44.tar.gz,解压后无需额外处理 Boost。
    • 手动指定 Boost:下载 Boost 1.59.0,解压至 /usr/local/boost_1_59_0

三、编译配置

  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 \-DWITH_BOOST=/path/to/boost_1_59_0  # 若手动指定 Boost 路径
    
    • 关键参数说明
      • -DCMAKE_INSTALL_PREFIX:MySQL 安装目录。
      • -DMYSQL_DATADIR:数据存储目录。
      • -DWITH_INNOBASE_STORAGE_ENGINE=1:启用 InnoDB 存储引擎。
      • -DDEFAULT_CHARSET=utf8mb4:支持完整的 Unicode 字符集(包括表情符号)。
  2. 解决常见配置错误

    • 错误示例CMake Error at cmake/boost.cmake:XXX (message): Boost XXX library not found
      解决方案:确保 -DWITH_BOOST 路径正确,或使用 -DDOWNLOAD_BOOST=1 自动下载(仅限无 Boost 版本)。
    • 错误示例Could NOT find OpenSSL
      解决方案:安装 libssl-dev 并重新运行 cmake

四、编译与安装

  1. 使用多核编译加速

    make -j$(nproc)  # 根据 CPU 核心数自动调整线程数
    sudo make install
    
  2. 验证安装文件

    ls /usr/local/mysql/bin/  # 应包含 mysqld、mysql 等可执行文件
    

五、初始化与配置

  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: xxxxxx)。
  3. 配置 my.cnf 文件

    sudo cp support-files/my-default.cnf /etc/my.cnf
    sudo nano /etc/my.cnf
    
    • 示例配置
      [mysqld]
      basedir=/usr/local/mysql
      datadir=/usr/local/mysql/data
      socket=/tmp/mysql.sock
      port=3306
      character-set-server=utf8mb4
      

六、启动与验证

  1. 启动 MySQL 服务

    sudo cp support-files/mysql.server /etc/init.d/mysql
    sudo chmod +x /etc/init.d/mysql
    sudo service mysql start
    
    • 推荐方案:配置 systemd 服务(更可靠):
      sudo nano /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
      
  2. 修改 root 密码

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

    /usr/local/mysql/bin/mysql -u root -p -e "SHOW VARIABLES LIKE 'version%';"
    
    • 预期输出
      +-------------------------+---------------------+
      | Variable_name           | Value               |
      +-------------------------+---------------------+
      | version                 | 5.7.44              |
      | version_comment         | MySQL Community Server |
      +-------------------------+---------------------+
      

七、常见问题解决

  1. 权限错误

    • 现象mysqld: Can't create/write to file '/usr/local/mysql/data/xxx'
    • 解决方案:确保 /usr/local/mysql 及其子目录属主为 mysql:mysql
      sudo chown -R mysql:mysql /usr/local/mysql
      
  2. 临时密码丢失

    • 解决方案:删除数据目录并重新初始化:
      sudo rm -rf /usr/local/mysql/data
      sudo bin/mysqld --initialize --user=mysql
      
  3. 依赖缺失

    • 现象CMake Error: The following variables are used in this project, but they are set to NOTFOUND
    • 解决方案:根据错误提示安装对应依赖(如 libgmp-devflex 等)。

















在 Debian 10 系统上编译安装 MySQL 5.7.44,可按照以下步骤进行,该过程涉及依赖安装、源码下载、编译配置、初始化及服务配置等环节:

一、安装依赖库

  1. 更新系统包索引

    sudo apt update
    sudo apt upgrade -y
    
  2. 安装编译工具和依赖库

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

二、下载 MySQL 5.7.44 源码

  1. 访问 MySQL 官方下载页面
    MySQL 官方下载页面

  2. 下载 MySQL 5.7.44 源码包

    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
    
  3. 解压源码包

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

三、编译与安装

  1. 创建构建目录并进入

    mkdir build
    cd build
    
  2. 配置编译参数

    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 \
    -DWITH_BOOST=../boost/boost_1_59_0  # 如果源码包自带 boost 则无需指定
    

    注意

    • 如果使用无 boost 版本的源码包,需要添加 -DDOWNLOAD_BOOST=1 参数,让 CMake 自动下载 boost 1.59.0 版本。
    • 确保 /usr/local/mysql 及子目录的属主为 mysql:mysql(后续步骤会创建该用户和组)。
  3. 编译并安装

    make -j$(nproc)  # 使用多核编译,根据 CPU 核心数调整
    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: xxxxxx)。
    • 如果未记录密码,可删除数据目录并重新初始化:
      sudo rm -rf /usr/local/mysql/data
      sudo bin/mysqld --initialize --user=mysql
      
  3. 配置 my.cnf 文件

    sudo cp support-files/my-default.cnf /etc/my.cnf
    sudo nano /etc/my.cnf  # 按需修改配置(如字符集、内存参数等)
    

    示例配置

    [mysqld]
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/tmp/mysql.sock
    port=3306
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    

五、启动与使用

  1. 启动 MySQL 服务

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

    推荐:配置 systemd 服务(更现代的管理方式):

    sudo nano /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
    
  2. 修改 root 密码

    /usr/local/mysql/bin/mysql -u root -p  # 输入初始化时的临时密码
    

    在 MySQL 命令行中执行

    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    FLUSH PRIVILEGES;
    
  3. 设置环境变量

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

六、常见问题解决

  1. 编译失败

    • 检查依赖是否完整,重新执行 cmake 前清理缓存:
      make clean
      rm -f CMakeCache.txt
      
    • 确保 /usr/local/mysql 及子目录的属主为 mysql:mysql
      sudo chown -R mysql:mysql /usr/local/mysql
      
  2. 临时密码丢失

    • 删除数据目录并重新初始化(参考步骤四.2)。
  3. 权限问题

    • 确保 MySQL 数据目录(/usr/local/mysql/data)的属主为 mysql:mysql
      sudo chown -R mysql:mysql /usr/local/mysql/data
      

















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
    

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


⚙️ 二、编译配置与安装

  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 端口访问。

















以下是根据多个可靠来源整理的 Debian 10 编译安装 MySQL 5.7.44 的完整指南,涵盖依赖管理、编译配置、服务部署等全流程关键步骤。此方法适用于需要高度定制化或严格版本控制的场景。


🔧 一、准备工作:系统环境与依赖

  1. 更新系统并安装编译工具

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y build-essential cmake libssl-dev libncurses5-dev libaio1 libaio-dev bison libperl-dev zlib1g-dev pkg-config wget
    
  2. 创建专用用户与目录

    sudo groupadd mysql
    sudo useradd -r -g mysql -s /bin/false mysql
    sudo mkdir -p /opt/software/mysql/{data,build,package}
    sudo chown -R mysql:mysql /opt/software/mysql
    
  3. 下载源码与 Boost 依赖
    MySQL 5.7.44 需搭配 Boost 1.59.0

    cd /opt/software/mysql/package
    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.44.tar.gz
    tar -zxvf mysql-boost-5.7.44.tar.gz -C ../  # 解压至 /opt/software/mysql/mysql-5.7.44
    

⚙️ 二、编译配置与安装

  1. 进入编译目录并生成 Makefile

    cd /opt/software/mysql/build
    cmake ../mysql-5.7.44 \-DCMAKE_INSTALL_PREFIX=/opt/software/mysql/mysql \-DMYSQL_DATADIR=/opt/software/mysql/data \-DSYSCONFDIR=/etc \-DMYSQL_TCP_PORT=3306 \-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_SSL=system \-DENABLED_LOCAL_INFILE=1 \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_BOOST=../mysql-5.7.44/boost  # 关键:指向源码内的 boost 目录
    

    注意:若配置失败,删除 CMakeCache.txt 后重试。

  2. 编译并安装

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

    编译时间较长(约 30-60 分钟),取决于硬件性能。


三、初始化与启动服务

  1. 初始化数据目录

    cd /opt/software/mysql/mysql/bin
    sudo ./mysqld --initialize --user=mysql \--basedir=/opt/software/mysql/mysql \--datadir=/opt/software/mysql/data
    

    记录输出的临时 root 密码(如 [Note] A temporary password is generated for root@localhost: Abc123!)。

  2. 配置 systemd 服务

    sudo cp ../support-files/mysql.server /etc/init.d/mysql
    sudo systemctl daemon-reload
    sudo systemctl start mysql
    sudo systemctl enable mysql
    
  3. 设置环境变量(可选)

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

🔐 四、安全配置与验证

  1. 修改 root 密码
    使用临时密码登录并修改:

    mysql -u root -p  # 输入临时密码
    
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    FLUSH PRIVILEGES;
    
  2. 运行安全脚本

    sudo /opt/software/mysql/mysql/bin/mysql_secure_installation
    

    按提示移除匿名用户、禁止远程 root 登录等。

  3. 验证安装

    mysql -V  # 输出:mysql Ver 14.14 Distrib 5.7.44
    systemctl status mysql  # 确认服务状态为 active (running)
    

⚠️ 关键问题与注意事项

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

  2. 依赖缺失处理

    • 若报错 libtinfo.so.5 缺失:
      sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib64/libtinfo.so.5
      
    • 编译失败时检查日志:
      cat /opt/software/mysql/build/CMakeCache.txt | grep "NOT_FOUND"
      
  3. 服务管理

    • 自定义配置文件路径:/etc/my.cnf(需手动创建)
    • 日志定位:/opt/software/mysql/data/*.err
  4. 安全建议

    • 生产环境需限制防火墙访问:
      sudo ufw allow 3306/tcp
      
    • MySQL 5.7 已结束官方支持(EOL),仅建议用于兼容性场景。

总结:编译安装可精准控制版本与配置,但复杂度较高。若无需定制,推荐使用 APT 安装(参考 )。操作前务必备份数据,编译失败时可清理 /opt/software/mysql/build 后重试。

















在 Debian 10 上通过源码编译安装 MySQL 5.7.44 的完整步骤如下,包含依赖处理、编译配置及常见问题解决方案:


一、环境准备

         1. 安装编译依赖

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake ncurses5 libaio1 wget libssl-dev libmecab2
  • 关键依赖说明
    • libaio1:异步 I/O 支持
    • ncurses5:终端交互库
    • libssl-dev:SSL/TLS 加密支持
    • libmecab2:分词库(用于全文索引)

         2. 创建专用用户和目录

sudo groupadd mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql
sudo mkdir -p /usr/local/mysql/{data,logs,tmp}
sudo chown -R mysql:mysql /usr/local/mysql

二、下载与编译源码

         1. 下载 MySQL 5.7.44 源码包

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. 配置编译参数(关键步骤)

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=./boost \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITHOUT_SERVER=OFF  # 启用服务端编译
  • 参数说明
    • -DWITH_BOOST:指定 Boost 库路径(需与源码包内路径一致)
    • -DWITHOUT_SERVER=OFF:确保编译完整服务端程序

         3. 编译与安装

make -j$(nproc)  # 使用多核加速编译
sudo make install
  • 编译耗时:约 10-20 分钟(视硬件性能)

三、初始化与配置

         1. 初始化数据库

cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 记录临时密码:日志文件 /usr/local/mysql/data/error.log 中包含初始密码(格式:A temporary password is generated for root@localhost: ********

         2. 配置系统服务

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

         3. 启动 MySQL 服务

sudo systemctl start mysql
sudo systemctl status mysql  # 检查运行状态

四、安全配置

         1. 修改 root 密码

/usr/local/mysql/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourSecurePassword!';
FLUSH PRIVILEGES;

         2. 运行安全脚本

sudo /usr/local/mysql/bin/mysql_secure_installation
  • 操作选项
    • 移除匿名用户
    • 禁止远程 root 登录
    • 删除测试数据库
    • 重新加载权限表

五、常见问题解决

         1. 编译错误:找不到 Boost 库

  • 原因:CMake 未正确指向 Boost 路径
  • 解决:重新配置并指定 Boost 目录:
    cmake . -DWITH_BOOST=/path/to/mysql-5.7.44/boost
    

         2. 初始化失败:权限问题

  • 解决:确保数据目录权限正确:
    sudo chown -R mysql:mysql /usr/local/mysql/data
    

         3. 启动时报错:libtinfo.so.5 缺失

  • 解决:创建符号链接(Debian 10 默认使用 ncurses6):
    sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
    

         4. 远程连接被拒绝

  • 修改配置文件:编辑 /etc/mysql/my.cnf,注释 bind-address = 127.0.0.1
  • 授权远程访问
    CREATE USER 'user'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

六、验证安装

mysql --version  # 应输出 mysql  Ver 14.14 Distrib 5.7.44
mysql -u root -p -e "SELECT VERSION();"

七、卸载与清理(可选)

sudo systemctl stop mysql
sudo rm -rf /usr/local/mysql
sudo rm -f /etc/init.d/mysql

选择建议

  • 生产环境:推荐通过官方 APT 仓库安装(搜索结果),自动处理依赖和更新。
  • 定制需求:仅当需要修改编译参数(如启用 SSL 或调整存储引擎)时使用源码安装。

如需进一步优化(如调整 InnoDB 缓冲池大小),可编辑 /etc/mysql/my.cnf 并重启服务。

















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 官方文档或相关教程。

















Debian 10 上编译安装 MySQL 5.7.44 的步骤如下:


1. 准备工作

         1.1 安装依赖

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

         1.2 下载 MySQL 5.7.44 源码包
从 MySQL 官方归档页面下载源码包:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

2. 创建 MySQL 用户和用户组

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

3. 配置 MySQL 安装路径

         3.1 创建安装目录

sudo mkdir -p /usr/local/mysql
sudo chown -R mysql:mysql /usr/local/mysql

         3.2 创建数据目录

sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql

4. 编译 MySQL

         4.1 配置 CMake

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-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_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_IPOPTIMIZATION=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0

         4.2 编译和安装

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

5. 初始化 MySQL 数据库

cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

说明--initialize-insecure 会生成空密码的 root 用户,后续需要手动设置密码。


6. 配置 MySQL 服务

         6.1 创建 my.cnf 配置文件

sudo vi /etc/my.cnf

添加以下内容:

[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
port=3306
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
bind-address=0.0.0.0

         6.2 创建 systemd 服务文件

sudo vi /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
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=on-failure[Install]
WantedBy=multi-user.target

         6.3 启动并启用 MySQL 服务

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

7. 设置 root 密码和安全配置

         7.1 登录 MySQL

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

         7.2 修改 root 密码

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

         7.3 安全配置(可选)

-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 禁止 root 远程登录(可选)
UPDATE mysql.user SET Host='localhost' WHERE User='root' AND Host='%';
-- 刷新权限
FLUSH PRIVILEGES;

8. 配置远程访问(可选)

         8.1 修改 my.cnf

sudo vi /etc/my.cnf

bind-address 改为:

bind-address=0.0.0.0

         8.2 授权远程访问

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

         8.3 开放防火墙端口

sudo ufw allow 3306/tcp
sudo ufw reload

9. 验证安装

         9.1 检查服务状态

sudo systemctl status mysqld

         9.2 检查 MySQL 版本

/usr/local/mysql/bin/mysql --version

         9.3 远程连接测试

mysql -h <服务器IP> -u root -p

10. 常见问题解决

         10.1 权限问题

  • 确保 /data/mysql 目录权限为 mysql:mysql
    sudo chown -R mysql:mysql /data/mysql
    

         10.2 端口冲突

  • 检查 3306 端口是否被占用:
    sudo netstat -tulnp | grep 3306
    

         10.3 查看错误日志

  • MySQL 错误日志通常位于:
    tail -n 100 /data/mysql/hostname.err
    

11. 补充说明

  • 如果需要卸载 MySQL,可删除相关目录和配置:
    sudo systemctl stop mysqld
    sudo systemctl disable mysqld
    sudo rm -rf /usr/local/mysql /data/mysql /etc/my.cnf /etc/systemd/system/mysqld.service
    sudo userdel mysql
    sudo groupdel mysql
    

通过以上步骤,你应该能够在 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 libbz2-dev libcurl4-openssl-dev libarchive-dev liblz4-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 -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

4. 配置编译选项(使用CMake)

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_PARTITION_STORAGE_ENGINE=1 \-DWITH_FEDERATED_STORAGE_ENGINE=1 \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DTRACE=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_unicode_ci \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock

5. 编译和安装

make -j$(nproc)  # 使用多线程编译(nproc显示CPU核心数)
sudo make install

6. 配置MySQL

创建配置文件 /etc/my.cnf

sudo tee /etc/my.cnf <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock
port = 3306
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
EOF

7. 初始化数据库

sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqldcd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

注意:初始化后会生成临时密码(在输出中显示 [Note] A temporary password is generated for root@localhost: xxxxx),请记录该密码。

8. 启动MySQL服务

sudo bin/mysqld_safe --user=mysql &

9. 配置环境变量

将MySQL命令添加到系统路径:

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

10. 安全设置

使用临时密码登录并修改root密码:

mysql -u root -p
# 输入临时密码后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
FLUSH PRIVILEGES;

11. 配置为系统服务

创建systemd服务文件:

sudo tee /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=always
LimitNOFILE=10000[Install]
WantedBy=multi-user.target
EOF

重载systemd并启用服务:

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

验证安装

mysql -u root -p -e "SELECT VERSION();"

输出应显示 5.7.44

常见问题

  1. 编译错误:检查依赖是否完整安装。
  2. 启动失败:检查日志文件 /usr/local/mysql/data/hostname.err
  3. 权限问题:确保 /usr/local/mysql/var/run/mysqld 目录权限正确。

通过以上步骤,你可以在Debian 10上成功编译安装MySQL 5.7.44。

















在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

在 Debian 10 上编译安装 MySQL 5.7.44

         步骤 1:安装编译依赖

sudo apt update
sudo apt install -y cmake build-essential \
libncurses5-dev libssl-dev libboost-all-dev \
bison git wget

说明:MySQL 5.7 需要 Boost 库和 OpenSSL 开发包。

         步骤 2:下载源码

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

         步骤 3:配置编译选项

mkdir build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/lib/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=../boost

关键参数

  • INSTALL_PREFIX:指定安装目录
  • MYSQL_DATADIR:设置数据库存储路径
  • WITH_SSL=system:使用系统 OpenSSL 库

         步骤 4:编译和安装

make -j$(nproc)        # 使用所有 CPU 核心加速编译
sudo make install      # 需要 root 权限

         步骤 5:创建系统用户和目录

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql

         步骤 6:初始化数据库

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

注意--initialize-insecure 会创建空密码的 root 账户,生产环境应使用 --initialize 生成随机密码。

         步骤 7:配置 systemd 服务
创建服务文件 /etc/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld \
--basedir=/usr/local/mysql \
--datadir=/var/lib/mysql \
--plugin-dir=/usr/local/mysql/lib/plugin \
--log-error=/var/log/mysql/error.log
Restart=on-failure[Install]
WantedBy=multi-user.target

启用服务:

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

         步骤 8:设置环境变量

echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

         步骤 9:安全初始化

sudo mysql_secure_installation

按提示设置 root 密码、移除匿名用户等安全选项。

         验证安装

mysql -u root -p -e "SELECT VERSION();"

应输出:5.7.44

常见问题解决

  1. CMake 错误

    • 检查缺失依赖:sudo apt install libtinfo5
    • 清除缓存:rm CMakeCache.txt
  2. 内存不足

    sudo dd if=/dev/zero of=/swapfile bs=1G count=4
    sudo mkswap /swapfile && sudo swapon /swapfile
    
  3. 服务启动失败

    sudo journalctl -u mysqld -f  # 查看实时日志
    

重要提示:编译过程约需 1-2 小时(取决于硬件),建议在稳定环境中操作。


相关问题

  1. MySQL 5.7 与 Debian 10 的兼容性问题有哪些?
  2. 如何优化 MySQL 5.7 的编译参数提升性能?
  3. 源码安装的 MySQL 如何升级到新版本?
  4. 编译安装和包管理器安装的 MySQL 有何本质区别?
: MySQL 官方要求编译时必须安装 Boost 库和 OpenSSL 开发包
配置文件需正确设置数据目录和套接字路径
编译大型项目建议预留至少 4GB 内存空间

















在 Debian 10 上编译安装 MySQL 5.7.44 需要手动下载源码并进行编译。以下是详细步骤:


一、安装编译依赖

sudo apt update
sudo apt install -y build-essential cmake libncurses5-dev libssl-dev libaio-dev libbz2-dev liblz4-dev liblzma-dev libjemalloc-dev libreadline-dev libcurl4-openssl-dev libcap-dev libnuma-dev

二、下载 MySQL 5.7.44 源码

# 创建目录并下载源码包
mkdir ~/mysql-src && cd ~/mysql-src
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/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 \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=yes \
-DWITH_ZLIB=bundled \
-DWITH_DEBUG=0 \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1

四、编译并安装

# 编译(可能需要较长时间)
make -j$(nproc)# 安装
sudo make install

五、配置 MySQL 环境

# 创建 mysql 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql# 设置目录权限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod -R 755 /usr/local/mysql# 初始化数据库
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

六、配置系统服务

  1. 创建 systemd 服务文件/etc/systemd/system/mysqld.service):
[Unit]
Description=MySQL Server
After=network.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
  1. 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld

七、配置 MySQL

  1. 编辑配置文件/etc/my.cnf):
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/mysqld.pid
port=3306
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock
  1. 登录 MySQL 设置密码
sudo /usr/local/mysql/bin/mysql_secure_installation

八、验证安装

# 检查服务状态
systemctl status mysqld# 登录 MySQL 查看版本
/usr/local/mysql/bin/mysql -u root -p
SELECT VERSION();

注意事项

  1. 依赖问题:若编译失败,请检查是否安装所有依赖库。
  2. 路径问题:确保 basedirdatadir 路径权限正确。
  3. 初始化密码:初始化时会生成临时 root 密码,需在日志中查看并设置新密码。

如果需要更详细的配置选项或遇到问题,可以进一步说明具体需求!

















7️⃣ 参考 7

以下是在 Debian 10 上通过编译源码安装 MySQL 5.7.44 的详细步骤:


1. 安装编译依赖环境

sudo apt update
sudo apt install -y cmake gcc g++ make libncurses5-dev libssl-dev libaio-dev libsystemd-dev zlib1g-dev bison

2. 下载 MySQL 5.7.44 源码包

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

3. 配置编译选项

mkdir build && cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc/mysql \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_SYSTEMD=1 \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci

关键参数说明

  • CMAKE_INSTALL_PREFIX:指定安装路径。
  • MYSQL_DATADIR:数据库文件存储目录。
  • SYSCONFDIR:配置文件目录(默认生成 /etc/mysql/my.cnf)。
  • WITH_*:启用的存储引擎和功能模块。

4. 编译并安装

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

5. 创建 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

6. 初始化 MySQL 数据库

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

记录输出的临时 root 密码(如 [Note] A temporary password is generated for root@localhost: xxxxxx)。


7. 配置 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/mysql/my.cnf
LimitNOFILE=5000[Install]
WantedBy=multi-user.target

8. 启动 MySQL 服务

sudo systemctl daemon-reload
sudo systemctl start mysql
sudo systemctl enable mysql

9. 设置 root 密码

/usr/local/mysql/bin/mysql_secure_installation

按提示输入临时密码并修改为新密码。


10. 验证安装

/usr/local/mysql/bin/mysql -uroot -p -e "SELECT VERSION();"

常见问题解决

         1. 初始化失败(目录权限问题)
检查 /usr/local/mysql/data 的权限:

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

         2. 依赖缺失导致编译中断
通过 apt search 查找缺失的头文件或库,例如:

sudo apt install libssl-dev

         3. 无法连接到 socket
检查配置文件 /etc/mysql/my.cnf 中的 socket 路径是否匹配:

[mysqld]
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock

环境变量配置(可选)

将 MySQL 添加到 PATH:

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

总结

此方法适合需要 深度自定义编译选项 的场景。如果仅需快速部署,建议优先使用 APT 仓库安装。MySQL 5.7 已结束官方支持(EOL),建议生产环境升级至 MySQL 8.x。

















在Debian 10上编译安装MySQL 5.7.44的步骤如下:


1. 安装依赖环境

sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev libssl1.1 \libreadline-dev zlib1g-dev git pkg-config wget

2. 创建MySQL用户和组

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

3. 下载MySQL源码

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

4. 配置编译选项

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_SSL=system \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DTRACE=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci

:如果配置失败,删除 build/ 目录并重新执行 cmake


5. 编译并安装

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

6. 初始化数据库

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

保存初始密码:输出末尾的 root@localhost: 随机密码


7. 配置MySQL服务

         (1) 创建配置文件

sudo cp support-files/my-default.cnf /etc/my.cnf
sudo sed -i 's/^\[mysqld\]$/&\nuser=mysql\nbasedir=\/usr\/local\/mysql\ndatadir=\/usr\/local\/mysql\/data/' /etc/my.cnf

         (2) 创建Systemd服务文件

sudo tee /etc/systemd/system/mysqld.service <<EOF
[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
EOF

         (3) 加载服务并启动

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

8. 设置环境变量

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

9. 安全加固

# 使用初始密码登录
mysql -u root -p

在MySQL提示符下执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

















8️⃣ 参考 8

































9️⃣ 参考 9

































🔟 参考 10











































http://www.dtcms.com/a/272578.html

相关文章:

  • macOS 上安装 Miniconda + Conda-Forge
  • Jekyll + Chirpy + GitHub Pages 搭建博客
  • 如何使用Java WebSocket API实现客户端和服务器端的通信?
  • 蓝桥杯第十六届(2025)真题深度解析:思路复盘与代码实战
  • MinerU将PDF转成md文件,并分拣图片
  • Alibaba Druid主要配置
  • 图片合并pdf
  • 新手向:实现ATM模拟系统
  • TDengine 数据库建模最佳实践
  • Oracle 视图
  • Tomcat:Java Web应用的幕后英雄
  • 线性探针是什么:是一种用于探测神经网络中特定特征的工具
  • 从零开始搭建深度学习大厦系列-3.卷积神经网络基础(5-9)
  • 李宏毅(深度学习)--(2)
  • 数据库复合索引设计:为什么等值查询列应该放在范围查询列前面?
  • 区间动态规划详解
  • 【JMeter】跨线程组传递参数
  • 在Docker中运行macOS的超方便体验!
  • SpringAI×Ollama:Java生态无缝集成本地大模型实践指南
  • Redis数据库基础概述
  • 8.2.3希尔排序
  • Spring for Apache Pulsar->Reactive Support->Message Production
  • KV Cache原理详解 + 代码理解
  • 从零实现一个GPT 【React + Express】--- 【2】实现对话流和停止生成
  • Pytest之收集用例规则与运行指定用例
  • 外贸网站模板 网页设计模板网站
  • WinUI3入门17:本地文件存储LocalApplicationData在哪里
  • 【佳易王桌球棋牌计时计费软件】:从功能到实操的全方位解析,灯控器适配、会员管理多场景,软件程序操作教程详解
  • BatchNorm解决梯度消失/爆炸
  • van-tabs 自定义