Debian-10編譯安裝Mysql-5.7.44 筆記250706

Debian-10編譯安裝Mysql-5.7.44 筆記250706

單一腳本安裝


### 1. 安裝編譯依賴
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz### 2. 創建 MySQL 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql###    3. 下載編譯包,解壓并配置編譯參數
mkdir -pm 777 ~/InstallSetup/mysql && cd $_
if [ ! -e mysql-boost-5.7.44.tar.gz ] ;thensudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
fi
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_JEMALLOC=system \-DWITH_LTO=ON \-DWITH_DEBUG=0 \-DENABLED_LOCAL_INFILE=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQLX_TCP_PORT=33060 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \-DSYSTEMD_PID_DIR=/var/run/mysqld \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \-DFORCE_INSOURCE_BUILD=1 \-DENABLE_DOWNLOADS=1   -DWITH_BOOST=../boost/boost_1_59_0  # 用于自帶boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以### 4. 編譯, 安裝, 設置環境變量
<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1. 編譯.安裝</font>
make -j$(nproc)       # 使用所有CPU核心
sudo make install
<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2. 設置環境變量</font>
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile###   五. 創建配置 mysqld 服務
<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 創建目錄設置目錄權限</font>
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 初始化數據庫</font>
<font size=3 color=#cc00cc>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;    root無密碼初始化</font>
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data<font size=4 color=#00cc00>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 創建配置文件</font>sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock        ### 默認: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid[client]
socket = /var/run/mysqld/mysqld.sock        ### 默認: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE<font size=3 color=#cc00cc>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;   4. 創建啟動服務</font><font size=2 color=#cccc00>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;&nbsp;  創建 systemd 服務</font>sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.targetEOFxxxXXXeof---foeXXXxxxFOE<font size=2 color=#cccc00>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;&nbsp;  啟動啟用服務</font>
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now

















分步安裝

1. 安裝編譯依賴

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




2. 創建 MySQL 用戶和組

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

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




3. 下載編譯包,解壓并配置編譯參數

MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。源碼包 mysql-boost-5.7.44.tar.gz 已包含正確版本。
???????? 下載編譯自帶 Boost庫 的版本

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

???????? 下載編譯不帶 Boost庫 的版本

MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。

boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包

下載編譯不帶 Boost庫 的版本

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

也可以手動安裝 boost 庫(可選)
boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包
boost_1_59_0.tar.gz 80多兆 , mysql-boost-5.7.44 50多兆

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




4. 編譯, 安裝, 設置環境變量

???????? 1. make編譯

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

???????? 2. make安裝

sudo make install

???????? 3. 設置環境變量

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




創建配置 mysqld 服務

???????? 1. 創建目錄設置目錄權限

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

???????? 2. 初始化數據庫
???? ???? ???? root無密碼初始化

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

???? ???? ???? root隨機密碼初始化

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

???????? 3. 創建配置文件

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

???? ???? ???? 4. 創建啟動服務

???? ???? ???? ???? 創建啟動服務方式1: 創建 systemd 服務


創建 systemd 服務

sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.targetEOFxxxXXXeof---foeXXXxxxFOE

啟動啟用服務

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

移除服務

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

???? ???? ???? ???? 創建啟動服務方式2: 用 SysV init 啟動腳本方式創建服務

/usr/local/mysql/support-files/mysql.server 是現成的 SysV init 啟動腳本

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

啟動

sudo /etc/init.d/mysqld start

設置開機自啟

sudo update-rc.d mysqld defaults

Debian10已支持用 systemctl 啟動啟用 /etc/init.d 的 服務

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

















詳解分步安裝

1. 安裝編譯依賴

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

以下是對您列出的 Debian 10 編譯依賴包的詳細講解和建議優化方案。這些依賴主要用于編譯 MySQL 5.7.44 等大型 C/C++ 項目:


???? ???? ???? 依賴包分類說明

???? ???? ???? ???? 1. 核心編譯工具

包名作用說明必要性
cmake跨平臺構建系統工具 (MySQL 使用 CMake 構建)★★★★★
gcc g++GNU C/C++ 編譯器★★★★★
build-essential包含 make, gcc, libc-dev 等基礎編譯工具★★★★★
pkg-config幫助查找庫路徑和編譯標志的工具★★★★☆

???? ???? ???? ???? 2. MySQL 必需依賴

包名作用說明必要性
libncurses5-dev終端處理庫 (mysql 命令行依賴)★★★★★
libssl-devOpenSSL 開發庫 (加密連接支持)★★★★★
libreadline-dev命令行編輯功能支持★★★★☆
zlib1g-dev數據壓縮庫 (日志壓縮等)★★★★☆
bison語法分析器生成器 (SQL 解析器依賴)★★★★★
libaio-dev異步 I/O 支持 (提升 InnoDB 性能)★★★★☆
libnuma-devNUMA 架構支持 (多 CPU 系統優化)★★★☆☆
libboost-all-devBoost C++ 庫全集 (MySQL 測試框架依賴)★★★★☆

???? ???? ???? ???? 3. 優化增強依賴

包名作用說明必要性
libjemalloc-dev高性能內存分配器 (替代 glibc malloc)★★★☆☆
libtbb-devIntel 線程構建塊庫 (并行計算優化)★★☆☆☆

???? ???? ???? ???? 4. 調試診斷工具

包名作用說明必要性
gdbGNU 調試器★★★☆☆
strace系統調用跟蹤工具★★☆☆☆
ltrace庫函數調用跟蹤工具★★☆☆☆

???? ???? ???? ???? 5. 文檔生成工具

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

???? ???? ???? ???? 6. 腳本支持

包名作用說明必要性
libjson-perlPerl JSON 模塊 (測試腳本依賴)★★★☆☆
curl wget網絡下載工具★★★★☆

???? ???? ???? 優化建議方案

???? ???? ???? ???? 方案 1:精簡安裝 (最小化依賴)

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

適用場景:僅需基礎編譯功能,節省磁盤空間
節省空間:約 500MB

???? ???? ???? ???? 方案 2:推薦安裝 (平衡方案)

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

優勢

  • 包含性能優化組件 (jemalloc)
  • 包含調試工具 (gdb)
  • 保留 NUMA 支持
  • 比完整安裝節省 300MB+ 空間

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

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

注意

  • 總大小約 1.2-1.5GB
  • 包含所有調試和文檔工具
  • 適合深度開發和性能調優場景

???? ???? ???? 關鍵組件說明

  1. Boost 庫處理
    MySQL 5.7 需要 Boost 1.59+,Debian 10 默認提供 1.67.0:

    dpkg -s libboost-dev | grep Version  # 驗證版本
    

    若編譯報錯 Could NOT find Boost,需顯式指定路徑:

    cmake ... -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/boost
    
  2. 內存分配器選擇

    • jemalloc:減少內存碎片,適合長期運行服務
    • tcmalloc:(未包含) Google 高性能分配器
      在 my.cnf 中啟用:
    [mysqld]
    malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
    
  3. systemd 集成
    libsystemd-dev 用于生成 systemd 服務文件,編譯時添加:

    cmake ... -DWITH_SYSTEMD=1
    

    生成服務文件:

    cmake --install . --component systemd
    

???? ???? ???? 安裝后驗證

### 檢查關鍵工具
cmake --version | grep -E "3.[0-9]+"
gcc --version | grep "8\."  # Debian10 應為 gcc 8.x
bison --version | grep "3.[0-9]+"### 檢查庫文件
ls -l /usr/lib/x86_64-linux-gnu/{libssl.so,libncurses.so,libaio.so}

???? ???? ???? 清理建議 (編譯完成后)

### 移除開發包節省空間 (約 800MB)
sudo apt purge \
'lib*-dev' \
cmake \
doxygen graphviz \
gdb strace ltrace### 保留運行時依賴
sudo apt-mark manual \
libncurses6 libssl1.1 libreadline7 zlib1g libaio1 \
libnuma1 libjemalloc2 libtbb2

???? ???? ???? 總結建議

  1. 生產環境編譯:使用方案 2,包含性能優化組件
  2. 開發調試環境:使用方案 3,保留診斷工具
  3. 磁盤空間緊張:使用方案 1,后續按需添加
  4. 關鍵組件:務必確保 cmake, gcc, bison, libssl-dev 正確安裝
  5. Boost 處理:Debian 10 自帶版本可用,無需額外下載






2. 創建 MySQL 用戶和組

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

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

這兩條命令用于為 MySQL 創建專用的系統用戶和組,是 MySQL 安裝前的重要安全準備步驟。

這兩個命令都用于為 MySQL 服務創建專用的系統用戶,核心目標相同但拒絕登錄的實現方式不同:

???????? 命令對比解析

參數/特性useradd -r -g mysql -s /bin/false mysqluseradd -r -g mysql -s /bin/nologin mysql
創建用戶類型系統用戶 (-r)系統用戶 (-r)
所屬用戶組加入 mysql 組 (-g mysql)加入 mysql 組 (-g mysql)
Shell 類型/bin/false/bin/nologin
登錄行為靜默拒絕,無任何輸出顯示提示信息后拒絕
退出狀態碼返回非零狀態碼 (失敗)返回非零狀態碼 (失敗)
安全等級????☆ (高)????☆ (高)
適用發行版所有 Linux 通用所有 Linux 通用

???????? /bin/false 詳解
行為特點

  1. 當用戶嘗試登錄時立即終止會話
  2. 無任何輸出(靜默拒絕)
  3. 返回錯誤狀態碼 1

驗證示例

$ sudo -u mysql /bin/bash
## 無錯誤提示,直接返回命令行
$ echo $?
1

適用場景

  • 需要完全靜默拒絕登錄的環境
  • 安全審計要求不產生任何登錄痕跡
  • 防止攻擊者探測到有效用戶名

???????? /bin/nologin 詳解
行為特點

  1. 當用戶嘗試登錄時顯示預設信息
  2. 輸出提示This account is currently not available.
  3. 返回錯誤狀態碼 1
  4. 提示信息可通過 /etc/nologin.txt 自定義

驗證示例

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

自定義提示信息

## 創建自定義拒絕消息
echo "MySQL service account - Login prohibited" | sudo tee /etc/nologin.txt

適用場景

  • 需要明確提示賬戶用途的環境
  • 方便系統管理員理解賬戶性質
  • 符合某些安全合規的明確拒絕要求

