Debian10编译安装Mysql5.7.44 笔记250706
单一脚本安装
### 1. 安装编译依赖
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz
### 2. 创建 MySQL 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
### 3. 下载编译包,解压并配置编译参数
mkdir -pm 777 ~/InstallSetup/mysql && cd $_
if [ ! -e mysql-boost-5.7.44.tar.gz ] ;then
sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
fi
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SYSTEMD=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_JEMALLOC=system \
-DWITH_LTO=ON \
-DWITH_DEBUG=0 \
-DENABLED_LOCAL_INFILE=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQLX_TCP_PORT=33060 \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
-DSYSTEMD_PID_DIR=/var/run/mysqld \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
-DFORCE_INSOURCE_BUILD=1 \
-DENABLE_DOWNLOADS=1 -DWITH_BOOST=../boost/boost_1_59_0 # 用于自带boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
### 4. 编译, 安装, 设置环境变量
#### 1. 编译.安装
make -j$(nproc) # 使用所有CPU核心
sudo make install
#### 2. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
### 五. 创建配置 mysqld 服务
#### 1. 创建目录设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
#### 2. 初始化数据库
##### root无密码初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#### 3. 创建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock ### 默认: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid
[client]
socket = /var/run/mysqld/mysqld.sock ### 默认: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
##### 4. 创建启动服务
###### 创建 systemd 服务
sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOFxxxXXXeof---foeXXXxxxFOE
###### 启动启用服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
分步安装
1. 安装编译依赖
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz
2. 创建 MySQL 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
或
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/nologin mysql
3. 下载编译包,解压并配置编译参数
MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。源码包 mysql-boost-5.7.44.tar.gz 已包含正确版本。
下载编译自带 Boost库 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SYSTEMD=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_JEMALLOC=system \
-DWITH_LTO=ON \
-DWITH_DEBUG=0 \
-DENABLED_LOCAL_INFILE=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQLX_TCP_PORT=33060 \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
-DSYSTEMD_PID_DIR=/var/run/mysqld \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
-DFORCE_INSOURCE_BUILD=1 \
-DENABLE_DOWNLOADS=1 -DWITH_BOOST=../boost/boost_1_59_0 # 用于自带boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
下载编译不带 Boost库 的版本
MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。
boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包
下载编译不带 Boost库 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SYSTEMD=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_JEMALLOC=system \
-DWITH_LTO=ON \
-DWITH_DEBUG=0 \
-DENABLED_LOCAL_INFILE=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQLX_TCP_PORT=33060 \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
-DSYSTEMD_PID_DIR=/var/run/mysqld \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
-DFORCE_INSOURCE_BUILD=1 \
-DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost -DDOWNLOAD_BOOST=1 # 用于无boost版,会自动下载boost1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹
## 只能用boost.1.59.0版 -DDOWNLOAD_BOOST=1 会自动下载boost.1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹
也可以手动安装 boost 库(可选)
boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包
boost_1_59_0.tar.gz 80多兆 , mysql-boost-5.7.44 50多兆
mkdir -pm 777 /tmp/install/boost && cd $_
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost/
4. 编译, 安装, 设置环境变量
1. make编译
make -j$(nproc) # 使用所有CPU核心
2. make安装
sudo make install
3. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
创建配置 mysqld 服务
1. 创建目录设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
2. 初始化数据库
root无密码初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
root随机密码初始化
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3. 创建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock ### 默认: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid
[client]
socket = /var/run/mysqld/mysqld.sock ### 默认: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
4. 创建启动服务
创建启动服务方式1: 创建 systemd 服务
创建 systemd 服务
sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOFxxxXXXeof---foeXXXxxxFOE
启动启用服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
移除服务
sudo systemctl stop mysqld
sudo systemctl disable mysqld --now
sudo rm -rf /etc/systemd/system/mysqld.service
sudo systemctl daemon-reload
创建启动服务方式2: 用 SysV init 启动脚本方式创建服务
/usr/local/mysql/support-files/mysql.server 是现成的 SysV init 启动脚本
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld
启动
sudo /etc/init.d/mysqld start
设置开机自启
sudo update-rc.d mysqld defaults
Debian10已支持用 systemctl 启动启用 /etc/init.d 的 服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
详解分步安装
1. 安装编译依赖
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz
以下是对您列出的 Debian 10 编译依赖包的详细讲解和建议优化方案。这些依赖主要用于编译 MySQL 5.7.44 等大型 C/C++ 项目:
依赖包分类说明
1. 核心编译工具
| 包名 | 作用说明 | 必要性 |
|---|---|---|
cmake | 跨平台构建系统工具 (MySQL 使用 CMake 构建) | ★★★★★ |
gcc g++ | GNU C/C++ 编译器 | ★★★★★ |
build-essential | 包含 make, gcc, libc-dev 等基础编译工具 | ★★★★★ |
pkg-config | 帮助查找库路径和编译标志的工具 | ★★★★☆ |
2. MySQL 必需依赖
| 包名 | 作用说明 | 必要性 |
|---|---|---|
libncurses5-dev | 终端处理库 (mysql 命令行依赖) | ★★★★★ |
libssl-dev | OpenSSL 开发库 (加密连接支持) | ★★★★★ |
libreadline-dev | 命令行编辑功能支持 | ★★★★☆ |
zlib1g-dev | 数据压缩库 (日志压缩等) | ★★★★☆ |
bison | 语法分析器生成器 (SQL 解析器依赖) | ★★★★★ |
libaio-dev | 异步 I/O 支持 (提升 InnoDB 性能) | ★★★★☆ |
libnuma-dev | NUMA 架构支持 (多 CPU 系统优化) | ★★★☆☆ |
libboost-all-dev | Boost C++ 库全集 (MySQL 测试框架依赖) | ★★★★☆ |
3. 优化增强依赖
| 包名 | 作用说明 | 必要性 |
|---|---|---|
libjemalloc-dev | 高性能内存分配器 (替代 glibc malloc) | ★★★☆☆ |
libtbb-dev | Intel 线程构建块库 (并行计算优化) | ★★☆☆☆ |
4. 调试诊断工具
| 包名 | 作用说明 | 必要性 |
|---|---|---|
gdb | GNU 调试器 | ★★★☆☆ |
strace | 系统调用跟踪工具 | ★★☆☆☆ |
ltrace | 库函数调用跟踪工具 | ★★☆☆☆ |
5. 文档生成工具
| 包名 | 作用说明 | 必要性 |
|---|---|---|
doxygen | API 文档生成器 | ★☆☆☆☆ |
graphviz | 图表生成工具 (配合 doxygen) | ★☆☆☆☆ |
6. 脚本支持
| 包名 | 作用说明 | 必要性 |
|---|---|---|
libjson-perl | Perl 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
- 包含所有调试和文档工具
- 适合深度开发和性能调优场景
关键组件说明
-
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 -
内存分配器选择
- jemalloc:减少内存碎片,适合长期运行服务
- tcmalloc:(未包含) Google 高性能分配器
在 my.cnf 中启用:
[mysqld] malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1 -
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
总结建议
- 生产环境编译:使用方案 2,包含性能优化组件
- 开发调试环境:使用方案 3,保留诊断工具
- 磁盘空间紧张:使用方案 1,后续按需添加
- 关键组件:务必确保
cmake,gcc,bison,libssl-dev正确安装 - 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 mysql | useradd -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
验证示例:
$ sudo -u mysql /bin/bash
## 无错误提示,直接返回命令行
$ echo $?
1
适用场景:
- 需要完全静默拒绝登录的环境
- 安全审计要求不产生任何登录痕迹
- 防止攻击者探测到有效用户名
/bin/nologin 详解
行为特点:
- 当用户尝试登录时显示预设信息
- 输出提示:
This account is currently not available. - 返回错误状态码
1 - 提示信息可通过
/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
适用场景:
- 需要明确提示账户用途的环境
- 方便系统管理员理解账户性质
- 符合某些安全合规的明确拒绝要求
核心共同作用
-
权限隔离
MySQL 服务以该用户身份运行,避免使用 root -
文件所有权
数据库文件设置为mysql:mysql所有:drwxr-x--- 4 mysql mysql 4096 /var/lib/mysql -
登录防护
双重保障:- Shell 本身拒绝登录
- 在
/etc/passwd中标记为不可登录:mysql:x:127:133:MySQL Server:/nonexistent:/bin/false
-
服务安全
满足 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 | 减少镜像层大小 |
实践建议
-
先创建组再创建用户:
sudo groupadd -r mysql # 根据环境选择其一 sudo useradd -r -g mysql -s /bin/false mysql # 生产推荐 # 或 sudo useradd -r -g mysql -s /bin/nologin mysql # 开发推荐 -
验证账户属性:
$ grep mysql /etc/passwd # 正确输出: mysql:x:998:997:MySQL Server:/nonexistent:/bin/false -
修复已存在账户:
# 如果已创建但需要修改 sudo usermod -s /bin/false mysql -
数据目录权限:
sudo chown -R mysql:mysql /var/lib/mysql sudo chmod 750 /var/lib/mysql
📌 关键原则:无论选择哪种方式,都比使用登录 shell(如
/bin/bash)更安全,这是 MySQL 安全部署的基本要求。
3. 下载编译包,解压并配置编译参数
MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。源码包 mysql-boost-5.7.44.tar.gz 已包含正确版本。
下载编译自带 Boost库 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SYSTEMD=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_JEMALLOC=system \
-DWITH_LTO=ON \
-DWITH_DEBUG=0 \
-DENABLED_LOCAL_INFILE=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQLX_TCP_PORT=33060 \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
-DSYSTEMD_PID_DIR=/var/run/mysqld \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
-DFORCE_INSOURCE_BUILD=1 \
-DENABLE_DOWNLOADS=1 -DWITH_BOOST=../boost/boost_1_59_0 # 用于自带boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
下载编译不带 Boost库 的版本
MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。
boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包
下载编译不带 Boost库 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SYSTEMD=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_JEMALLOC=system \
-DWITH_LTO=ON \
-DWITH_DEBUG=0 \
-DENABLED_LOCAL_INFILE=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQLX_TCP_PORT=33060 \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \
-DSYSTEMD_PID_DIR=/var/run/mysqld \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \
-DFORCE_INSOURCE_BUILD=1 \
-DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost -DDOWNLOAD_BOOST=1 # 用于无boost版,会自动下载boost1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹
## 只能用boost.1.59.0版 -DDOWNLOAD_BOOST=1 会自动下载boost.1.59.0版 到 -DWITH_BOOST指定的文件夹下的boost_1_59_0文件夹
也可以手动安装 boost 库(可选)
boost的压缩包比带boost的mysql源码包还要大, 还不如直接用带boost的源码包
boost_1_59_0.tar.gz 80多兆 , mysql-boost-5.7.44 50多兆
mkdir -pm 777 /tmp/install/boost && cd $_
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost/
相关cmake配置参数讲解
源码编译安装mysql用到的cmake的配置参数 笔记250401
一、基础路径配置
| 参数 | 说明 | 注意事项 |
|---|---|---|
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql | 安装根目录 | 推荐保持默认 |
-DMYSQL_DATADIR=/usr/local/mysql/data | 数据存储目录 | 需手动创建并授权:sudo mkdir -p /usr/local/mysql/datasudo chown mysql:mysql /usr/local/mysql/data |
-DSYSCONFDIR=/etc | 配置文件目录 | my.cnf 存放位置 |
二、存储引擎配置
| 参数 | 说明 | 推荐 |
|---|---|---|
-DWITH_INNOBASE_STORAGE_ENGINE=1 | InnoDB 引擎 | 必须启用 |
-DWITH_PARTITION_STORAGE_ENGINE=1 | 分区表支持 | 按需 |
-DWITH_ARCHIVE_STORAGE_ENGINE=1 | ARCHIVE 引擎 | 归档存储 |
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 | BLACKHOLE 引擎 | 复制过滤 |
-DWITH_MYISAM_STORAGE_ENGINE=1 | MyISAM 引擎 | 兼容旧系统 |
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 | 性能监控引擎 | 生产环境建议 |
三、系统集成与性能
| 参数 | 说明 | 优化效果 |
|---|---|---|
-DWITH_READLINE=1 | 命令行编辑支持 | 需 libreadline-dev |
-DWITH_SYSTEMD=1 | Systemd 集成 | 关键参数: • 生成 mysqld.service • 需后续配置 |
-DWITH_JEMALLOC=system | Jemalloc 内存分配器 | 显著提升性能: • 减少内存碎片 • 提高并发能力 需 libjemalloc-dev |
-DWITH_LTO=ON | 链接时优化(LTO) | 激进优化: • 提升运行时性能 5-15% • 增加编译时间 2-3 倍 • 需要更多内存 |
-DFORCE_INSOURCE_BUILD=1 | 强制源码内编译 | 简化编译流程 |
四、安全与加密
| 参数 | 说明 | 安全建议 |
|---|---|---|
-DWITH_SSL=system | 系统 OpenSSL | 需 libssl-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/boost | Boost 库路径 | MySQL 5.7 必需 |
-DDOWNLOAD_BOOST=1 | 自动下载 Boost | 组合逻辑: 1. 检查指定路径 2. 不存在则下载 |
graph LR
A[开始配置] --> B{检查 /usr/local/boost}
B -->|存在| C[使用现有Boost]
B -->|不存在| D[下载Boost 1.59.0]
D --> E[解压到指定路径]
C --> F[继续编译]
E --> F
新增优化参数详解
1. Jemalloc 内存分配器 (-DWITH_JEMALLOC=system)
- 作用:替代 glibc 的 malloc,优化多线程内存管理
- 优势:
- 减少内存碎片
- 提高高并发下的性能
- 降低内存占用
- 安装依赖:
sudo apt install libjemalloc-dev
2. 链接时优化 (-DWITH_LTO=ON)
- 原理:在链接阶段进行全程序优化
- 效果:
- 提升运行时性能 5-15%
- 减小二进制体积 10-20%
- 代价:
- 编译时间增加 2-3 倍
- 内存需求翻倍(建议 ≥4GB RAM + 4GB Swap)
- 可能增加编译不稳定性
3. 源码内编译 (-DFORCE_INSOURCE_BUILD=1)
- 作用:强制在源码目录编译(默认推荐 out-of-source 编译)
- 优点:简化编译流程
- 缺点:污染源码目录(中间文件混入)
- 替代方案(推荐):
mkdir build && cd build cmake .. [其他参数] # 无需 FORCE_INSOURCE_BUILD
此配置结合了高级优化技术(LTO + Jemalloc),适合追求极致性能的生产环境,但需要充足的硬件资源支持编译过程。
源码编译安装mysql用到的cmake的配置参数 笔记250401
MySQL 5.7 Source-Configuration Options CMake Option Reference Table 2.14 MySQL Source-Configuration Option Reference (CMake)
4. 编译, 安装, 设置环境变量
1. make编译
make -j$(nproc) # 使用所有CPU核心
2. make安装
sudo make install
3. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
创建配置 mysqld 服务
1. 创建目录设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
2. 初始化数据库
root无密码初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
root随机密码初始化
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3. 创建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock ### 默认: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid
[client]
socket = /var/run/mysqld/mysqld.sock ### 默认: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
4. 创建启动服务
创建启动服务方式1: 创建 systemd 服务
创建 systemd 服务
sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOFxxxXXXeof---foeXXXxxxFOE
启动启用服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
移除服务
sudo systemctl stop mysqld
sudo systemctl disable mysqld --now
sudo rm -rf /etc/systemd/system/mysqld.service
sudo systemctl daemon-reload
创建启动服务方式2: 用 SysV init 启动脚本方式创建服务
/usr/local/mysql/support-files/mysql.server 是现成的 SysV init 启动脚本
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld
启动
sudo /etc/init.d/mysqld start
设置开机自启
sudo update-rc.d mysqld defaults
Debian10已支持用 systemctl 启动启用 /etc/init.d 的 服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
1️⃣ 参考 1
在 Debian 10 上编译安装 MySQL 5.7.44 需要仔细执行以下步骤,我将提供完整指南并优化关键环节:
准备工作
1. 安装编译依赖
sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison wget libaio-dev \
gcc g++ libjson-perl libnuma-dev
2. 创建 MySQL 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3. 安装 Boost 库 (必需)
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost
编译安装过程
1. 下载源码
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
2. 配置编译选项 (关键优化)
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DENABLE_DOWNLOADS=1 \
-DWITH_BOOST=/usr/local/boost \
-DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer"
3. 编译并安装 (使用多核加速)
make -j$(nproc) # 使用所有CPU核心
sudo make install
系统配置
1. 设置目录权限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
2. 初始化数据库
sudo bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
3. 创建配置文件
sudo cp support-files/my-default.cnf /etc/my.cnf
sudo nano /etc/my.cnf
添加以下内容:
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock
port = 3306
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid
[client]
socket = /var/run/mysqld/mysqld.sock
服务管理
1. 创建 systemd 服务
sudo nano /etc/systemd/system/mysqld.service
内容如下:
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2. 启动服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
初始设置
1. 设置环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
2. 设置 root 密码
mysql -u root --skip-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourSecurePassword';
FLUSH PRIVILEGES;
EXIT;
3. 安全加固
mysql_secure_installation
按提示完成安全设置
验证安装
mysql --version
# 输出: mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using EditLine wrapper
sudo systemctl status mysqld
故障排除指南
1. 编译错误处理
# 清除缓存后重新配置
rm CMakeCache.txt
cmake .. [原参数]
2. 启动失败检查
sudo tail -f /var/log/mysql/error.log
3. 常见错误解决
- 缺少 libtinfo:
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5 - 无法创建 PID 文件:
sudo chown -R mysql:mysql /var/run/mysqld
4. 性能优化建议 在 /etc/my.cnf 添加:
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
thread_cache_size = 10
query_cache_size = 64M
安全注意事项
- 生产环境不要使用
--initialize-insecure - 初始化后立即修改 root 密码
- 定期备份数据和配置文件
- 启用防火墙限制访问:
sudo ufw allow 3306/tcp
通过以上步骤,您可以在 Debian 10 上成功编译安装高性能的 MySQL 5.7.44。编译过程可能需要 30-60 分钟(取决于硬件配置),请确保系统有足够内存(建议至少 2GB)。
2️⃣ 参考 2
Debian10编译安装MySQL5.7.44详细步骤
一、环境准备 1. 更新系统并安装依赖
sudo apt update
sudo apt install -y \
gcc g++ cmake make \
libncurses5-dev libssl-dev \
libboost-dev bison libaio-dev \
libreadline-dev zlib1g-dev \
pkg-config libsystemd-dev
二、下载MySQL源码 1. 下载源码包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
2. 验证MD5校验值(可选) 从MySQL官方下载页面获取对应平台的MD5值,执行:
md5sum mysql-5.7.44.tar.gz
对比输出与官方值是否一致。
三、编译配置 1. 创建构建目录并配置
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLE_DOWNLOADS=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/include
四、编译与安装 1. 编译并安装
make -j$(nproc) # 多核编译加速
sudo make install
五、初始化配置 1. 创建MySQL用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
2. 初始化数据库
cd /usr/local/mysql
sudo mkdir -p data
sudo chown -R mysql:mysql .
sudo bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
- 记录临时密码:初始化完成后,控制台会输出临时root密码,如:
A temporary password is generated for root@localhost: XXXXXXXXX
六、启动服务 1. 配置开机启动
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo systemctl start mysql
sudo systemctl enable mysql
2. 验证服务状态
sudo systemctl status mysql
七、安全配置 1. 运行安全脚本
sudo bin/mysql_secure_installation
- 步骤说明:
- 输入临时root密码。
- 设置新root密码(建议复杂密码)。
- 移除匿名用户。
- 禁止root远程登录。
- 移除测试数据库。
- 重新加载权限表。
八、环境变量配置
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
九、验证安装 1. 检查MySQL版本
mysql --version
输出应类似:
mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64)
2. 登录MySQL
mysql -u root -p
输入设置的root密码,成功登录后执行:
SELECT VERSION();
十、卸载MySQL
sudo apt purge mysql-server mysql-client mysql-common
sudo rm -rf /etc/mysql /var/lib/mysql /usr/local/mysql
sudo apt autoremove
通过以上步骤,您可以在Debian10系统上成功编译安装MySQL5.7.44,并进行基础配置和安全加固。
3️⃣ 参考 3
以下是在 Debian 10 系统上通过源码编译安装 MySQL 5.7.44 的完整步骤,结合依赖管理、编译优化和初始化配置的关键要点,并附常见问题解决方案:
📦 一、安装依赖与环境准备
-
安装编译依赖
确保系统已安装必要的开发工具和库: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。
-
下载源码(推荐自带 Boost 版本)
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz tar -zxvf mysql-boost-5.7.44.tar.gz cd mysql-5.7.44注意:若官网链接失效,需从 downloads.mysql.com/archives/co… 手动下载。
⚙️ 二、编译配置与安装
-
配置编译参数
在源码目录创建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)。
- 若使用无 Boost 的源码包,需添加
-
编译与安装
启用多核编译加速(根据 CPU 核心数调整-j参数):make -j$(nproc) # 编译(耗时约 30-60 分钟) sudo make install # 安装到指定目录
🔧 三、初始化与系统配置
-
创建系统用户和组
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql -
初始化数据库
创建数据目录并初始化(记录输出的临时 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。
- 若需无密码初始化(不推荐),使用
-
配置 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 -
修改 root 密码
使用临时密码登录并更新:/usr/local/mysql/bin/mysql -u root -pALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;
🔒 四、安全加固与优化
-
运行安全脚本
删除匿名用户、禁止远程 root 登录等:sudo /usr/local/mysql/bin/mysql_secure_installation -
配置环境变量
将 MySQL 二进制路径加入全局PATH:echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile source /etc/profile
⚠️ 五、常见问题解决
| 问题 | 解决方案 |
|---|---|
| CMake 配置失败 | 删除 build/CMakeCache.txt 后重试,检查依赖完整性(如 libtinfo-dev)。 |
| 初始化权限错误 | 确保 /usr/local/mysql 及子目录属主为 mysql:mysql。 |
| 临时密码丢失 | 删除数据目录并重新初始化:sudo rm -rf /usr/local/mysql/data。 |
| 服务启动失败 | 检查日志 /var/log/mysql/error.log,确认 my.cnf 中的路径配置正确。 |
| 内存不足导致编译中断 | 添加交换空间或减少编译线程数(如 make -j2)。 |
💎 总结建议
- 编译优势:源码安装适合需深度定制(如特定存储引擎、字符集优化)的场景,但耗时较长。
- 替代方案:若无定制需求,推荐使用 APT 仓库安装(快速安装最新 5.7.x):
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb # 选择 MySQL 5.7 sudo apt update sudo apt install mysql-server-5.7 - 验证安装:
mysql -V # 输出示例:mysql Ver 14.14 Distrib 5.7.44 systemctl status mysql
完成安装后,建议通过
mysql_secure_installation加固安全,并配置防火墙限制 3306 端口访问。
4️⃣ 参考 4
在 Debian 10 上编译安装 MySQL 5.7.44 需要手动下载源码、配置编译选项并完成安装。以下是详细的步骤:
1. 安装依赖
在编译 MySQL 之前,需要安装必要的依赖包:
sudo apt update
sudo apt install -y build-essential cmake libncurses5-dev libssl-dev libaio-dev libnuma-dev
2. 创建 MySQL 用户和组
为了安全,建议创建一个专用的 mysql 用户和组来运行 MySQL 服务:
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3. 下载 MySQL 5.7.44 源码
从 MySQL 官方下载源码包(需要注册 MySQL 账号):
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
如果无法直接下载,可以访问 MySQL 官网 手动下载。
4. 解压源码包
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
5. 创建编译目录
mkdir build
cd build
6. 配置编译选项
使用 cmake 配置编译选项。以下是一个常见的配置示例:
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/lib/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0
说明:
CMAKE_INSTALL_PREFIX:指定 MySQL 的安装目录。MYSQL_DATADIR:指定数据存储目录。SYSCONFDIR:指定配置文件my.cnf的位置。DEFAULT_CHARSET和DEFAULT_COLLATION:设置默认字符集为utf8mb4。- 如果需要其他功能(如调试支持),可以调整
-DWITH_DEBUG为1。
7. 编译和安装
make -j$(nproc) # 使用多线程编译以加快速度
sudo make install
8. 设置权限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /var/lib/mysql
9. 初始化 MySQL 数据库
sudo /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
说明:
--initialize-insecure:不生成随机密码。- 如果需要生成随机密码,可以使用
--initialize替代,并在/var/lib/mysql下的日志文件中查看密码。
10. 配置 MySQL 服务
10.1 创建 systemd 服务文件
创建 /etc/systemd/system/mysqld.service 文件,内容如下:
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
10.2 创建 my.cnf 配置文件
创建 /etc/my.cnf 文件,内容如下:
[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
port=3306
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve
11. 启动 MySQL 服务
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
12. 设置 root 密码
12.1 登录 MySQL
/usr/local/mysql/bin/mysql -u root
12.2 修改 root 密码 在 MySQL 命令行中执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
13. 验证安装
/usr/local/mysql/bin/mysql -u root -p
输入密码后,如果成功进入 MySQL 命令行,则表示安装完成。
14. 配置环境变量(可选)
将 MySQL 的 bin 目录添加到系统路径中:
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
15. 常见问题解决
1. 编译失败
- 错误示例:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND...- 解决方法:检查依赖是否安装完整(如
libncurses5-dev,libssl-dev等)。
- 解决方法:检查依赖是否安装完整(如
2. 权限问题
- 错误示例:
Can't start server: access denied for user 'mysql'...- 解决方法:确保
/var/lib/mysql的权限为mysql:mysql。
- 解决方法:确保
3. 启动失败
- 错误示例:
Failed at step EXEC_START spawning...- 解决方法:检查
mysqld.service文件中的路径是否正确。
- 解决方法:检查
16. 安全配置
运行 mysql_secure_installation 工具进一步加固 MySQL:
/usr/local/mysql/bin/mysql_secure_installation
17. 总结
通过以上步骤,您已成功在 Debian 10 上编译安装了 MySQL 5.7.44。如果需要进一步优化性能或配置高级功能(如主从复制、集群),可以参考 MySQL 官方文档或相关教程。
5️⃣ 参考 5
在Debian 10系统上编译安装MySQL 5.7.44,可按以下步骤操作:
1. 安装编译依赖
sudo apt update
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \
libmysqlclient-dev libreadline-dev libffi-dev libz-dev
2. 创建MySQL用户和数据目录
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
3. 下载并解压MySQL源码
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -xzf mysql-5.7.44.tar.gz
cd mysql-5.7.44
4. 配置编译选项
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DOWNLOADS=1
5. 编译和安装
make -j$(nproc) # 根据CPU核心数加速编译
sudo make install
6. 配置MySQL
sudo cp support-files/my-default.cnf /etc/my.cnf
sudo vi /etc/my.cnf # 根据需要调整配置参数
7. 初始化数据库
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意初始化后输出的临时密码,用于首次登录
8. 启动MySQL服务
sudo bin/mysqld_safe --user=mysql &
9. 设置开机自启
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults
10. 安全配置
sudo bin/mysql_secure_installation
验证安装
/usr/local/mysql/bin/mysql -u root -p
环境变量配置
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc
source ~/.bashrc
Debian 10编译安装MySQL 5.7.44脚本
#!/bin/bash
# Debian 10编译安装MySQL 5.7.44脚本
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# 错误处理函数
handle_error() {
echo -e "${RED}错误: $1${NC}"
exit 1
}
# 安装依赖
echo -e "${GREEN}正在安装编译依赖...${NC}"
sudo apt update || handle_error "更新APT源失败"
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \
libmysqlclient-dev libreadline-dev libffi-dev libz-dev \
libjemalloc-dev || handle_error "安装依赖包失败"
# 创建MySQL用户和组
echo -e "${GREEN}正在创建MySQL用户和组...${NC}"
sudo groupadd mysql || handle_error "创建mysql组失败"
sudo useradd -r -g mysql -s /bin/false mysql || handle_error "创建mysql用户失败"
# 创建安装目录
echo -e "${GREEN}正在创建安装目录...${NC}"
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql || handle_error "设置目录权限失败"
# 下载并解压源码
echo -e "${GREEN}正在下载和解压MySQL源码...${NC}"
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz || handle_error "下载源码失败"
tar -xzf mysql-5.7.44.tar.gz || handle_error "解压源码失败"
cd mysql-5.7.44 || handle_error "进入源码目录失败"
# 配置编译选项
echo -e "${GREEN}正在配置编译选项...${NC}"
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_JEMALLOC=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system || handle_error "CMake配置失败"
# 编译和安装
echo -e "${GREEN}正在编译MySQL,这可能需要一段时间...${NC}"
make -j$(nproc) || handle_error "编译失败"
echo -e "${GREEN}正在安装MySQL...${NC}"
sudo make install || handle_error "安装失败"
# 配置MySQL
echo -e "${GREEN}正在配置MySQL...${NC}"
sudo cp support-files/my-default.cnf /etc/my.cnf
# 添加基础配置
sudo tee -a /etc/my.cnf > /dev/null <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/mysql.pid
log-error = /usr/local/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 500
innodb_buffer_pool_size = 1G
EOF
# 初始化数据库
echo -e "${GREEN}正在初始化MySQL数据库...${NC}"
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data || handle_error "数据库初始化失败"
# 获取临时密码
TEMP_PASSWORD=$(grep 'temporary password' /usr/local/mysql/error.log | awk '{print $NF}')
echo -e "${YELLOW}临时密码: $TEMP_PASSWORD${NC}"
# 配置系统服务
echo -e "${GREEN}正在配置系统服务...${NC}"
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults || handle_error "设置开机自启失败"
# 启动MySQL
echo -e "${GREEN}正在启动MySQL服务...${NC}"
sudo systemctl start mysql || handle_error "启动MySQL服务失败"
# 添加到环境变量
echo -e "${GREEN}正在配置环境变量...${NC}"
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile || handle_error "更新环境变量失败"
# 安全配置
echo -e "${GREEN}请手动进行安全配置,设置新密码等...${NC}"
echo -e "${YELLOW}执行: mysql_secure_installation${NC}"
echo -e "${GREEN}MySQL 5.7.44编译安装完成!${NC}"
echo -e "${YELLOW}使用命令 'mysql -u root -p' 登录MySQL${NC}"
如果编译过程中遇到依赖问题,可以通过apt search命令查找对应的库包并安装。编译完成后,建议进行性能测试和安全加固。