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> 1. 编译.安装</font>
make -j$(nproc) # 使用所有CPU核心
sudo make install
<font size=4 color=#00cc00> 2. 设置环境变量</font>
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile### 五. 创建配置 mysqld 服务
<font size=4 color=#00cc00> 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> 2. 初始化数据库</font>
<font size=3 color=#cc00cc> 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> 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> 4. 创建启动服务</font><font size=2 color=#cccc00> 创建 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> 启动启用服务</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-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 安全部署的基本要求。
在 Linux 系统中用于创建一个专门用于运行 MySQL 服务的系统用户,其主要作用和设计原理如下:
命令分解及作用
参数 | 作用说明 |
---|---|
useradd | Linux 创建用户的命令 |
-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 5.7+ 强制要求使用非 root 用户运行
- 避免 CVE-2012-2122 等提权漏洞风险
-
权限最小化
# 查看 mysql 用户权限 $ sudo -u mysql id uid=997(mysql) gid=998(mysql) groups=998(mysql)
- 无 home 目录、无登录 shell、无 sudo 权限
-
系统兼容性
- 适用于所有 Linux 发行版
- 与 MySQL 官方安装包行为一致
重要注意事项
-
必须在安装 MySQL 前创建
否则数据目录权限可能不正确 -
组应先于用户创建
正确顺序:sudo groupadd -r mysql # 先创建组 sudo useradd -r -g mysql -s /bin/false mysql # 再创建用户
-
目录权限修复
若安装后权限错误:sudo chown -R mysql:mysql /var/lib/mysql sudo chmod 750 /var/lib/mysql
-
不要修改此用户
禁止解锁或更改 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 mysql
或 sudo 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
的特殊作用:- 任何登录尝试(SSH、su 等)都会立即失败
- 无任何输出信息,避免暴露系统用户存在
- 返回状态码 1(失败),阻止会话建立
-
系统影响:
- 在
/etc/passwd
中添加条目:
mysql:x:UID:GID::/home/mysql:/bin/false
- UID 为系统分配的小于 1000 的值(通常 999 或 110-120 范围)
- 不会创建
/home/mysql
目录
- 在
为什么需要专用用户?
-
最小权限原则:
- MySQL 服务不需要 root 权限运行
- 被入侵时限制攻击者权限范围
-
文件所有权控制:
sudo chown -R mysql:mysql /usr/local/mysql/data sudo chmod 750 /usr/local/mysql/data
-
进程隔离:
- MySQL 进程以 mysql 用户身份运行
- 通过
ps -ef | grep mysqld
可验证:mysql 12345 0.0 2.1 1280000 42000 ? Ssl 10:00 0:02 /usr/sbin/mysqld
安全增强建议
-
验证用户属性:
# 检查用户配置 grep mysql /etc/passwd # 期望输出:mysql:x:110:110::/home/mysql:/bin/false# 检查组配置 grep mysql /etc/group # 期望输出:mysql:x:110:
-
禁止家目录创建(即使未使用
-m
参数):sudo usermod -d /nonexistent mysql
-
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,但它们在行为上有细微但重要的区别:
useradd -r -g mysql -s /bin/false mysql
- 行为:当用户尝试登录时,立即以非零状态退出(静默失败)
- 特点:
- 不显示任何消息
- 立即终止登录尝试
- 返回退出代码 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) |
安全性 | 更高(不泄露账户存在信息) | 稍低(揭示账户存在) |
推荐用于服务账户 | ✅ 强烈推荐 | ⚠️ 可用但不理想 |
最佳实践建议:
-
对于 MySQL 等数据库服务:
sudo useradd -r -g mysql -s /bin/false mysql
- 这是更安全的选择
- 防止潜在攻击者探测服务账户
- 符合最小信息泄露原则
-
何时使用 nologin:
- 当需要向可能尝试登录的用户显示信息时
- 临时禁用普通用户账户
- FTP 等需要显示自定义消息的场景
-
验证用户配置:
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 官方文档和配置保持一致
为什么需要这样创建用户?
安全最佳实践
-
权限隔离:
- MySQL 以非 root 用户运行
- 数据库被入侵时,系统不会被完全控制
-
文件所有权:
sudo chown -R mysql:mysql /usr/local/mysql sudo chown -R mysql:mysql /var/lib/mysql
- 确保数据库文件只能被 MySQL 服务访问
-
进程隔离:
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=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. 不存在则下载 |
新增优化参数详解
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)
Formats | Description | Default | Introduced | Removed |
---|---|---|---|---|
BUILD_CONFIG | Use same build options as official releases | |||
CMAKE_BUILD_TYPE | Type of build to produce | RelWithDebInfo | ||
CMAKE_CXX_FLAGS | Flags for C++ Compiler | |||
CMAKE_C_FLAGS | Flags for C Compiler | |||
CMAKE_INSTALL_PREFIX | Installation base directory | /usr/local/mysql | ||
COMPILATION_COMMENT | Comment about compilation environment | |||
CPACK_MONOLITHIC_INSTALL | Whether package build produces single file | OFF | ||
DEFAULT_CHARSET | The default server character set | latin1 | ||
DEFAULT_COLLATION | The default server collation | latin1_swedish_ci | ||
DISABLE_PSI_COND | Exclude Performance Schema condition instrumentation | OFF | ||
DISABLE_PSI_FILE | Exclude Performance Schema file instrumentation | OFF | ||
DISABLE_PSI_IDLE | Exclude Performance Schema idle instrumentation | OFF | ||
DISABLE_PSI_MEMORY | Exclude Performance Schema memory instrumentation | OFF | ||
DISABLE_PSI_METADATA | Exclude Performance Schema metadata instrumentation | OFF | ||
DISABLE_PSI_MUTEX | Exclude Performance Schema mutex instrumentation | OFF | ||
DISABLE_PSI_PS | Exclude the performance schema prepared statements | OFF | ||
DISABLE_PSI_RWLOCK | Exclude Performance Schema rwlock instrumentation | OFF | ||
DISABLE_PSI_SOCKET | Exclude Performance Schema socket instrumentation | OFF | ||
DISABLE_PSI_SP | Exclude Performance Schema stored program instrumentation | OFF | ||
DISABLE_PSI_STAGE | Exclude Performance Schema stage instrumentation | OFF | ||
DISABLE_PSI_STATEMENT | Exclude Performance Schema statement instrumentation | OFF | ||
DISABLE_PSI_STATEMENT_DIGEST | Exclude Performance Schema statements_digest instrumentation | OFF | ||
DISABLE_PSI_TABLE | Exclude Performance Schema table instrumentation | OFF | ||
DISABLE_PSI_THREAD | Exclude the performance schema thread instrumentation | OFF | ||
DISABLE_PSI_TRANSACTION | Exclude the performance schema transaction instrumentation | OFF | ||
DOWNLOAD_BOOST | Whether to download the Boost library | OFF | ||
DOWNLOAD_BOOST_TIMEOUT | Timeout in seconds for downloading the Boost library | 600 | ||
ENABLED_LOCAL_INFILE | Whether to enable LOCAL for LOAD DATA | OFF | ||
ENABLED_PROFILING | Whether to enable query profiling code | ON | ||
ENABLE_DOWNLOADS | Whether to download optional files | OFF | ||
ENABLE_DTRACE | Whether to include DTrace support | |||
ENABLE_GCOV | Whether to include gcov support | |||
ENABLE_GPROF | Enable gprof (optimized Linux builds only) | OFF | ||
FORCE_UNSUPPORTED_COMPILER | Whether to permit unsupported compilers | OFF | ||
IGNORE_AIO_CHECK | With -DBUILD_CONFIG=mysql_release, ignore libaio check | OFF | ||
INSTALL_BINDIR | User executables directory | PREFIX/bin | ||
INSTALL_DOCDIR | Documentation directory | PREFIX/docs | ||
INSTALL_DOCREADMEDIR | README file directory | PREFIX | ||
INSTALL_INCLUDEDIR | Header file directory | PREFIX/include | ||
INSTALL_INFODIR | Info file directory | PREFIX/docs | ||
INSTALL_LAYOUT | Select predefined installation layout | STANDALONE | ||
INSTALL_LIBDIR | Library file directory | PREFIX/lib | ||
INSTALL_MANDIR | Manual page directory | PREFIX/man | ||
INSTALL_MYSQLKEYRINGDIR | Directory for keyring_file plugin data file | platform specific | 5.7.11 | |
INSTALL_MYSQLSHAREDIR | Shared data directory | PREFIX/share | ||
INSTALL_MYSQLTESTDIR | mysql-test directory | PREFIX/mysql-test | ||
INSTALL_PKGCONFIGDIR | Directory for mysqlclient.pc pkg-config file | INSTALL_LIBDIR/pkgconfig | ||
INSTALL_PLUGINDIR | Plugin directory | PREFIX/lib/plugin | ||
INSTALL_SBINDIR | Server executable directory | PREFIX/bin | ||
INSTALL_SCRIPTDIR | Scripts directory | PREFIX/scripts | ||
INSTALL_SECURE_FILE_PRIVDIR | secure_file_priv default value | platform specific | ||
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR | secure_file_priv default value for libmysqld | |||
INSTALL_SHAREDIR | aclocal/mysql.m4 installation directory | PREFIX/share | ||
INSTALL_SUPPORTFILESDIR | Extra support files directory | PREFIX/support-files | ||
MAX_INDEXES | Maximum indexes per table | 64 | ||
MEMCACHED_HOME | Path to memcached; obsolete | [none] | 5.7.33 | |
MUTEX_TYPE | InnoDB mutex type | event | ||
MYSQLX_TCP_PORT | TCP/IP port number used by X Plugin | 33060 | 5.7.17 | |
MYSQLX_UNIX_ADDR | Unix socket file used by X Plugin | /tmp/mysqlx.sock | 5.7.15 | |
MYSQL_DATADIR | Data directory | |||
MYSQL_MAINTAINER_MODE | Whether to enable MySQL maintainer-specific development environment | OFF | ||
MYSQL_PROJECT_NAME | Windows/macOS project name | MySQL | ||
MYSQL_TCP_PORT | TCP/IP port number | 3306 | ||
MYSQL_UNIX_ADDR | Unix socket file | /tmp/mysql.sock | ||
ODBC_INCLUDES | ODBC includes directory | |||
ODBC_LIB_DIR | ODBC library directory | |||
OPTIMIZER_TRACE | Whether to support optimizer tracing | |||
REPRODUCIBLE_BUILD | Take extra care to create a build result independent of build location and time | 5.7.19 | ||
SUNPRO_CXX_LIBRARY | Client link library on Solaris 10+ | |||
SYSCONFDIR | Option file directory | |||
SYSTEMD_PID_DIR | Directory for PID file under systemd | /var/run/mysqld | ||
SYSTEMD_SERVICE_NAME | Name of MySQL service under systemd | mysqld | ||
TMPDIR | tmpdir default value | |||
WIN_DEBUG_NO_INLINE | Whether to disable function inlining | OFF | ||
WITHOUT_SERVER | Do not build the server; internal use only | OFF | ||
WITHOUT_xxx_STORAGE_ENGINE | Exclude storage engine xxx from build | |||
WITH_ASAN | Enable AddressSanitizer | OFF | ||
WITH_ASAN_SCOPE | Enable AddressSanitizer -fsanitize-address-use-after-scope Clang flag | OFF | 5.7.21 | |
WITH_AUTHENTICATION_LDAP | Whether to report error if LDAP authentication plugins cannot be built | OFF | 5.7.19 | |
WITH_AUTHENTICATION_PAM | Build PAM authentication plugin | OFF | ||
WITH_AWS_SDK | Location of Amazon Web Services software development kit | 5.7.19 | ||
WITH_BOOST | The location of the Boost library sources | |||
WITH_BUNDLED_LIBEVENT | Use bundled libevent when building ndbmemcache; obsolete | ON | 5.7.33 | |
WITH_BUNDLED_MEMCACHED | Use bundled memcached when building ndbmemcache; obsolete | ON | 5.7.33 | |
WITH_CLASSPATH | Classpath to use when building MySQL Cluster Connector for Java. Default is an empty string. |
| ||
WITH_CLIENT_PROTOCOL_TRACING | Build client-side protocol tracing framework | ON | ||
WITH_CURL | Location of curl library | 5.7.19 | ||
WITH_DEBUG | Whether to include debugging support | OFF | ||
WITH_DEFAULT_COMPILER_OPTIONS | Whether to use default compiler options | ON | ||
WITH_DEFAULT_FEATURE_SET | Whether to use default feature set | ON | ||
WITH_EDITLINE | Which libedit/editline library to use | bundled | ||
WITH_EMBEDDED_SERVER | Whether to build embedded server | OFF | ||
WITH_EMBEDDED_SHARED_LIBRARY | Whether to build a shared embedded server library | OFF | ||
WITH_ERROR_INSERT | Enable error injection in the NDB storage engine. Should not be used for building binaries intended for production. | OFF | ||
WITH_EXTRA_CHARSETS | Which extra character sets to include | all | ||
WITH_GMOCK | Path to googlemock distribution | |||
WITH_INNODB_EXTRA_DEBUG | Whether to include extra debugging support for InnoDB. | OFF | ||
WITH_INNODB_MEMCACHED | Whether to generate memcached shared libraries. | OFF | ||
WITH_KEYRING_TEST | Build the keyring test program | OFF | 5.7.11 | |
WITH_LDAP | Internal use only | 5.7.29 | ||
WITH_LIBEVENT | Which libevent library to use | bundled | ||
WITH_LIBWRAP | Whether to include libwrap (TCP wrappers) support | OFF | ||
WITH_LZ4 | Type of LZ4 library support | bundled | 5.7.14 | |
WITH_MECAB | Compiles MeCab | |||
WITH_MSAN | Enable MemorySanitizer | OFF | ||
WITH_MSCRT_DEBUG | Enable Visual Studio CRT memory leak tracing | OFF | ||
WITH_NDBAPI_EXAMPLES | Build API example programs. | OFF | ||
WITH_NDBCLUSTER | NDB 8.0.30 and earlier: Build NDB storage engine. NDB 8.0.31 and later: Deprecated; use WITH_NDB instead | ON | ||
WITH_NDBCLUSTER_STORAGE_ENGINE | Prior to NDB 8.0.31, this was for internal use only. NDB 8.0.31 and later: toggles (only) inclusion of NDBCLUSTER storage engine | ON | ||
WITH_NDBMTD | Build multithreaded data node binary | ON | ||
WITH_NDB_BINLOG | Enable binary logging by default by mysqld. | ON | ||
WITH_NDB_DEBUG | Produce a debug build for testing or troubleshooting. | OFF | ||
WITH_NDB_JAVA | Enable building of Java and ClusterJ support. Enabled by default. Supported in MySQL Cluster only. | ON | ||
WITH_NDB_PORT | Default 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_TEST | Include NDB API test programs. | OFF | ||
WITH_NUMA | Set NUMA memory allocation policy | 5.7.17 | ||
WITH_PROTOBUF | Which Protocol Buffers package to use | bundled | 5.7.12 | |
WITH_RAPID | Whether to build rapid development cycle plugins | ON | 5.7.12 | |
WITH_SASL | Internal use only | 5.7.29 | ||
WITH_SSL | Type of SSL support | system | ||
WITH_SYSTEMD | Enable installation of systemd support files | OFF | ||
WITH_TEST_TRACE_PLUGIN | Build test protocol trace plugin | OFF | ||
WITH_UBSAN | Enable Undefined Behavior Sanitizer | OFF | ||
WITH_UNIT_TESTS | Compile MySQL with unit tests | ON | ||
WITH_UNIXODBC | Enable unixODBC support | OFF | ||
WITH_VALGRIND | Whether to compile in Valgrind header files | OFF | ||
WITH_ZLIB | Type of zlib support | bundled | ||
WITH_xxx_STORAGE_ENGINE | Compile 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 系统中服务管理的两种不同机制的核心目录,分别对应 systemd 和 SysVinit 初始化系统。以下是详细对比:
1. 所属初始化系统
目录 | 初始化系统 | 出现时间 | 现代发行版支持 |
---|---|---|---|
/etc/init.d | SysVinit | 传统系统(1980s) | 逐步淘汰(兼容模式保留) |
/etc/systemd/system | systemd | 2010年后 | 主流默认(如 Ubuntu 16.04+、CentOS 7+) |
2. 文件类型与结构
目录 | 文件类型 | 文件示例 | 配置结构 |
---|---|---|---|
/etc/init.d | Shell 脚本 | 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 start | systemctl start nginx |
停止服务 | /etc/init.d/nginx stop | systemctl stop nginx |
状态查看 | /etc/init.d/nginx status | systemctl 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.d | syslog(分散) | grep nginx /var/log/syslog |
/etc/systemd/system | journald(集中) | 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
安全注意事项
- 生产环境不要使用
--initialize-insecure
- 初始化后立即修改 root 密码
- 定期备份数据和配置文件
- 启用防火墙限制访问:
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
常见问题解决
-
编译失败:
- 检查依赖是否完整:
sudo apt install libboost-dev
- 清除构建缓存:
rm CMakeCache.txt && make clean
- 检查依赖是否完整:
-
启动失败:
- 检查错误日志:
sudo tail -f /usr/local/mysql/data/*.err
- 确认端口未被占用:
sudo lsof -i :3306
- 检查错误日志:
-
连接问题:
- 检查socket路径:
/tmp/mysql.sock
- 配置文件位置:
/etc/my.cnf
- 检查socket路径:
重要提示:编译安装适合特定定制需求,常规使用建议通过官方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
- 步骤说明:
- 输入临时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,并进行基础配置和安全加固。
在 Debian 10 系统上编译安装 MySQL 5.7.44,可按照以下步骤进行,此方法能灵活定制参数,但需处理依赖和编译配置:
一、准备工作
-
更新系统包
sudo apt update && sudo apt upgrade -y
-
安装编译依赖
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支持)等为编译必需依赖。
- 说明:
-
卸载冲突的 MariaDB(如存在)
sudo apt purge mariadb-* -y sudo rm -rf /var/lib/mysql/
二、下载源码
-
获取 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 手动下载。
-
选择 Boost 库版本(可选)
- 自带 Boost 的版本:直接下载
mysql-boost-5.7.44.tar.gz
,解压后无需额外处理 Boost。 - 手动指定 Boost:下载 Boost 1.59.0,解压至
/usr/local/boost_1_59_0
。
- 自带 Boost 的版本:直接下载
三、编译配置
-
创建构建目录并配置参数
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 字符集(包括表情符号)。
- 关键参数说明:
-
解决常见配置错误
- 错误示例:
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
。
- 错误示例:
四、编译与安装
-
使用多核编译加速
make -j$(nproc) # 根据 CPU 核心数自动调整线程数 sudo make install
-
验证安装文件
ls /usr/local/mysql/bin/ # 应包含 mysqld、mysql 等可执行文件
五、初始化与配置
-
创建 MySQL 用户和组
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
初始化数据库
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
)。
- 记录临时密码:初始化输出中会显示临时 root 密码(如
-
配置 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
- 示例配置:
六、启动与验证
-
启动 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
- 推荐方案:配置 systemd 服务(更可靠):
-
修改 root 密码
/usr/local/mysql/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;
-
测试连接
/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 | +-------------------------+---------------------+
- 预期输出:
七、常见问题解决
-
权限错误
- 现象:
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
- 现象:
-
临时密码丢失
- 解决方案:删除数据目录并重新初始化:
sudo rm -rf /usr/local/mysql/data sudo bin/mysqld --initialize --user=mysql
- 解决方案:删除数据目录并重新初始化:
-
依赖缺失
- 现象:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND
- 解决方案:根据错误提示安装对应依赖(如
libgmp-dev
、flex
等)。
- 现象:
在 Debian 10 系统上编译安装 MySQL 5.7.44,可按照以下步骤进行,该过程涉及依赖安装、源码下载、编译配置、初始化及服务配置等环节:
一、安装依赖库
-
更新系统包索引:
sudo apt update sudo apt upgrade -y
-
安装编译工具和依赖库:
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 源码
-
访问 MySQL 官方下载页面:
MySQL 官方下载页面 -
下载 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
三、编译与安装
-
创建构建目录并进入:
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=../boost/boost_1_59_0 # 如果源码包自带 boost 则无需指定
注意:
- 如果使用无 boost 版本的源码包,需要添加
-DDOWNLOAD_BOOST=1
参数,让 CMake 自动下载 boost 1.59.0 版本。 - 确保
/usr/local/mysql
及子目录的属主为mysql:mysql
(后续步骤会创建该用户和组)。
- 如果使用无 boost 版本的源码包,需要添加
-
编译并安装:
make -j$(nproc) # 使用多核编译,根据 CPU 核心数调整 sudo make install # 安装到指定目录
四、初始化与配置
-
创建 MySQL 用户和组:
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
初始化数据库:
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
- 初始化完成后,记录输出的临时 root 密码(类似
-
配置 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
五、启动与使用
-
启动 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
-
修改 root 密码:
/usr/local/mysql/bin/mysql -u root -p # 输入初始化时的临时密码
在 MySQL 命令行中执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;
-
设置环境变量:
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc source ~/.bashrc
六、常见问题解决
-
编译失败:
- 检查依赖是否完整,重新执行
cmake
前清理缓存:make clean rm -f CMakeCache.txt
- 确保
/usr/local/mysql
及子目录的属主为mysql:mysql
:sudo chown -R mysql:mysql /usr/local/mysql
- 检查依赖是否完整,重新执行
-
临时密码丢失:
- 删除数据目录并重新初始化(参考步骤四.2)。
-
权限问题:
- 确保 MySQL 数据目录(
/usr/local/mysql/data
)的属主为mysql:mysql
:sudo chown -R mysql:mysql /usr/local/mysql/data
- 确保 MySQL 数据目录(
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
注意:若官网链接失效,需从 https://downloads.mysql.com/archives/community/ 手动下载。
⚙️ 二、编译配置与安装
-
配置编译参数
在源码目录创建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 -p
ALTER 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 端口访问。
以下是根据多个可靠来源整理的 Debian 10 编译安装 MySQL 5.7.44 的完整指南,涵盖依赖管理、编译配置、服务部署等全流程关键步骤。此方法适用于需要高度定制化或严格版本控制的场景。
🔧 一、准备工作:系统环境与依赖
-
更新系统并安装编译工具
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
-
创建专用用户与目录
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
-
下载源码与 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
⚙️ 二、编译配置与安装
-
进入编译目录并生成 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
后重试。 -
编译并安装
make -j$(nproc) # 使用多核加速编译 sudo make install
编译时间较长(约 30-60 分钟),取决于硬件性能。
⚡ 三、初始化与启动服务
-
初始化数据目录
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!
)。 -
配置 systemd 服务
sudo cp ../support-files/mysql.server /etc/init.d/mysql sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql
-
设置环境变量(可选)
echo 'export PATH=/opt/software/mysql/mysql/bin:$PATH' | sudo tee -a /etc/profile source /etc/profile
🔐 四、安全配置与验证
-
修改 root 密码
使用临时密码登录并修改:mysql -u root -p # 输入临时密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;
-
运行安全脚本
sudo /opt/software/mysql/mysql/bin/mysql_secure_installation
按提示移除匿名用户、禁止远程 root 登录等。
-
验证安装
mysql -V # 输出:mysql Ver 14.14 Distrib 5.7.44 systemctl status mysql # 确认服务状态为 active (running)
⚠️ 关键问题与注意事项
-
Boost 版本严格匹配
MySQL 5.7.44 必须使用 Boost 1.59.0,否则编译失败。源码包mysql-boost-5.7.44.tar.gz
已包含正确版本。 -
依赖缺失处理
- 若报错
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"
- 若报错
-
服务管理
- 自定义配置文件路径:
/etc/my.cnf
(需手动创建) - 日志定位:
/opt/software/mysql/data/*.err
- 自定义配置文件路径:
-
安全建议
- 生产环境需限制防火墙访问:
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_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 官方文档或相关教程。
在 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
。
常见问题
- 编译错误:检查依赖是否完整安装。
- 启动失败:检查日志文件
/usr/local/mysql/data/hostname.err
。 - 权限问题:确保
/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
常见问题解决
-
CMake 错误:
- 检查缺失依赖:
sudo apt install libtinfo5
- 清除缓存:
rm CMakeCache.txt
- 检查缺失依赖:
-
内存不足:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4 sudo mkswap /swapfile && sudo swapon /swapfile
-
服务启动失败:
sudo journalctl -u mysqld -f # 查看实时日志
重要提示:编译过程约需 1-2 小时(取决于硬件),建议在稳定环境中操作。
相关问题
- MySQL 5.7 与 Debian 10 的兼容性问题有哪些?
- 如何优化 MySQL 5.7 的编译参数提升性能?
- 源码安装的 MySQL 如何升级到新版本?
- 编译安装和包管理器安装的 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
六、配置系统服务
- 创建 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
- 启动并启用服务:
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
七、配置 MySQL
- 编辑配置文件(
/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
- 登录 MySQL 设置密码:
sudo /usr/local/mysql/bin/mysql_secure_installation
八、验证安装
# 检查服务状态
systemctl status mysqld# 登录 MySQL 查看版本
/usr/local/mysql/bin/mysql -u root -p
SELECT VERSION();
注意事项
- 依赖问题:若编译失败,请检查是否安装所有依赖库。
- 路径问题:确保
basedir
和datadir
路径权限正确。 - 初始化密码:初始化时会生成临时 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;