???????? 核心共同作用

  1. 權限隔離
    MySQL 服務以該用戶身份運行,避免使用 root

  2. 文件所有權
    數據庫文件設置為 mysql:mysql 所有:

    drwxr-x--- 4 mysql mysql 4096 /var/lib/mysql
    
  3. 登錄防護
    雙重保障:

    • Shell 本身拒絕登錄
    • /etc/passwd 中標記為不可登錄:
      mysql:x:127:133:MySQL Server:/nonexistent:/bin/false
      
  4. 服務安全
    滿足 MySQL 的安全要求:

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

???????? 如何選擇?

場景推薦命令原因
生產服務器-s /bin/false靜默拒絕更安全
開發/測試環境-s /bin/nologin明確提示避免誤操作
安全合規要求明確拒絕消息-s /bin/nologin + 自定義 /etc/nologin.txt滿足審計要求
兼容老系統 (Solaris/AIX)-s /bin/false更廣泛兼容
Docker 容器環境-s /bin/false減少鏡像層大小

???????? 實踐建議

  1. 先創建組再創建用戶

    sudo groupadd -r mysql
    # 根據環境選擇其一
    sudo useradd -r -g mysql -s /bin/false mysql      # 生產推薦
    # 或
    sudo useradd -r -g mysql -s /bin/nologin mysql    # 開發推薦
    
  2. 驗證賬戶屬性

    $ grep mysql /etc/passwd
    # 正確輸出:
    mysql:x:998:997:MySQL Server:/nonexistent:/bin/false
    
  3. 修復已存在賬戶

    # 如果已創建但需要修改
    sudo usermod -s /bin/false mysql
    
  4. 數據目錄權限

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

📌 關鍵原則:無論選擇哪種方式,都比使用登錄 shell(如 /bin/bash)更安全,這是 MySQL 安全部署的基本要求。

在 Linux 系統中用于創建一個專門用于運行 MySQL 服務的系統用戶,其主要作用和設計原理如下:

???????? 命令分解及作用

參數作用說明
useraddLinux 創建用戶的命令
-r創建系統用戶(UID < 1000,不創建家目錄)
-g mysql指定用戶所屬的主用戶組mysql
-s /bin/false設置用戶的登錄 shell 為不可交互的無效 shell , 靜默拒絕,無任何輸出
-s /bin/nologin 設置用戶的登錄 shell 為不可交互的無效 shell , 顯示提示信息后拒絕
mysql要創建的用戶名

???????? 核心作用詳解

???? ???? ???? 1. 安全隔離(最小權限原則)

  • 創建專用用戶運行 MySQL 服務,避免使用 root 賬戶
  • MySQL 進程以 mysql 用戶權限運行,即使被入侵也受限于該用戶權限
  • 防止數據庫服務獲得 root 權限造成系統級破壞

???? ???? ???? 2. 文件權限控制

  • MySQL 數據文件(/var/lib/mysql)的所有者設置為 mysql:mysql
  • 確保只有 MySQL 服務本身能訪問數據庫文件:
    drwxr-x--- 4 mysql mysql 4096 Jul  6 10:00 /var/lib/mysql/
    

???? ???? ???? 3. 服務運行隔離

  • MySQL 啟動時自動切換到 mysql 用戶身份運行
  • 與其他系統服務(如 Apache/Nginx 的 www-data 用戶)權限分離
  • 防止服務間權限互相影響

???? ???? ???? 4. 禁止用戶登錄(安全加固)

  • /bin/false 作為登錄 shell 會立即終止任何登錄嘗試:
    $ sudo su - mysql
    This account is currently not available.
    
  • 無法通過 SSH、su 或控制臺登錄
  • 防止攻擊者利用該用戶作為跳板

???????? 工作流程示例

啟動MySQL服務
mysqld 進程
以哪個用戶身份運行?
mysql 用戶
訪問 /var/lib/mysql 數據目錄
綁定 3306 端口

???????? 為什么需要這樣創建?

  1. 安全必要性

    • MySQL 5.7+ 強制要求使用非 root 用戶運行
    • 避免 CVE-2012-2122 等提權漏洞風險
  2. 權限最小化

    # 查看 mysql 用戶權限
    $ sudo -u mysql id
    uid=997(mysql) gid=998(mysql) groups=998(mysql)
    
    • 無 home 目錄、無登錄 shell、無 sudo 權限
  3. 系統兼容性

    • 適用于所有 Linux 發行版
    • 與 MySQL 官方安裝包行為一致

???????? 重要注意事項

  1. 必須在安裝 MySQL 前創建
    否則數據目錄權限可能不正確

  2. 組應先于用戶創建
    正確順序:

    sudo groupadd -r mysql    # 先創建組
    sudo useradd -r -g mysql -s /bin/false mysql  # 再創建用戶
    
  3. 目錄權限修復
    若安裝后權限錯誤:

    sudo chown -R mysql:mysql /var/lib/mysql
    sudo chmod 750 /var/lib/mysql
    
  4. 不要修改此用戶
    禁止解鎖或更改 shell,否則會引入安全風險

這種用戶創建方式是 Linux 服務部署的安全最佳實踐,不僅適用于 MySQL,也適用于 PostgreSQL、Redis 等其他需要權限隔離的服務。

???? ???? ???? 1. sudo groupadd mysql

  • 作用:創建名為 mysql 的系統組
  • 參數詳解
    • 無額外參數:直接創建指定名稱的用戶組
  • 必要性
    • 所有 MySQL 相關進程將以該組身份運行
    • 統一管理 MySQL 文件權限(數據文件、配置文件、日志等)
  • 系統影響
    • /etc/group 文件中添加條目:
      mysql:x:GID:(GID 為系統自動分配的組ID)

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

  • 作用:創建系統用戶 mysql 并加入 mysql 組,禁止登錄

  • 參數詳解

    參數說明安全意義
    -r創建系統賬戶(UID < 1000)區別于普通用戶賬戶,不創建家目錄
    -g mysql指定主組為 mysql確保文件權限一致性
    -s /bin/false設置登錄 shell 為偽終端 , 靜默拒絕登錄關鍵安全配置
    -s /bin/nologin設置登錄 shell 為偽終端, 明確拒絕登錄關鍵安全配置
    mysql用戶名行業標準命名
  • /bin/false 的特殊作用

    /bin/bash
    /bin/false
    /sbin/nologin
    登錄嘗試
    Shell類型
    允許登錄
    立即靜默退出
    顯示拒絕消息后退出
    • 任何登錄嘗試(SSH、su 等)都會立即失敗
    • 無任何輸出信息,避免暴露系統用戶存在
    • 返回狀態碼 1(失敗),阻止會話建立
  • 系統影響

    • /etc/passwd 中添加條目:
      mysql:x:UID:GID::/home/mysql:/bin/false
    • UID 為系統分配的小于 1000 的值(通常 999 或 110-120 范圍)
    • 不會創建 /home/mysql 目錄

???? ???? ???? 為什么需要專用用戶?

  1. 最小權限原則

    • MySQL 服務不需要 root 權限運行
    • 被入侵時限制攻擊者權限范圍
  2. 文件所有權控制

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

    • MySQL 進程以 mysql 用戶身份運行
    • 通過 ps -ef | grep mysqld 可驗證:
      mysql    12345  0.0  2.1 1280000 42000 ?      Ssl  10:00   0:02 /usr/sbin/mysqld
      

???? ???? ???? 安全增強建議

  1. 驗證用戶屬性

    # 檢查用戶配置
    grep mysql /etc/passwd
    # 期望輸出:mysql:x:110:110::/home/mysql:/bin/false# 檢查組配置
    grep mysql /etc/group
    # 期望輸出:mysql:x:110:
    
  2. 禁止家目錄創建(即使未使用 -m 參數):

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

    # 為 MySQL 創建專用安全配置文件
    sudo semanage user -a -R "staff_r system_r" mysql_u
    sudo semanage login -a -s mysql_u mysql
    

???? ???? ???? 替代方案對比

命令優點缺點
useradd -r -g mysql -s /bin/false mysql完全靜默,無日志污染管理員無法獲知登錄嘗試
useradd -r -g mysql -s /sbin/nologin mysql有拒絕登錄提示可能產生無效系統日志
adduser --system --disabled-login --group mysql更簡潔的語法部分系統不可用

???? ???? ???? MySQL 安裝后的權限設置
安裝完成后需執行:

### 設置 MySQL 目錄所有權
sudo chown -R mysql:mysql /usr/local/mysql### 初始化數據目錄(使用 mysql 用戶)
sudo -u mysql /usr/local/mysql/bin/mysqld --initialize

重要安全提示:永遠不要將 MySQL 用戶 shell 改為 /bin/bash 或有效 shell,即使臨時使用。如需維護,應使用 sudo -u mysql /bin/sh -c "command" 代替。

這些步驟為 MySQL 創建了一個安全的運行環境,遵循了 Linux 服務賬戶管理的最佳實踐,是生產環境部署的必要前提。


???? ???? ???? /bin/false/bin/nologin 對比

在 Linux 中創建 MySQL 系統用戶時,/bin/false/bin/nologin 都是用于禁止用戶登錄的 shell,但它們在行為上有細微但重要的區別:

  1. useradd -r -g mysql -s /bin/false mysql
  • 行為:當用戶嘗試登錄時,立即以非零狀態退出(靜默失敗)
  • 特點
    • 不顯示任何消息
    • 立即終止登錄嘗試
    • 返回退出代碼 1(失敗)
  • 使用場景
    • 最嚴格的登錄限制
    • 服務賬戶的理想選擇
    • 推薦用于數據庫等關鍵服務
  1. useradd -r -g mysql -s /bin/nologin mysql
  • 行為:當用戶嘗試登錄時,顯示提示信息后退出
  • 特點
    • 顯示默認消息:“This account is currently not available.”
    • 可以通過創建 /etc/nologin.txt 自定義消息
    • 返回退出代碼 0("成功"拒絕登錄)
  • 使用場景
    • 需要向嘗試登錄者顯示提示信息
    • 臨時禁用賬戶時更合適
    • 某些系統管理場景

關鍵區別對比表:

特性/bin/false/bin/nologin
登錄嘗試響應靜默拒絕顯示拒絕消息
退出狀態碼1 (失敗)0 (成功拒絕)
自定義消息不支持支持(通過 /etc/nologin.txt)
安全性更高(不泄露賬戶存在信息)稍低(揭示賬戶存在)
推薦用于服務賬戶? 強烈推薦?? 可用但不理想

最佳實踐建議:

  1. 對于 MySQL 等數據庫服務

    sudo useradd -r -g mysql -s /bin/false mysql
    
    • 這是更安全的選擇
    • 防止潛在攻擊者探測服務賬戶
    • 符合最小信息泄露原則
  2. 何時使用 nologin

    • 當需要向可能嘗試登錄的用戶顯示信息時
    • 臨時禁用普通用戶賬戶
    • FTP 等需要顯示自定義消息的場景
  3. 驗證用戶配置

    grep mysql /etc/passwd
    

    正確輸出示例:

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

安全提示:對于服務賬戶(如 MySQL),始終優先選擇 /bin/false。它不僅更安全,還能避免在系統日志中留下不必要的認證嘗試記錄,符合安全加固的最佳實踐。




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

這個命令用于創建 MySQL 服務專用的系統用戶,是 MySQL 安裝過程中的關鍵安全步驟。下面我將詳細解釋每個參數的作用和重要性:

???? ???? ???? 命令結構解析

useradd      # 創建新用戶-r         # 創建系統用戶(無主目錄、無登錄能力)-g mysql   # 指定用戶的主組為 "mysql"-s /bin/false  # 設置用戶的登錄 shell 為 /bin/false(禁止登錄)mysql      # 要創建的用戶名

???? ???? ???? 各參數詳細說明

???? ???? ???? ???? 1. -r (創建系統用戶)

  • 作用:創建特殊權限受限的系統用戶
  • 特點
    • 不會創建用戶主目錄 (/home/mysql)
    • UID 從系統用戶范圍分配(通常 < 1000)
    • 無法用于交互式登錄
  • 安全意義
    • 最小權限原則:MySQL 服務只需必要權限運行
    • 攻擊面縮小:即使 MySQL 被入侵,攻擊者也無法獲得完整用戶權限

???? ???? ???? ???? 2. -g mysql (指定主用戶組)

  • 前提:需先創建 mysql 用戶組:
    sudo groupadd -r mysql  # 創建系統組
    
  • 作用
    • 將新用戶加入 mysql
    • 確保 MySQL 相關文件和目錄有統一的所有權
  • 權限管理
    # 查看結果
    $ id mysql
    uid=997(mysql) gid=997(mysql) groups=997(mysql)
    

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

  • 安全機制
    • /bin/false 是一個特殊的"假 shell"
    • 任何登錄嘗試會立即終止,返回失敗狀態
  • 替代方案
    • /usr/sbin/nologin:顯示"此賬戶不可用"提示
    • /bin/false 更安全,不提供任何反饋
  • 驗證效果
    $ sudo su - mysql
    This account is currently not available.
    

???? ???? ???? ???? 4. mysql (用戶名)

  • 行業標準用戶名,便于識別服務
  • 與 MySQL 官方文檔和配置保持一致

???? ???? ???? 為什么需要這樣創建用戶?

???? ???? ???? ???? 安全最佳實踐

  1. 權限隔離

    • MySQL 以非 root 用戶運行
    • 數據庫被入侵時,系統不會被完全控制
  2. 文件所有權

    sudo chown -R mysql:mysql /usr/local/mysql
    sudo chown -R mysql:mysql /var/lib/mysql
    
    • 確保數據庫文件只能被 MySQL 服務訪問
  3. 進程隔離

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

???? ???? ???? ???? 容器環境中的特殊處理
在 Dockerfile 中需要額外步驟:

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






3. 下載編譯包,解壓并配置編譯參數

MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。源碼包 mysql-boost-5.7.44.tar.gz 已包含正確版本。
???????? 下載編譯自帶 Boost庫 的版本

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

???????? 下載編譯不帶 Boost庫 的版本

MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。

boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包

下載編譯不帶 Boost庫 的版本

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

也可以手動安裝 boost 庫(可選)
boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包
boost_1_59_0.tar.gz 80多兆 , mysql-boost-5.7.44 50多兆

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



???????? 相關cmake配置參數講解

源碼編譯安裝mysql用到的cmake的配置參數 筆記250401

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


???? ???? ???? 一、基礎路徑配置

參數說明注意事項
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql安裝根目錄推薦保持默認
-DMYSQL_DATADIR=/usr/local/mysql/data數據存儲目錄需手動創建并授權
sudo mkdir -p /usr/local/mysql/data
sudo chown mysql:mysql /usr/local/mysql/data
-DSYSCONFDIR=/etc配置文件目錄my.cnf 存放位置

???? ???? ???? 二、存儲引擎配置

參數說明推薦
-DWITH_INNOBASE_STORAGE_ENGINE=1InnoDB 引擎必須啟用
-DWITH_PARTITION_STORAGE_ENGINE=1分區表支持按需
-DWITH_ARCHIVE_STORAGE_ENGINE=1ARCHIVE 引擎歸檔存儲
-DWITH_BLACKHOLE_STORAGE_ENGINE=1BLACKHOLE 引擎復制過濾
-DWITH_MYISAM_STORAGE_ENGINE=1MyISAM 引擎兼容舊系統
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1性能監控引擎生產環境建議

???? ???? ???? 三、系統集成與性能

參數說明優化效果
-DWITH_READLINE=1命令行編輯支持libreadline-dev
-DWITH_SYSTEMD=1Systemd 集成關鍵參數
? 生成 mysqld.service
? 需后續配置
-DWITH_JEMALLOC=systemJemalloc 內存分配器顯著提升性能
? 減少內存碎片
? 提高并發能力
libjemalloc-dev
-DWITH_LTO=ON鏈接時優化(LTO)激進優化
? 提升運行時性能 5-15%
? 增加編譯時間 2-3 倍
? 需要更多內存
-DFORCE_INSOURCE_BUILD=1強制源碼內編譯簡化編譯流程

???? ???? ???? 四、安全與加密

參數說明安全建議
-DWITH_SSL=system系統 OpenSSLlibssl-dev
-DWITH_DEBUG=0禁用調試模式生產必須
-DENABLED_LOCAL_INFILE=1本地文件加載高風險!生產環境設為 0
-DMYSQL_TCP_PORT=3306默認端口建議修改

???? ???? ???? 五、字符集與壓縮

參數說明推薦值
-DDEFAULT_CHARSET=utf8mb4默認字符集Unicode 支持
-DDEFAULT_COLLATION=utf8mb4_general_ci默認校對規則通用排序
-DWITH_ZLIB=system系統 zlib 庫zlib1g-dev

???? ???? ???? 六、編譯優化

參數說明性能影響
-DCMAKE_BUILD_TYPE=Release發布模式啟用優化
-DBUILD_TESTING=OFF禁用測試套件減少編譯時間
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer"C++ 優化-O3:最大優化
-fno-omit-frame-pointer:保留棧幀
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer"C 優化同上

???? ???? ???? 七、依賴管理

參數說明工作邏輯
-DENABLE_DOWNLOADS=1允許下載依賴需穩定網絡
-DWITH_BOOST=/usr/local/boostBoost 庫路徑MySQL 5.7 必需
-DDOWNLOAD_BOOST=1自動下載 Boost組合邏輯
1. 檢查指定路徑
2. 不存在則下載
存在
不存在
開始配置
檢查 /usr/local/boost
使用現有Boost
下載Boost 1.59.0
解壓到指定路徑
繼續編譯

???? ???? ???? 新增優化參數詳解
???? ???? ???? ???? 1. Jemalloc 內存分配器 (-DWITH_JEMALLOC=system)

  • 作用:替代 glibc 的 malloc,優化多線程內存管理
  • 優勢
    • 減少內存碎片
    • 提高高并發下的性能
    • 降低內存占用
  • 安裝依賴
    sudo apt install libjemalloc-dev
    

???? ???? ???? ???? 2. 鏈接時優化 (-DWITH_LTO=ON)

  • 原理:在鏈接階段進行全程序優化
  • 效果
    • 提升運行時性能 5-15%
    • 減小二進制體積 10-20%
  • 代價
    • 編譯時間增加 2-3 倍
    • 內存需求翻倍(建議 ≥4GB RAM + 4GB Swap)
    • 可能增加編譯不穩定性

???? ???? ???? ???? 3. 源碼內編譯 (-DFORCE_INSOURCE_BUILD=1)

  • 作用:強制在源碼目錄編譯(默認推薦 out-of-source 編譯)
  • 優點:簡化編譯流程
  • 缺點:污染源碼目錄(中間文件混入)
  • 替代方案(推薦):
    mkdir build && cd build
    cmake .. [其他參數]  # 無需 FORCE_INSOURCE_BUILD
    

此配置結合了高級優化技術(LTO + Jemalloc),適合追求極致性能的生產環境,但需要充足的硬件資源支持編譯過程。

???? ???? ???? 源碼編譯安裝mysql用到的cmake的配置參數 筆記250401

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

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






4. 編譯, 安裝, 設置環境變量

???????? 1. make編譯

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

???????? 2. make安裝

sudo make install

???????? 3. 設置環境變量

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






創建配置 mysqld 服務

???????? 1. 創建目錄設置目錄權限

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

???????? 2. 初始化數據庫
???? ???? ???? root無密碼初始化

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

???? ???? ???? root隨機密碼初始化

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

???????? 3. 創建配置文件

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

???? ???? ???? 4. 創建啟動服務

???? ???? ???? ???? 創建啟動服務方式1: 創建 systemd 服務


創建 systemd 服務

sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.targetEOFxxxXXXeof---foeXXXxxxFOE

啟動啟用服務

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

移除服務

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

???? ???? ???? ???? 創建啟動服務方式2: 用 SysV init 啟動腳本方式創建服務

/usr/local/mysql/support-files/mysql.server 是現成的 SysV init 啟動腳本

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

啟動

sudo /etc/init.d/mysqld start

設置開機自啟

sudo update-rc.d mysqld defaults

Debian10已支持用 systemctl 啟動啟用 /etc/init.d 的 服務

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

講解:

/etc/systemd/system/etc/init.d 是 Linux 系統中服務管理的兩種不同機制的核心目錄,分別對應 systemdSysVinit 初始化系統。以下是詳細對比:


???????? 1. 所屬初始化系統

目錄初始化系統出現時間現代發行版支持
/etc/init.dSysVinit傳統系統(1980s)逐步淘汰(兼容模式保留)
/etc/systemd/systemsystemd2010年后主流默認(如 Ubuntu 16.04+、CentOS 7+)

???????? 2. 文件類型與結構

目錄文件類型文件示例配置結構
/etc/init.dShell 腳本nginx(可執行腳本)單一腳本文件,包含啟動/停止邏輯
/etc/systemd/system單元文件(文本)nginx.service(配置文件)結構化配置([Unit][Service]等節)
  • /etc/init.d/nginx 腳本片段

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

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

???????? 3. 管理命令對比

操作SysVinit (/etc/init.d)systemd (/etc/systemd/system)
啟動服務/etc/init.d/nginx startsystemctl start nginx
停止服務/etc/init.d/nginx stopsystemctl stop nginx
狀態查看/etc/init.d/nginx statussystemctl status nginx
開機自啟chkconfig nginx on (Red Hat)systemctl enable nginx
update-rc.d nginx defaults (Debian)

???????? 4. 依賴管理與啟動順序

特性/etc/init.d (SysVinit)/etc/systemd/system (systemd)
依賴管理通過腳本中的順序號(如 S20nginx)粗略控制精確聲明(After=, Requires=
并行啟動? 串行啟動(按數字順序)? 支持并行,加快啟動速度
資源控制? 不支持? 支持(CPU/內存限制、安全沙盒等)

???????? 5. 配置覆蓋與擴展

目錄擴展機制優先級
/etc/init.d直接修改腳本(風險高)無覆蓋機制
/etc/systemd/system支持以下擴展:
1. 自定義單元文件(覆蓋默認配置)
2. nginx.service.d/override.conf(片段覆蓋)
優先級高于系統默認單元文件(/usr/lib/systemd/system/

???????? 6. 日志管理

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

???????? 7. 兼容性與共存

  • systemd 兼容 SysVinit
    當 systemd 檢測到 /etc/init.d/ 中的腳本時,會自動生成對應的 .service 單元文件(名稱如 sysvinit-nginx.service),但功能有限(依賴管理弱)。
  • 避免混用
    修改服務配置時,不要同時使用兩種目錄(例如:避免在 /etc/init.d 修改腳本的同時在 /etc/systemd/system 覆蓋配置)。

???????? 總結:如何選擇?

場景推薦目錄
現代 Linux 發行版(≥2015年)? /etc/systemd/system
傳統系統或兼容舊腳本?? /etc/init.d(臨時過渡)
自定義服務配置? /etc/systemd/system(優先使用 systemctl edit nginx 生成覆蓋片段)

最佳實踐

  • 新服務配置始終通過 systemd 單元文件(.service)管理。
  • 舊腳本遷移到 systemd 時,將其轉換為單元文件以獲得完整功能。
  • 調試時優先使用 journalctl -u service_name 查看日志。

















1?? 參考 1

在 Debian 10 上編譯安裝 MySQL 5.7.44 需要仔細執行以下步驟,我將提供完整指南并優化關鍵環節:


準備工作

???????? 1. 安裝編譯依賴

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

???????? 2. 創建 MySQL 用戶和組

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

???????? 3. 安裝 Boost 庫 (必需)

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

編譯安裝過程

???????? 1. 下載源碼

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

???????? 2. 配置編譯選項 (關鍵優化)

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

???????? 3. 編譯并安裝 (使用多核加速)

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

系統配置

???????? 1. 設置目錄權限

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

???????? 2. 初始化數據庫

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

???????? 3. 創建配置文件

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

添加以下內容:

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

服務管理

???????? 1. 創建 systemd 服務

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

內容如下:

[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.target

???????? 2. 啟動服務

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

初始設置

???????? 1. 設置環境變量

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

???????? 2. 設置 root 密碼

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

???????? 3. 安全加固

mysql_secure_installation

按提示完成安全設置


驗證安裝

mysql --version
# 輸出: mysql  Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using  EditLine wrappersudo systemctl status mysqld

故障排除指南

???????? 1. 編譯錯誤處理

# 清除緩存后重新配置
rm CMakeCache.txt
cmake .. [原參數]

???????? 2. 啟動失敗檢查

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

???????? 3. 常見錯誤解決

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

???????? 4. 性能優化建議
在 /etc/my.cnf 添加:

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

安全注意事項

  1. 生產環境不要使用 --initialize-insecure
  2. 初始化后立即修改 root 密碼
  3. 定期備份數據和配置文件
  4. 啟用防火墻限制訪問:
    sudo ufw allow 3306/tcp
    

通過以上步驟,您可以在 Debian 10 上成功編譯安裝高性能的 MySQL 5.7.44。編譯過程可能需要 30-60 分鐘(取決于硬件配置),請確保系統有足夠內存(建議至少 2GB)。

















在Debian 10上編譯安裝MySQL 5.7.44需要執行以下步驟。注意:編譯過程耗時較長(1小時以上)且需要充足內存(建議≥2GB),生產環境建議使用官方二進制包。

1. 安裝依賴

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

2. 創建MySQL用戶和組

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

3. 下載源碼

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

4. 配置編譯選項

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

5. 編譯和安裝

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

6. 初始化數據庫

cd /usr/local/mysql
sudo mkdir mysql-files
sudo chown mysql:mysql mysql-files
sudo chmod 750 mysql-files# 初始化數據目錄(記錄輸出的臨時root密碼)
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data# 生成SSL證書
sudo bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

7. 配置啟動腳本

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

8. 配置環境變量

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

9. 啟動MySQL服務

sudo /etc/init.d/mysqld start

10. 修改root密碼

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

11. 設置開機自啟

sudo update-rc.d mysqld defaults

驗證安裝

mysqladmin --version
sudo netstat -tulnp | grep mysqld

常見問題解決

  1. 編譯失敗

    • 檢查依賴是否完整:sudo apt install libboost-dev
    • 清除構建緩存:rm CMakeCache.txt && make clean
  2. 啟動失敗

    • 檢查錯誤日志:sudo tail -f /usr/local/mysql/data/*.err
    • 確認端口未被占用:sudo lsof -i :3306
  3. 連接問題

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

重要提示:編譯安裝適合特定定制需求,常規使用建議通過官方APT源安裝:

sudo apt install mysql-server-5.7

















2?? 參考 2

Debian10編譯安裝MySQL5.7.44詳細步驟

???????? 一、環境準備
???? ???? ???? 1. 更新系統并安裝依賴

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

???????? 二、下載MySQL源碼
???? ???? ???? 1. 下載源碼包

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

???? ???? ???? 2. 驗證MD5校驗值(可選)
從MySQL官方下載頁面獲取對應平臺的MD5值,執行:

md5sum mysql-5.7.44.tar.gz

對比輸出與官方值是否一致。

???????? 三、編譯配置
???? ???? ???? 1. 創建構建目錄并配置

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

???????? 四、編譯與安裝
???? ???? ???? 1. 編譯并安裝

make -j$(nproc)  # 多核編譯加速
sudo make install

???????? 五、初始化配置
???? ???? ???? 1. 創建MySQL用戶和組

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

???? ???? ???? 2. 初始化數據庫

cd /usr/local/mysql
sudo mkdir -p data
sudo chown -R mysql:mysql .
sudo bin/mysqld --initialize --user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
  • 記錄臨時密碼:初始化完成后,控制臺會輸出臨時root密碼,如:
    A temporary password is generated for root@localhost: XXXXXXXXX
    

???????? 六、啟動服務
???? ???? ???? 1. 配置開機啟動

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

???? ???? ???? 2. 驗證服務狀態

sudo systemctl status mysql

???????? 七、安全配置
???? ???? ???? 1. 運行安全腳本

sudo bin/mysql_secure_installation
  • 步驟說明
    1. 輸入臨時root密碼。
    2. 設置新root密碼(建議復雜密碼)。
    3. 移除匿名用戶。
    4. 禁止root遠程登錄。
    5. 移除測試數據庫。
    6. 重新加載權限表。

???????? 八、環境變量配置

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

???????? 九、驗證安裝
???? ???? ???? 1. 檢查MySQL版本

mysql --version

輸出應類似:

mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64)

???? ???? ???? 2. 登錄MySQL

mysql -u root -p

輸入設置的root密碼,成功登錄后執行:

SELECT VERSION();

???????? 十、卸載MySQL

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

通過以上步驟,您可以在Debian10系統上成功編譯安裝MySQL5.7.44,并進行基礎配置和安全加固。

















在 Debian 10 系統上編譯安裝 MySQL 5.7.44,可按照以下步驟進行,此方法能靈活定制參數,但需處理依賴和編譯配置:

一、準備工作

  1. 更新系統包

    sudo apt update && sudo apt upgrade -y
    
  2. 安裝編譯依賴

    sudo apt install -y gcc g++ cmake make libncurses5-dev libssl-dev libboost-dev bison libaio-dev libreadline-dev zlib1g-dev pkg-config systemd-dev
    
    • 說明libncurses5-dev(終端界面庫)、libssl-dev(SSL支持)、libboost-dev(Boost庫)、bison(語法分析器)、libaio-dev(異步I/O支持)等為編譯必需依賴。
  3. 卸載沖突的 MariaDB(如存在)

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

二、下載源碼

  1. 獲取 MySQL 5.7.44 源碼

    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
    tar -zxvf mysql-5.7.44.tar.gz
    cd mysql-5.7.44
    
    • 備用方案:若鏈接失效,訪問 MySQL Archives 手動下載。
  2. 選擇 Boost 庫版本(可選)

    • 自帶 Boost 的版本:直接下載 mysql-boost-5.7.44.tar.gz,解壓后無需額外處理 Boost。
    • 手動指定 Boost:下載 Boost 1.59.0,解壓至 /usr/local/boost_1_59_0

三、編譯配置

  1. 創建構建目錄并配置參數

    mkdir build && cd build
    cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_TCP_PORT=3306 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DENABLE_DOWNLOADS=1 \-DWITH_BOOST=/path/to/boost_1_59_0  # 若手動指定 Boost 路徑
    
    • 關鍵參數說明
      • -DCMAKE_INSTALL_PREFIX:MySQL 安裝目錄。
      • -DMYSQL_DATADIR:數據存儲目錄。
      • -DWITH_INNOBASE_STORAGE_ENGINE=1:啟用 InnoDB 存儲引擎。
      • -DDEFAULT_CHARSET=utf8mb4:支持完整的 Unicode 字符集(包括表情符號)。
  2. 解決常見配置錯誤

    • 錯誤示例CMake Error at cmake/boost.cmake:XXX (message): Boost XXX library not found
      解決方案:確保 -DWITH_BOOST 路徑正確,或使用 -DDOWNLOAD_BOOST=1 自動下載(僅限無 Boost 版本)。
    • 錯誤示例Could NOT find OpenSSL
      解決方案:安裝 libssl-dev 并重新運行 cmake

四、編譯與安裝

  1. 使用多核編譯加速

    make -j$(nproc)  # 根據 CPU 核心數自動調整線程數
    sudo make install
    
  2. 驗證安裝文件

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

五、初始化與配置

  1. 創建 MySQL 用戶和組

    sudo groupadd mysql
    sudo useradd -r -g mysql -s /bin/false mysql
    
  2. 初始化數據庫

    cd /usr/local/mysql
    sudo mkdir -p data
    sudo chown -R mysql:mysql .
    sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    
    • 記錄臨時密碼:初始化輸出中會顯示臨時 root 密碼(如 A temporary password is generated for root@localhost: xxxxxx)。
  3. 配置 my.cnf 文件

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

六、啟動與驗證

  1. 啟動 MySQL 服務

    sudo cp support-files/mysql.server /etc/init.d/mysql
    sudo chmod +x /etc/init.d/mysql
    sudo service mysql start
    
    • 推薦方案:配置 systemd 服務(更可靠):
      sudo nano /etc/systemd/system/mysql.service
      
      [Unit]
      Description=MySQL Server
      After=network.target[Service]
      User=mysql
      Group=mysql
      ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
      Restart=on-failure[Install]
      WantedBy=multi-user.target
      
      sudo systemctl daemon-reload
      sudo systemctl start mysql
      sudo systemctl enable mysql
      
  2. 修改 root 密碼

    /usr/local/mysql/bin/mysql -u root -p
    
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
    FLUSH PRIVILEGES;
    
  3. 測試連接

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

七、常見問題解決

  1. 權限錯誤

    • 現象mysqld: Can't create/write to file '/usr/local/mysql/data/xxx'
    • 解決方案:確保 /usr/local/mysql 及其子目錄屬主為 mysql:mysql
      sudo chown -R mysql:mysql /usr/local/mysql
      
  2. 臨時密碼丟失

    • 解決方案:刪除數據目錄并重新初始化:
      sudo rm -rf /usr/local/mysql/data
      sudo bin/mysqld --initialize --user=mysql
      
  3. 依賴缺失

    • 現象CMake Error: The following variables are used in this project, but they are set to NOTFOUND
    • 解決方案:根據錯誤提示安裝對應依賴(如 libgmp-devflex 等)。

















在 Debian 10 系統上編譯安裝 MySQL 5.7.44,可按照以下步驟進行,該過程涉及依賴安裝、源碼下載、編譯配置、初始化及服務配置等環節:

一、安裝依賴庫

  1. 更新系統包索引

    sudo apt update
    sudo apt upgrade -y
    
  2. 安裝編譯工具和依賴庫

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

二、下載 MySQL 5.7.44 源碼

  1. 訪問 MySQL 官方下載頁面
    MySQL 官方下載頁面

  2. 下載 MySQL 5.7.44 源碼包

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

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

三、編譯與安裝

  1. 創建構建目錄并進入

    mkdir build
    cd build
    
  2. 配置編譯參數

    cmake .. \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/usr/local/mysql/data \
    -DSYSCONFDIR=/etc \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 \
    -DWITH_SSL=system \
    -DWITH_ZLIB=system \
    -DENABLED_LOCAL_INFILE=1 \
    -DMYSQL_TCP_PORT=3306 \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci \
    -DENABLE_DOWNLOADS=1 \
    -DWITH_BOOST=../boost/boost_1_59_0  # 如果源碼包自帶 boost 則無需指定
    

    注意

    • 如果使用無 boost 版本的源碼包,需要添加 -DDOWNLOAD_BOOST=1 參數,讓 CMake 自動下載 boost 1.59.0 版本。
    • 確保 /usr/local/mysql 及子目錄的屬主為 mysql:mysql(后續步驟會創建該用戶和組)。
  3. 編譯并安裝

    make -j$(nproc)  # 使用多核編譯,根據 CPU 核心數調整
    sudo make install  # 安裝到指定目錄
    

四、初始化與配置

  1. 創建 MySQL 用戶和組

    sudo groupadd mysql
    sudo useradd -r -g mysql -s /bin/false mysql
    
  2. 初始化數據庫

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

    注意

    • 初始化完成后,記錄輸出的臨時 root 密碼(類似 A temporary password is generated for root@localhost: xxxxxx)。
    • 如果未記錄密碼,可刪除數據目錄并重新初始化:
      sudo rm -rf /usr/local/mysql/data
      sudo bin/mysqld --initialize --user=mysql
      
  3. 配置 my.cnf 文件

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

    示例配置

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

五、啟動與使用

  1. 啟動 MySQL 服務

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

    推薦:配置 systemd 服務(更現代的管理方式):

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

    輸入以下內容

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

    啟動服務

    sudo systemctl daemon-reload
    sudo systemctl start mysql
    sudo systemctl enable mysql
    
  2. 修改 root 密碼

    /usr/local/mysql/bin/mysql -u root -p  # 輸入初始化時的臨時密碼
    

    在 MySQL 命令行中執行

    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
    FLUSH PRIVILEGES;
    
  3. 設置環境變量

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

六、常見問題解決

  1. 編譯失敗

    • 檢查依賴是否完整,重新執行 cmake 前清理緩存:
      make clean
      rm -f CMakeCache.txt
      
    • 確保 /usr/local/mysql 及子目錄的屬主為 mysql:mysql
      sudo chown -R mysql:mysql /usr/local/mysql
      
  2. 臨時密碼丟失

    • 刪除數據目錄并重新初始化(參考步驟四.2)。
  3. 權限問題

    • 確保 MySQL 數據目錄(/usr/local/mysql/data)的屬主為 mysql:mysql
      sudo chown -R mysql:mysql /usr/local/mysql/data
      

















3?? 參考 3

以下是在 Debian 10 系統上通過源碼編譯安裝 MySQL 5.7.44 的完整步驟,結合依賴管理、編譯優化和初始化配置的關鍵要點,并附常見問題解決方案:


📦 一、安裝依賴與環境準備

  1. 安裝編譯依賴
    確保系統已安裝必要的開發工具和庫:

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

    關鍵說明

    • libboost-dev 是 MySQL 5.7 編譯的必需依賴,需確保版本匹配(官方要求 Boost 1.59.0)。
    • 若安裝時提示 libmecab2 缺失,需額外安裝:sudo apt install libmecab2
  2. 下載源碼(推薦自帶 Boost 版本)

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

    注意:若官網鏈接失效,需從 https://downloads.mysql.com/archives/community/ 手動下載。


?? 二、編譯配置與安裝

  1. 配置編譯參數
    在源碼目錄創建 build 并配置 CMake:

    mkdir build
    cd build
    cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  # 安裝根目錄-DMYSQL_DATADIR=/usr/local/mysql/data \    # 數據存儲路徑-DSYSCONFDIR=/etc \                       # 配置文件目錄-DWITH_INNOBASE_STORAGE_ENGINE=1 \         # 啟用InnoDB引擎-DWITH_SSL=system \                        # 使用系統OpenSSL-DWITH_ZLIB=system \                       # 使用系統Zlib-DDEFAULT_CHARSET=utf8mb4 \                # 默認字符集-DDEFAULT_COLLATION=utf8mb4_general_ci \   # 默認排序規則-DWITH_BOOST=../boost/boost_1_59_0         # 指定自帶Boost路徑
    

    參數說明

    • 若使用無 Boost 的源碼包,需添加 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/include(自動下載 Boost 1.59.0)。
  2. 編譯與安裝
    啟用多核編譯加速(根據 CPU 核心數調整 -j 參數):

    make -j$(nproc)        # 編譯(耗時約 30-60 分鐘)
    sudo make install       # 安裝到指定目錄
    

🔧 三、初始化與系統配置

  1. 創建系統用戶和組

    sudo groupadd mysql
    sudo useradd -r -g mysql -s /bin/false mysql
    
  2. 初始化數據庫
    創建數據目錄并初始化(記錄輸出的臨時 root 密碼):

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

    注意

    • 若需無密碼初始化(不推薦),使用 --initialize-insecure
    • 臨時密碼格式:A temporary password is generated for root@localhost: xxxxxx
  3. 配置 systemd 服務(推薦)
    創建服務文件 /etc/systemd/system/mysql.service

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

    啟動服務:

    sudo systemctl daemon-reload
    sudo systemctl start mysql
    sudo systemctl enable mysql
    
  4. 修改 root 密碼
    使用臨時密碼登錄并更新:

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

🔒 四、安全加固與優化

  1. 運行安全腳本
    刪除匿名用戶、禁止遠程 root 登錄等:

    sudo /usr/local/mysql/bin/mysql_secure_installation
    
  2. 配置環境變量
    將 MySQL 二進制路徑加入全局 PATH

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

?? 五、常見問題解決

問題解決方案
CMake 配置失敗刪除 build/CMakeCache.txt 后重試,檢查依賴完整性(如 libtinfo-dev)。
初始化權限錯誤確保 /usr/local/mysql 及子目錄屬主為 mysql:mysql
臨時密碼丟失刪除數據目錄并重新初始化:sudo rm -rf /usr/local/mysql/data
服務啟動失敗檢查日志 /var/log/mysql/error.log,確認 my.cnf 中的路徑配置正確。
內存不足導致編譯中斷添加交換空間或減少編譯線程數(如 make -j2)。

💎 總結建議

  • 編譯優勢:源碼安裝適合需深度定制(如特定存儲引擎、字符集優化)的場景,但耗時較長。
  • 替代方案:若無定制需求,推薦使用 APT 倉庫安裝(快速安裝最新 5.7.x):
    wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
    sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb  # 選擇 MySQL 5.7
    sudo apt update
    sudo apt install mysql-server-5.7
    
  • 驗證安裝
    mysql -V  # 輸出示例:mysql  Ver 14.14 Distrib 5.7.44
    systemctl status mysql
    

完成安裝后,建議通過 mysql_secure_installation 加固安全,并配置防火墻限制 3306 端口訪問。

















以下是根據多個可靠來源整理的 Debian 10 編譯安裝 MySQL 5.7.44 的完整指南,涵蓋依賴管理、編譯配置、服務部署等全流程關鍵步驟。此方法適用于需要高度定制化或嚴格版本控制的場景。


🔧 一、準備工作:系統環境與依賴

  1. 更新系統并安裝編譯工具

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y build-essential cmake libssl-dev libncurses5-dev libaio1 libaio-dev bison libperl-dev zlib1g-dev pkg-config wget
    
  2. 創建專用用戶與目錄

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

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

?? 二、編譯配置與安裝

  1. 進入編譯目錄并生成 Makefile

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

    注意:若配置失敗,刪除 CMakeCache.txt 后重試。

  2. 編譯并安裝

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

    編譯時間較長(約 30-60 分鐘),取決于硬件性能。


? 三、初始化與啟動服務

  1. 初始化數據目錄

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

    記錄輸出的臨時 root 密碼(如 [Note] A temporary password is generated for root@localhost: Abc123!)。

  2. 配置 systemd 服務

    sudo cp ../support-files/mysql.server /etc/init.d/mysql
    sudo systemctl daemon-reload
    sudo systemctl start mysql
    sudo systemctl enable mysql
    
  3. 設置環境變量(可選)

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

🔐 四、安全配置與驗證

  1. 修改 root 密碼
    使用臨時密碼登錄并修改:

    mysql -u root -p  # 輸入臨時密碼
    
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
    FLUSH PRIVILEGES;
    
  2. 運行安全腳本

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

    按提示移除匿名用戶、禁止遠程 root 登錄等。

  3. 驗證安裝

    mysql -V  # 輸出:mysql Ver 14.14 Distrib 5.7.44
    systemctl status mysql  # 確認服務狀態為 active (running)
    

?? 關鍵問題與注意事項

  1. Boost 版本嚴格匹配
    MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。源碼包 mysql-boost-5.7.44.tar.gz 已包含正確版本。

  2. 依賴缺失處理

    • 若報錯 libtinfo.so.5 缺失:
      sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib64/libtinfo.so.5
      
    • 編譯失敗時檢查日志:
      cat /opt/software/mysql/build/CMakeCache.txt | grep "NOT_FOUND"
      
  3. 服務管理

    • 自定義配置文件路徑:/etc/my.cnf(需手動創建)
    • 日志定位:/opt/software/mysql/data/*.err
  4. 安全建議

    • 生產環境需限制防火墻訪問:
      sudo ufw allow 3306/tcp
      
    • MySQL 5.7 已結束官方支持(EOL),僅建議用于兼容性場景。

總結:編譯安裝可精準控制版本與配置,但復雜度較高。若無需定制,推薦使用 APT 安裝(參考 )。操作前務必備份數據,編譯失敗時可清理 /opt/software/mysql/build 后重試。

















在 Debian 10 上通過源碼編譯安裝 MySQL 5.7.44 的完整步驟如下,包含依賴處理、編譯配置及常見問題解決方案:


一、環境準備

???????? 1. 安裝編譯依賴

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake ncurses5 libaio1 wget libssl-dev libmecab2
  • 關鍵依賴說明
    • libaio1:異步 I/O 支持
    • ncurses5:終端交互庫
    • libssl-dev:SSL/TLS 加密支持
    • libmecab2:分詞庫(用于全文索引)

???????? 2. 創建專用用戶和目錄

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

二、下載與編譯源碼

???????? 1. 下載 MySQL 5.7.44 源碼包

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

???????? 2. 配置編譯參數(關鍵步驟)

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=./boost \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITHOUT_SERVER=OFF  # 啟用服務端編譯
  • 參數說明
    • -DWITH_BOOST:指定 Boost 庫路徑(需與源碼包內路徑一致)
    • -DWITHOUT_SERVER=OFF:確保編譯完整服務端程序

???????? 3. 編譯與安裝

make -j$(nproc)  # 使用多核加速編譯
sudo make install
  • 編譯耗時:約 10-20 分鐘(視硬件性能)

三、初始化與配置

???????? 1. 初始化數據庫

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

???????? 2. 配置系統服務

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

???????? 3. 啟動 MySQL 服務

sudo systemctl start mysql
sudo systemctl status mysql  # 檢查運行狀態

四、安全配置

???????? 1. 修改 root 密碼

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

???????? 2. 運行安全腳本

sudo /usr/local/mysql/bin/mysql_secure_installation
  • 操作選項
    • 移除匿名用戶
    • 禁止遠程 root 登錄
    • 刪除測試數據庫
    • 重新加載權限表

五、常見問題解決

???????? 1. 編譯錯誤:找不到 Boost 庫

  • 原因:CMake 未正確指向 Boost 路徑
  • 解決:重新配置并指定 Boost 目錄:
    cmake . -DWITH_BOOST=/path/to/mysql-5.7.44/boost
    

???????? 2. 初始化失敗:權限問題

  • 解決:確保數據目錄權限正確:
    sudo chown -R mysql:mysql /usr/local/mysql/data
    

???????? 3. 啟動時報錯:libtinfo.so.5 缺失

  • 解決:創建符號鏈接(Debian 10 默認使用 ncurses6):
    sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
    

???????? 4. 遠程連接被拒絕

  • 修改配置文件:編輯 /etc/mysql/my.cnf,注釋 bind-address = 127.0.0.1
  • 授權遠程訪問
    CREATE USER 'user'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

六、驗證安裝

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

七、卸載與清理(可選)

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

選擇建議

  • 生產環境:推薦通過官方 APT 倉庫安裝(搜索結果),自動處理依賴和更新。
  • 定制需求:僅當需要修改編譯參數(如啟用 SSL 或調整存儲引擎)時使用源碼安裝。

如需進一步優化(如調整 InnoDB 緩沖池大小),可編輯 /etc/mysql/my.cnf 并重啟服務。

















4?? 參考 4

在 Debian 10 上編譯安裝 MySQL 5.7.44 需要手動下載源碼、配置編譯選項并完成安裝。以下是詳細的步驟:


1. 安裝依賴

在編譯 MySQL 之前,需要安裝必要的依賴包:

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

2. 創建 MySQL 用戶和組

為了安全,建議創建一個專用的 mysql 用戶和組來運行 MySQL 服務:

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

3. 下載 MySQL 5.7.44 源碼

從 MySQL 官方下載源碼包(需要注冊 MySQL 賬號):

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

如果無法直接下載,可以訪問 MySQL 官網 手動下載。


4. 解壓源碼包

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

5. 創建編譯目錄

mkdir build
cd build

6. 配置編譯選項

使用 cmake 配置編譯選項。以下是一個常見的配置示例:

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

說明

  • CMAKE_INSTALL_PREFIX:指定 MySQL 的安裝目錄。
  • MYSQL_DATADIR:指定數據存儲目錄。
  • SYSCONFDIR:指定配置文件 my.cnf 的位置。
  • DEFAULT_CHARSETDEFAULT_COLLATION:設置默認字符集為 utf8mb4
  • 如果需要其他功能(如調試支持),可以調整 -DWITH_DEBUG1

7. 編譯和安裝

make -j$(nproc)  # 使用多線程編譯以加快速度
sudo make install

8. 設置權限

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

9. 初始化 MySQL 數據庫

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

說明

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

10. 配置 MySQL 服務

???????? 10.1 創建 systemd 服務文件
創建 /etc/systemd/system/mysqld.service 文件,內容如下:

[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=on-failure[Install]
WantedBy=multi-user.target

???????? 10.2 創建 my.cnf 配置文件
創建 /etc/my.cnf 文件,內容如下:

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

11. 啟動 MySQL 服務

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

12. 設置 root 密碼

???????? 12.1 登錄 MySQL

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

???????? 12.2 修改 root 密碼
在 MySQL 命令行中執行:

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

13. 驗證安裝

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

輸入密碼后,如果成功進入 MySQL 命令行,則表示安裝完成。


14. 配置環境變量(可選)

將 MySQL 的 bin 目錄添加到系統路徑中:

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

15. 常見問題解決

???????? 1. 編譯失敗

  • 錯誤示例CMake Error: The following variables are used in this project, but they are set to NOTFOUND...
    • 解決方法:檢查依賴是否安裝完整(如 libncurses5-dev, libssl-dev 等)。

???????? 2. 權限問題

  • 錯誤示例Can't start server: access denied for user 'mysql'...
    • 解決方法:確保 /var/lib/mysql 的權限為 mysql:mysql

???????? 3. 啟動失敗

  • 錯誤示例Failed at step EXEC_START spawning...
    • 解決方法:檢查 mysqld.service 文件中的路徑是否正確。

16. 安全配置

運行 mysql_secure_installation 工具進一步加固 MySQL:

/usr/local/mysql/bin/mysql_secure_installation

17. 總結

通過以上步驟,您已成功在 Debian 10 上編譯安裝了 MySQL 5.7.44。如果需要進一步優化性能或配置高級功能(如主從復制、集群),可以參考 MySQL 官方文檔或相關教程。

















Debian 10 上編譯安裝 MySQL 5.7.44 的步驟如下:


1. 準備工作

???????? 1.1 安裝依賴

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

???????? 1.2 下載 MySQL 5.7.44 源碼包
從 MySQL 官方歸檔頁面下載源碼包:

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

2. 創建 MySQL 用戶和用戶組

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

3. 配置 MySQL 安裝路徑

???????? 3.1 創建安裝目錄

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

???????? 3.2 創建數據目錄

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

4. 編譯 MySQL

???????? 4.1 配置 CMake

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_IPOPTIMIZATION=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0

???????? 4.2 編譯和安裝

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

5. 初始化 MySQL 數據庫

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

說明--initialize-insecure 會生成空密碼的 root 用戶,后續需要手動設置密碼。


6. 配置 MySQL 服務

???????? 6.1 創建 my.cnf 配置文件

sudo vi /etc/my.cnf

添加以下內容:

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

???????? 6.2 創建 systemd 服務文件

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

添加以下內容:

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

???????? 6.3 啟動并啟用 MySQL 服務

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

7. 設置 root 密碼和安全配置

???????? 7.1 登錄 MySQL

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

???????? 7.2 修改 root 密碼

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

???????? 7.3 安全配置(可選)

-- 刪除匿名用戶
DELETE FROM mysql.user WHERE User='';
-- 禁止 root 遠程登錄(可選)
UPDATE mysql.user SET Host='localhost' WHERE User='root' AND Host='%';
-- 刷新權限
FLUSH PRIVILEGES;

8. 配置遠程訪問(可選)

???????? 8.1 修改 my.cnf

sudo vi /etc/my.cnf

bind-address 改為:

bind-address=0.0.0.0

???????? 8.2 授權遠程訪問

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

???????? 8.3 開放防火墻端口

sudo ufw allow 3306/tcp
sudo ufw reload

9. 驗證安裝

???????? 9.1 檢查服務狀態

sudo systemctl status mysqld

???????? 9.2 檢查 MySQL 版本

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

???????? 9.3 遠程連接測試

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

10. 常見問題解決

???????? 10.1 權限問題

  • 確保 /data/mysql 目錄權限為 mysql:mysql
    sudo chown -R mysql:mysql /data/mysql
    

???????? 10.2 端口沖突

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

???????? 10.3 查看錯誤日志

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

11. 補充說明

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

通過以上步驟,你應該能夠在 Debian 10 上成功編譯安裝并配置 MySQL 5.7.44。如果遇到問題,請參考 MySQL 官方文檔或社區資源。

















5?? 參考 5

在Debian 10上編譯安裝MySQL 5.7.44需要準備編譯環境、下載源碼并按步驟操作。以下是詳細過程:

1. 安裝編譯依賴

sudo apt update
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev libmysqlclient-dev \libreadline-dev libbz2-dev libcurl4-openssl-dev libarchive-dev liblz4-dev

2. 創建MySQL用戶和數據目錄

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

3. 下載并解壓MySQL源碼

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

4. 配置編譯選項(使用CMake)

cmake . \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_FEDERATED_STORAGE_ENGINE=1 \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DTRACE=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_unicode_ci \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock

5. 編譯和安裝

make -j$(nproc)  # 使用多線程編譯(nproc顯示CPU核心數)
sudo make install

6. 配置MySQL

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

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

7. 初始化數據庫

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

注意:初始化后會生成臨時密碼(在輸出中顯示 [Note] A temporary password is generated for root@localhost: xxxxx),請記錄該密碼。

8. 啟動MySQL服務

sudo bin/mysqld_safe --user=mysql &

9. 配置環境變量

將MySQL命令添加到系統路徑:

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

10. 安全設置

使用臨時密碼登錄并修改root密碼:

mysql -u root -p
# 輸入臨時密碼后執行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
FLUSH PRIVILEGES;

11. 配置為系統服務

創建systemd服務文件:

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

重載systemd并啟用服務:

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

驗證安裝

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

輸出應顯示 5.7.44

常見問題

  1. 編譯錯誤:檢查依賴是否完整安裝。
  2. 啟動失敗:檢查日志文件 /usr/local/mysql/data/hostname.err
  3. 權限問題:確保 /usr/local/mysql/var/run/mysqld 目錄權限正確。

通過以上步驟,你可以在Debian 10上成功編譯安裝MySQL 5.7.44。

















在Debian 10系統上編譯安裝MySQL 5.7.44,可按以下步驟操作:

1. 安裝編譯依賴

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

2. 創建MySQL用戶和數據目錄

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

3. 下載并解壓MySQL源碼

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

4. 配置編譯選項

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

5. 編譯和安裝

make -j$(nproc)  # 根據CPU核心數加速編譯
sudo make install

6. 配置MySQL

sudo cp support-files/my-default.cnf /etc/my.cnf
sudo vi /etc/my.cnf  # 根據需要調整配置參數

7. 初始化數據庫

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

注意初始化后輸出的臨時密碼,用于首次登錄

8. 啟動MySQL服務

sudo bin/mysqld_safe --user=mysql &

9. 設置開機自啟

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

10. 安全配置

sudo bin/mysql_secure_installation

驗證安裝

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

環境變量配置

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

Debian 10編譯安裝MySQL 5.7.44腳本

#!/bin/bash# Debian 10編譯安裝MySQL 5.7.44腳本# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color# 錯誤處理函數
handle_error() {echo -e "${RED}錯誤: $1${NC}"exit 1
}# 安裝依賴
echo -e "${GREEN}正在安裝編譯依賴...${NC}"
sudo apt update || handle_error "更新APT源失敗"
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \libmysqlclient-dev libreadline-dev libffi-dev libz-dev \libjemalloc-dev || handle_error "安裝依賴包失敗"# 創建MySQL用戶和組
echo -e "${GREEN}正在創建MySQL用戶和組...${NC}"
sudo groupadd mysql || handle_error "創建mysql組失敗"
sudo useradd -r -g mysql -s /bin/false mysql || handle_error "創建mysql用戶失敗"# 創建安裝目錄
echo -e "${GREEN}正在創建安裝目錄...${NC}"
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql || handle_error "設置目錄權限失敗"# 下載并解壓源碼
echo -e "${GREEN}正在下載和解壓MySQL源碼...${NC}"
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz || handle_error "下載源碼失敗"
tar -xzf mysql-5.7.44.tar.gz || handle_error "解壓源碼失敗"
cd mysql-5.7.44 || handle_error "進入源碼目錄失敗"# 配置編譯選項
echo -e "${GREEN}正在配置編譯選項...${NC}"
cmake . \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_EMBEDDED_SERVER=1 \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DOWNLOADS=1 \-DWITH_JEMALLOC=1 \-DWITH_SSL=system \-DWITH_ZLIB=system || handle_error "CMake配置失敗"# 編譯和安裝
echo -e "${GREEN}正在編譯MySQL,這可能需要一段時間...${NC}"
make -j$(nproc) || handle_error "編譯失敗"
echo -e "${GREEN}正在安裝MySQL...${NC}"
sudo make install || handle_error "安裝失敗"# 配置MySQL
echo -e "${GREEN}正在配置MySQL...${NC}"
sudo cp support-files/my-default.cnf /etc/my.cnf
# 添加基礎配置
sudo tee -a /etc/my.cnf > /dev/null <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/mysql.pid
log-error = /usr/local/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 500
innodb_buffer_pool_size = 1G
EOF# 初始化數據庫
echo -e "${GREEN}正在初始化MySQL數據庫...${NC}"
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data || handle_error "數據庫初始化失敗"# 獲取臨時密碼
TEMP_PASSWORD=$(grep 'temporary password' /usr/local/mysql/error.log | awk '{print $NF}')
echo -e "${YELLOW}臨時密碼: $TEMP_PASSWORD${NC}"# 配置系統服務
echo -e "${GREEN}正在配置系統服務...${NC}"
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults || handle_error "設置開機自啟失敗"# 啟動MySQL
echo -e "${GREEN}正在啟動MySQL服務...${NC}"
sudo systemctl start mysql || handle_error "啟動MySQL服務失敗"# 添加到環境變量
echo -e "${GREEN}正在配置環境變量...${NC}"
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile || handle_error "更新環境變量失敗"# 安全配置
echo -e "${GREEN}請手動進行安全配置,設置新密碼等...${NC}"
echo -e "${YELLOW}執行: mysql_secure_installation${NC}"echo -e "${GREEN}MySQL 5.7.44編譯安裝完成!${NC}"
echo -e "${YELLOW}使用命令 'mysql -u root -p' 登錄MySQL${NC}"    

如果編譯過程中遇到依賴問題,可以通過apt search命令查找對應的庫包并安裝。編譯完成后,建議進行性能測試和安全加固。

















6?? 參考 6

在 Debian 10 上編譯安裝 MySQL 5.7.44

???????? 步驟 1:安裝編譯依賴

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

說明:MySQL 5.7 需要 Boost 庫和 OpenSSL 開發包。

???????? 步驟 2:下載源碼

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

???????? 步驟 3:配置編譯選項

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

關鍵參數

  • INSTALL_PREFIX:指定安裝目錄
  • MYSQL_DATADIR:設置數據庫存儲路徑
  • WITH_SSL=system:使用系統 OpenSSL 庫

???????? 步驟 4:編譯和安裝

make -j$(nproc)        # 使用所有 CPU 核心加速編譯
sudo make install      # 需要 root 權限

???????? 步驟 5:創建系統用戶和目錄

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

???????? 步驟 6:初始化數據庫

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

注意--initialize-insecure 會創建空密碼的 root 賬戶,生產環境應使用 --initialize 生成隨機密碼。

???????? 步驟 7:配置 systemd 服務
創建服務文件 /etc/systemd/system/mysqld.service

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

啟用服務:

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

???????? 步驟 8:設置環境變量

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

???????? 步驟 9:安全初始化

sudo mysql_secure_installation

按提示設置 root 密碼、移除匿名用戶等安全選項。

???????? 驗證安裝

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

應輸出:5.7.44

常見問題解決

  1. CMake 錯誤

    • 檢查缺失依賴:sudo apt install libtinfo5
    • 清除緩存:rm CMakeCache.txt
  2. 內存不足

    sudo dd if=/dev/zero of=/swapfile bs=1G count=4
    sudo mkswap /swapfile && sudo swapon /swapfile
    
  3. 服務啟動失敗

    sudo journalctl -u mysqld -f  # 查看實時日志
    

重要提示:編譯過程約需 1-2 小時(取決于硬件),建議在穩定環境中操作。


相關問題

  1. MySQL 5.7 與 Debian 10 的兼容性問題有哪些?
  2. 如何優化 MySQL 5.7 的編譯參數提升性能?
  3. 源碼安裝的 MySQL 如何升級到新版本?
  4. 編譯安裝和包管理器安裝的 MySQL 有何本質區別?
: MySQL 官方要求編譯時必須安裝 Boost 庫和 OpenSSL 開發包
配置文件需正確設置數據目錄和套接字路徑
編譯大型項目建議預留至少 4GB 內存空間

















在 Debian 10 上編譯安裝 MySQL 5.7.44 需要手動下載源碼并進行編譯。以下是詳細步驟:


一、安裝編譯依賴

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

二、下載 MySQL 5.7.44 源碼

# 創建目錄并下載源碼包
mkdir ~/mysql-src && cd ~/mysql-src
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz# 解壓源碼
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44

三、配置編譯選項

# 創建編譯目錄
mkdir build && cd build# 配置編譯參數(指定安裝路徑和優化選項)
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=yes \
-DWITH_ZLIB=bundled \
-DWITH_DEBUG=0 \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1

四、編譯并安裝

# 編譯(可能需要較長時間)
make -j$(nproc)# 安裝
sudo make install

五、配置 MySQL 環境

# 創建 mysql 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql# 設置目錄權限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod -R 755 /usr/local/mysql# 初始化數據庫
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

六、配置系統服務

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

七、配置 MySQL

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

八、驗證安裝

# 檢查服務狀態
systemctl status mysqld# 登錄 MySQL 查看版本
/usr/local/mysql/bin/mysql -u root -p
SELECT VERSION();

注意事項

  1. 依賴問題:若編譯失敗,請檢查是否安裝所有依賴庫。
  2. 路徑問題:確保 basedirdatadir 路徑權限正確。
  3. 初始化密碼:初始化時會生成臨時 root 密碼,需在日志中查看并設置新密碼。

如果需要更詳細的配置選項或遇到問題,可以進一步說明具體需求!

















7?? 參考 7

以下是在 Debian 10 上通過編譯源碼安裝 MySQL 5.7.44 的詳細步驟:


1. 安裝編譯依賴環境

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

2. 下載 MySQL 5.7.44 源碼包

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

3. 配置編譯選項

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

關鍵參數說明

  • CMAKE_INSTALL_PREFIX:指定安裝路徑。
  • MYSQL_DATADIR:數據庫文件存儲目錄。
  • SYSCONFDIR:配置文件目錄(默認生成 /etc/mysql/my.cnf)。
  • WITH_*:啟用的存儲引擎和功能模塊。

4. 編譯并安裝

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

5. 創建 MySQL 用戶和目錄權限

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

6. 初始化 MySQL 數據庫

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

記錄輸出的臨時 root 密碼(如 [Note] A temporary password is generated for root@localhost: xxxxxx)。


7. 配置 systemd 服務

創建服務文件 /etc/systemd/system/mysql.service

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

8. 啟動 MySQL 服務

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

9. 設置 root 密碼

/usr/local/mysql/bin/mysql_secure_installation

按提示輸入臨時密碼并修改為新密碼。


10. 驗證安裝

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

常見問題解決

???????? 1. 初始化失敗(目錄權限問題)
檢查 /usr/local/mysql/data 的權限:

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

???????? 2. 依賴缺失導致編譯中斷
通過 apt search 查找缺失的頭文件或庫,例如:

sudo apt install libssl-dev

???????? 3. 無法連接到 socket
檢查配置文件 /etc/mysql/my.cnf 中的 socket 路徑是否匹配:

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

環境變量配置(可選)

將 MySQL 添加到 PATH:

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

總結

此方法適合需要 深度自定義編譯選項 的場景。如果僅需快速部署,建議優先使用 APT 倉庫安裝。MySQL 5.7 已結束官方支持(EOL),建議生產環境升級至 MySQL 8.x。

















在Debian 10上編譯安裝MySQL 5.7.44的步驟如下:


1. 安裝依賴環境

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

2. 創建MySQL用戶和組

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

3. 下載MySQL源碼

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

4. 配置編譯選項

mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_SSL=system \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DTRACE=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci

:如果配置失敗,刪除 build/ 目錄并重新執行 cmake


5. 編譯并安裝

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

6. 初始化數據庫

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

保存初始密碼:輸出末尾的 root@localhost: 隨機密碼


7. 配置MySQL服務

???????? (1) 創建配置文件

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

???????? (2) 創建Systemd服務文件

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

???????? (3) 加載服務并啟動

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

8. 設置環境變量

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

9. 安全加固

# 使用初始密碼登錄
mysql -u root -p

在MySQL提示符下執行:

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

















8?? 參考 8

































9?? 參考 9

































🔟 參考 10











































本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88372.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88372.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS 中狀態管理 V2和 V1 的區別

鴻蒙ArkUI框架中的ComponentV2與V1在狀態管理、組件開發模式、性能優化等方面存在顯著差異。以下是兩者的核心區別及技術解析&#xff1a;一、狀態管理機制V1的局限性V1的Observed裝飾器只能觀察對象的第一層屬性變化&#xff0c;需配合ObjectLink手動拆解嵌套對象。例如&#…

centos7 安裝jenkins

文章目錄前言一、pandas是什么&#xff1f;二、安裝依賴環境1.前提準備2.安裝git3.安裝jdk&#xff0c;以及jdk版本選擇4.安裝maven5.安裝NodeJS6.驗證三、安裝Jenkins四、驗證Jenkins總結前言 正在學習jenkinsdocker部署前后端分離項目&#xff0c;安裝jenkins的時候遇到了一…

Leetcode刷題營第二十題:刪除鏈表中的重復節點

面試題 02.01. 移除重復節點 編寫代碼&#xff0c;移除未排序鏈表中的重復節點。保留最開始出現的節點。 示例1&#xff1a; 輸入&#xff1a;[1, 2, 3, 3, 2, 1]輸出&#xff1a;[1, 2, 3]示例2&#xff1a; 輸入&#xff1a;[1, 1, 1, 1, 2]輸出&#xff1a;[1, 2]提示&…

關于市場主流自動化測試工具和框架的簡要介紹

下面我會分別講解 Selenium、Appium、Playwright 等主流自動化框架的區別、聯系、適用場景和歸屬范疇&#xff0c;幫助你更系統地理解它們。&#x1f527; 一、它們都屬于哪一類工具&#xff1f;Selenium、Appium、Playwright、Cypress 等都屬于&#xff1a;?? 自動化測試框架…

基于cornerstone3D的dicom影像瀏覽器 第三十二章 文件夾做pacs服務端,fake-pacs-server

文章目錄 前言一、實現思路二、項目與代碼三、dicom瀏覽器調用1. view2d.vue前言 本系列最后一章,提供一個模擬pacs服務,供訪問dicom圖像測試。 修改nodejs本地目錄做為http服務根目錄,提供一個根目錄,其中的每個子目錄代表一個檢查。在dicom瀏覽器url中帶入參數studyId=目…

【Python 核心概念】深入理解可變與不可變類型

文章目錄一、故事從變量賦值說起二、不可變類型 (Immutable Types)三、可變類型 (Mutable Types)四、一個常見的陷阱&#xff1a;當元組遇到列表五、為什么這個區別如此重要&#xff1f;1. 函數參數的傳遞2. 字典的鍵 (Dictionary Keys)3. 函數的默認參數陷阱六、進階話題與擴展…

wpf使用webview2顯示網頁內容(最低兼容.net framework4.5.2)

wpf使用webview2顯示網頁內容(最低兼容.net framework4.5.2 一、核心功能與架構混合開發支持?進程隔離模型?通信機制?二、核心優勢性能與兼容性?跨平臺部署?開發效率?安全機制?三、適用場景四、開發部署要點WebView2 是微軟推出的現代瀏覽器控件,基于 Chromium 內核的 …

MySQL斷開連接后無法正常啟動解決記錄

問題現象 夜里23點MySQL在還原備份的時候斷開連接&#xff0c;嘗試重啟&#xff0c;表面上是運行中實際上無法通過命令端連接&#xff0c;無法正常啟動。 問題檢查 可以使用 systemctl start mysql 但是沒有監聽 3306端口 mysql -ucosmic -p 提示無法找到socket文件 刪除原先的…

隧道安全監測系統的應用意義

隨著我國交通基礎設施建設的快速發展&#xff0c;公路、鐵路及城市地鐵隧道數量不斷增加&#xff0c;隧道安全問題日益凸顯。隧道作為地下封閉空間&#xff0c;受地質條件、施工質量、運營環境等多因素影響&#xff0c;易出現結構變形、滲漏水、襯砌開裂等安全隱患。一旦發生事…

前端UI邏輯復雜可以用什么設計模式

中介者模式 當UI組件間存在復雜交互或多個組件需共享狀態時&#xff0c;中介者模式能集中管理事件分發和狀態更新&#xff0c;減少組件間的直接依賴&#xff0c;提升解耦性。 vue實現中介者模式 在Vue中實現中介者模式&#xff0c;你可以通過創建一個全局的事件中心&#xff08…

WIFI協議全解析05:WiFi的安全機制:IoT設備如何實現安全連接?

&#x1f510; WiFi的安全機制&#xff1a;IoT設備如何實現安全連接&#xff1f;“我的設備明明連上WiFi了&#xff0c;為什么還是能被‘蹭網’&#xff1f;” “WPA3 是什么&#xff1f;ESP32 支持嗎&#xff1f;” “我做了MQTT加密就算安全了嗎&#xff1f;”IoT設備連接WiF…

HTTP 請求體類型詳解:選擇最適合的數據提交格式

HTTP 請求體類型詳解&#xff1a;選擇最適合的數據提交格式 &#x1f680; 本文全面解析 HTTP 請求中不同 Content-Type 的適用場景、數據結構與優劣勢&#xff0c;幫助開發者高效選擇數據傳輸方案。 &#x1f4cc; 目錄 核心請求體類型對比詳細類型解析最佳實踐指南總結 &am…

C語言 | 函數核心機制深度解構:從底層架構到工程化實踐

個人主頁-愛因斯晨 文章專欄-C語言 引言 最近偷懶了&#xff0c;迷上了三國和李賀。給大家分享一下最喜歡的一句詩&#xff1a;吾不識青天高黃地厚&#xff0c;唯見月寒日暖來煎人壽。我還不是很理解27歲的李賀&#xff0c;如何寫出如此絕筆。 正文開始&#xff0c;今天我們…

uniapp真機調試“沒有檢測到設備,請插入設備或啟動模擬器后點擊刷新再試”

當真機調試&#xff0c;運行到安卓 APP基座 時&#xff0c;有時會檢測不到設備&#xff0c;顯示下面的問題&#xff1a;此時&#xff0c;可以通過下面的幾種方法進行排查&#xff1a;1.在手機中找到“開發者選項”選項&#xff08;可在設置中搜索&#xff0c;如搜索不到&#x…

使用langchain連接llama.cpp部署的本地deepseek大模型開發簡單的LLM應用

langchain是一個基于python實現的開源LLM開發框架&#xff0c;llama.cpp是一個基于C框架可以在本地部署大模型并開放服務端接口開放給外部應用使用。 本文結合langchain和llama.cpp&#xff0c;在本地部署輕量級的deepseek大模型&#xff0c;并構建一個簡單的鏈式LLM應用&…

Serverless 數據庫來了?無服務器數據庫 vs 傳統數據庫有何不同?

隨著云計算技術的迅猛發展&#xff0c;無服務器&#xff08;Serverless&#xff09;架構逐漸成為一種主流趨勢。其中&#xff0c;Serverless 數據庫作為云原生應用的重要組成部分&#xff0c;為開發者提供了前所未有的靈活性和成本效益。相比傳統的數據庫管理方式&#xff0c;S…

【讀書筆記】如何畫好架構圖:架構思維的三大底層邏輯

【讀書筆記】如何畫好架構圖&#xff1a;架構思維的三大底層邏輯 架構圖并非技術人的“畫功比拼”&#xff0c;而是一個團隊、一個系統、一次項目從混沌走向清晰的關鍵抓手。它是系統的視覺語言&#xff0c;是讓技術人員、產品經理、運營甚至老板都能站在統一上下文下討論的“…

Maven 編譯過程中發生了 Java Heap Space 內存溢出(OutOfMemoryError)

這個是我最近遇到的&#xff0c;因為本人最近換了電腦&#xff0c;這個電腦的前任是配置好了環境&#xff0c;但是當我用這個環境去做另外一個項目的時候&#xff0c;在maven構建war和jar包的時候&#xff0c;報了這個內存溢出mvn clean install 就給我報錯了[ERROR] Failed to…

C++ 模板參數展開

C 模板參數展開一、獲取可變參數大小二、通過模版循環繼承的方式來展開可變參數三、改用Using去實現循環繼承一、獲取可變參數大小 背景&#xff1a; FLen<int, char, long> Len; 我想要獲取模板參數類型的總大小 template<typename T,typename ...ParamTypes> c…

零基礎入門物聯網-遠程門禁開關:云平臺創建

一、 onenet云平臺注冊創建 遠程開關的信息傳輸依賴云平臺&#xff0c;本教程以 OneNET - 中國移動物聯網開放平臺為例進行操作&#xff0c;具體步驟如下&#xff1a; 1、平臺賬號創建 點擊 OneNET - 中國移動物聯網開放平臺進入官網 點擊頁面中的 “登錄” 按鈕&#xff0c;…