Debian-10編譯安裝Mysql-5.7.44 筆記250706
單一腳本安裝
### 1. 安裝編譯依賴
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz### 2. 創建 MySQL 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql### 3. 下載編譯包,解壓并配置編譯參數
mkdir -pm 777 ~/InstallSetup/mysql && cd $_
if [ ! -e mysql-boost-5.7.44.tar.gz ] ;thensudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
fi
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_JEMALLOC=system \-DWITH_LTO=ON \-DWITH_DEBUG=0 \-DENABLED_LOCAL_INFILE=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQLX_TCP_PORT=33060 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \-DSYSTEMD_PID_DIR=/var/run/mysqld \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \-DFORCE_INSOURCE_BUILD=1 \-DENABLE_DOWNLOADS=1 -DWITH_BOOST=../boost/boost_1_59_0 # 用于自帶boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以### 4. 編譯, 安裝, 設置環境變量
<font size=4 color=#00cc00> 1. 編譯.安裝</font>
make -j$(nproc) # 使用所有CPU核心
sudo make install
<font size=4 color=#00cc00> 2. 設置環境變量</font>
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile### 五. 創建配置 mysqld 服務
<font size=4 color=#00cc00> 1. 創建目錄設置目錄權限</font>
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld<font size=4 color=#00cc00> 2. 初始化數據庫</font>
<font size=3 color=#cc00cc> root無密碼初始化</font>
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data<font size=4 color=#00cc00> 3. 創建配置文件</font>sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock ### 默認: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid[client]
socket = /var/run/mysqld/mysqld.sock ### 默認: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE<font size=3 color=#cc00cc> 4. 創建啟動服務</font><font size=2 color=#cccc00> 創建 systemd 服務</font>sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.targetEOFxxxXXXeof---foeXXXxxxFOE<font size=2 color=#cccc00> 啟動啟用服務</font>
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
分步安裝
1. 安裝編譯依賴
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz
2. 創建 MySQL 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
或
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/nologin mysql
3. 下載編譯包,解壓并配置編譯參數
MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。源碼包 mysql-boost-5.7.44.tar.gz 已包含正確版本。
???????? 下載編譯自帶 Boost庫 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_JEMALLOC=system \-DWITH_LTO=ON \-DWITH_DEBUG=0 \-DENABLED_LOCAL_INFILE=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQLX_TCP_PORT=33060 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \-DSYSTEMD_PID_DIR=/var/run/mysqld \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \-DFORCE_INSOURCE_BUILD=1 \-DENABLE_DOWNLOADS=1 -DWITH_BOOST=../boost/boost_1_59_0 # 用于自帶boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
???????? 下載編譯不帶 Boost庫 的版本
MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。
boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包
下載編譯不帶 Boost庫 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_JEMALLOC=system \-DWITH_LTO=ON \-DWITH_DEBUG=0 \-DENABLED_LOCAL_INFILE=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQLX_TCP_PORT=33060 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \-DSYSTEMD_PID_DIR=/var/run/mysqld \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \-DFORCE_INSOURCE_BUILD=1 \-DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost -DDOWNLOAD_BOOST=1 # 用于無boost版,會自動下載boost1.59.0版 到 -DWITH_BOOST指定的文件夾下的boost_1_59_0文件夾## 只能用boost.1.59.0版 -DDOWNLOAD_BOOST=1 會自動下載boost.1.59.0版 到 -DWITH_BOOST指定的文件夾下的boost_1_59_0文件夾
也可以手動安裝 boost 庫(可選)
boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包
boost_1_59_0.tar.gz
80多兆 , mysql-boost-5.7.44
50多兆
mkdir -pm 777 /tmp/install/boost && cd $_
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost/
4. 編譯, 安裝, 設置環境變量
???????? 1. make編譯
make -j$(nproc) # 使用所有CPU核心
???????? 2. make安裝
sudo make install
???????? 3. 設置環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
創建配置 mysqld 服務
???????? 1. 創建目錄設置目錄權限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
???????? 2. 初始化數據庫
???? ???? ???? root無密碼初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
???? ???? ???? root隨機密碼初始化
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
???????? 3. 創建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock ### 默認: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid[client]
socket = /var/run/mysqld/mysqld.sock ### 默認: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
???? ???? ???? 4. 創建啟動服務
???? ???? ???? ???? 創建啟動服務方式1: 創建 systemd 服務
創建 systemd 服務
sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.targetEOFxxxXXXeof---foeXXXxxxFOE
啟動啟用服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
移除服務
sudo systemctl stop mysqld
sudo systemctl disable mysqld --now
sudo rm -rf /etc/systemd/system/mysqld.service
sudo systemctl daemon-reload
???? ???? ???? ???? 創建啟動服務方式2: 用 SysV init 啟動腳本方式創建服務
/usr/local/mysql/support-files/mysql.server
是現成的 SysV init 啟動腳本
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld
啟動
sudo /etc/init.d/mysqld start
設置開機自啟
sudo update-rc.d mysqld defaults
Debian10已支持用 systemctl 啟動啟用 /etc/init.d 的 服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
詳解分步安裝
1. 安裝編譯依賴
sudo apt install -y cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz
以下是對您列出的 Debian 10 編譯依賴包的詳細講解和建議優化方案。這些依賴主要用于編譯 MySQL 5.7.44 等大型 C/C++ 項目:
???? ???? ???? 依賴包分類說明
???? ???? ???? ???? 1. 核心編譯工具
包名 | 作用說明 | 必要性 |
---|---|---|
cmake | 跨平臺構建系統工具 (MySQL 使用 CMake 構建) | ★★★★★ |
gcc g++ | GNU C/C++ 編譯器 | ★★★★★ |
build-essential | 包含 make, gcc, libc-dev 等基礎編譯工具 | ★★★★★ |
pkg-config | 幫助查找庫路徑和編譯標志的工具 | ★★★★☆ |
???? ???? ???? ???? 2. MySQL 必需依賴
包名 | 作用說明 | 必要性 |
---|---|---|
libncurses5-dev | 終端處理庫 (mysql 命令行依賴) | ★★★★★ |
libssl-dev | OpenSSL 開發庫 (加密連接支持) | ★★★★★ |
libreadline-dev | 命令行編輯功能支持 | ★★★★☆ |
zlib1g-dev | 數據壓縮庫 (日志壓縮等) | ★★★★☆ |
bison | 語法分析器生成器 (SQL 解析器依賴) | ★★★★★ |
libaio-dev | 異步 I/O 支持 (提升 InnoDB 性能) | ★★★★☆ |
libnuma-dev | NUMA 架構支持 (多 CPU 系統優化) | ★★★☆☆ |
libboost-all-dev | Boost C++ 庫全集 (MySQL 測試框架依賴) | ★★★★☆ |
???? ???? ???? ???? 3. 優化增強依賴
包名 | 作用說明 | 必要性 |
---|---|---|
libjemalloc-dev | 高性能內存分配器 (替代 glibc malloc) | ★★★☆☆ |
libtbb-dev | Intel 線程構建塊庫 (并行計算優化) | ★★☆☆☆ |
???? ???? ???? ???? 4. 調試診斷工具
包名 | 作用說明 | 必要性 |
---|---|---|
gdb | GNU 調試器 | ★★★☆☆ |
strace | 系統調用跟蹤工具 | ★★☆☆☆ |
ltrace | 庫函數調用跟蹤工具 | ★★☆☆☆ |
???? ???? ???? ???? 5. 文檔生成工具
包名 | 作用說明 | 必要性 |
---|---|---|
doxygen | API 文檔生成器 | ★☆☆☆☆ |
graphviz | 圖表生成工具 (配合 doxygen) | ★☆☆☆☆ |
???? ???? ???? ???? 6. 腳本支持
包名 | 作用說明 | 必要性 |
---|---|---|
libjson-perl | Perl JSON 模塊 (測試腳本依賴) | ★★★☆☆ |
curl wget | 網絡下載工具 | ★★★★☆ |
???? ???? ???? 優化建議方案
???? ???? ???? ???? 方案 1:精簡安裝 (最小化依賴)
sudo apt install -y \
cmake gcc g++ build-essential \
libncurses5-dev libssl-dev libreadline-dev zlib1g-dev bison libaio-dev \
libjson-perl libboost-all-dev
適用場景:僅需基礎編譯功能,節省磁盤空間
節省空間:約 500MB
???? ???? ???? ???? 方案 2:推薦安裝 (平衡方案)
sudo apt install -y \
cmake gcc g++ build-essential \
libncurses5-dev libssl-dev libreadline-dev zlib1g-dev bison libaio-dev \
libjson-perl libnuma-dev libboost-all-dev \
libjemalloc-dev \
gdb curl wget
優勢:
- 包含性能優化組件 (
jemalloc
)- 包含調試工具 (
gdb
)- 保留 NUMA 支持
- 比完整安裝節省 300MB+ 空間
???? ???? ???? ???? 方案 3:完整安裝 (您列出的所有包)
sudo apt install -y \
cmake gcc g++ build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison curl wget libaio-dev \
libjson-perl libnuma-dev libsystemd-dev libboost-all-dev \
libjemalloc-dev libtbb-dev \
gdb strace ltrace \
doxygen graphviz
注意:
- 總大小約 1.2-1.5GB
- 包含所有調試和文檔工具
- 適合深度開發和性能調優場景
???? ???? ???? 關鍵組件說明
-
Boost 庫處理
MySQL 5.7 需要 Boost 1.59+,Debian 10 默認提供 1.67.0:dpkg -s libboost-dev | grep Version # 驗證版本
若編譯報錯
Could NOT find Boost
,需顯式指定路徑:cmake ... -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/boost
-
內存分配器選擇
- jemalloc:減少內存碎片,適合長期運行服務
- tcmalloc:(未包含) Google 高性能分配器
在 my.cnf 中啟用:
[mysqld] malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
-
systemd 集成
libsystemd-dev
用于生成 systemd 服務文件,編譯時添加:cmake ... -DWITH_SYSTEMD=1
生成服務文件:
cmake --install . --component systemd
???? ???? ???? 安裝后驗證
### 檢查關鍵工具
cmake --version | grep -E "3.[0-9]+"
gcc --version | grep "8\." # Debian10 應為 gcc 8.x
bison --version | grep "3.[0-9]+"### 檢查庫文件
ls -l /usr/lib/x86_64-linux-gnu/{libssl.so,libncurses.so,libaio.so}
???? ???? ???? 清理建議 (編譯完成后)
### 移除開發包節省空間 (約 800MB)
sudo apt purge \
'lib*-dev' \
cmake \
doxygen graphviz \
gdb strace ltrace### 保留運行時依賴
sudo apt-mark manual \
libncurses6 libssl1.1 libreadline7 zlib1g libaio1 \
libnuma1 libjemalloc2 libtbb2
???? ???? ???? 總結建議
- 生產環境編譯:使用方案 2,包含性能優化組件
- 開發調試環境:使用方案 3,保留診斷工具
- 磁盤空間緊張:使用方案 1,后續按需添加
- 關鍵組件:務必確保
cmake
,gcc
,bison
,libssl-dev
正確安裝 - Boost 處理:Debian 10 自帶版本可用,無需額外下載
2. 創建 MySQL 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
或
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/nologin mysql
這兩條命令用于為 MySQL 創建專用的系統用戶和組,是 MySQL 安裝前的重要安全準備步驟。
這兩個命令都用于為 MySQL 服務創建專用的系統用戶,核心目標相同但拒絕登錄的實現方式不同:
???????? 命令對比解析
參數/特性 | useradd -r -g mysql -s /bin/false mysql | useradd -r -g mysql -s /bin/nologin mysql |
---|---|---|
創建用戶類型 | 系統用戶 (-r ) | 系統用戶 (-r ) |
所屬用戶組 | 加入 mysql 組 (-g mysql ) | 加入 mysql 組 (-g mysql ) |
Shell 類型 | /bin/false | /bin/nologin |
登錄行為 | 靜默拒絕,無任何輸出 | 顯示提示信息后拒絕 |
退出狀態碼 | 返回非零狀態碼 (失敗) | 返回非零狀態碼 (失敗) |
安全等級 | ????☆ (高) | ????☆ (高) |
適用發行版 | 所有 Linux 通用 | 所有 Linux 通用 |
???????? /bin/false
詳解
行為特點:
- 當用戶嘗試登錄時立即終止會話
- 無任何輸出(靜默拒絕)
- 返回錯誤狀態碼
1
驗證示例:
$ sudo -u mysql /bin/bash
## 無錯誤提示,直接返回命令行
$ echo $?
1
適用場景:
- 需要完全靜默拒絕登錄的環境
- 安全審計要求不產生任何登錄痕跡
- 防止攻擊者探測到有效用戶名
???????? /bin/nologin
詳解
行為特點:
- 當用戶嘗試登錄時顯示預設信息
- 輸出提示:
This account is currently not available.
- 返回錯誤狀態碼
1
- 提示信息可通過
/etc/nologin.txt
自定義
驗證示例:
$ sudo -u mysql /bin/bash
This account is currently not available.
$ echo $?
1
自定義提示信息:
## 創建自定義拒絕消息
echo "MySQL service account - Login prohibited" | sudo tee /etc/nologin.txt
適用場景:
- 需要明確提示賬戶用途的環境
- 方便系統管理員理解賬戶性質
- 符合某些安全合規的明確拒絕要求
???????? 核心共同作用
-
權限隔離
MySQL 服務以該用戶身份運行,避免使用 root -
文件所有權
數據庫文件設置為mysql:mysql
所有:drwxr-x--- 4 mysql mysql 4096 /var/lib/mysql
-
登錄防護
雙重保障:- Shell 本身拒絕登錄
- 在
/etc/passwd
中標記為不可登錄:mysql:x:127:133:MySQL Server:/nonexistent:/bin/false
-
服務安全
滿足 MySQL 的安全要求:[mysqld] user=mysql # my.cnf 中必須配置
???????? 如何選擇?
場景 | 推薦命令 | 原因 |
---|---|---|
生產服務器 | -s /bin/false | 靜默拒絕更安全 |
開發/測試環境 | -s /bin/nologin | 明確提示避免誤操作 |
安全合規要求明確拒絕消息 | -s /bin/nologin + 自定義 /etc/nologin.txt | 滿足審計要求 |
兼容老系統 (Solaris/AIX) | -s /bin/false | 更廣泛兼容 |
Docker 容器環境 | -s /bin/false | 減少鏡像層大小 |
???????? 實踐建議
-
先創建組再創建用戶:
sudo groupadd -r mysql # 根據環境選擇其一 sudo useradd -r -g mysql -s /bin/false mysql # 生產推薦 # 或 sudo useradd -r -g mysql -s /bin/nologin mysql # 開發推薦
-
驗證賬戶屬性:
$ grep mysql /etc/passwd # 正確輸出: mysql:x:998:997:MySQL Server:/nonexistent:/bin/false
-
修復已存在賬戶:
# 如果已創建但需要修改 sudo usermod -s /bin/false mysql
-
數據目錄權限:
sudo chown -R mysql:mysql /var/lib/mysql sudo chmod 750 /var/lib/mysql
📌 關鍵原則:無論選擇哪種方式,都比使用登錄 shell(如
/bin/bash
)更安全,這是 MySQL 安全部署的基本要求。
在 Linux 系統中用于創建一個專門用于運行 MySQL 服務的系統用戶,其主要作用和設計原理如下:
???????? 命令分解及作用
參數 | 作用說明 |
---|---|
useradd | Linux 創建用戶的命令 |
-r | 創建系統用戶(UID < 1000,不創建家目錄) |
-g mysql | 指定用戶所屬的主用戶組為 mysql |
-s /bin/false | 設置用戶的登錄 shell 為不可交互的無效 shell , 靜默拒絕,無任何輸出 |
-s /bin/nologin | 設置用戶的登錄 shell 為不可交互的無效 shell , 顯示提示信息后拒絕 |
mysql | 要創建的用戶名 |
???????? 核心作用詳解
???? ???? ???? 1. 安全隔離(最小權限原則)
- 創建專用用戶運行 MySQL 服務,避免使用
root
賬戶 - MySQL 進程以
mysql
用戶權限運行,即使被入侵也受限于該用戶權限 - 防止數據庫服務獲得 root 權限造成系統級破壞
???? ???? ???? 2. 文件權限控制
- MySQL 數據文件(
/var/lib/mysql
)的所有者設置為mysql:mysql
- 確保只有 MySQL 服務本身能訪問數據庫文件:
drwxr-x--- 4 mysql mysql 4096 Jul 6 10:00 /var/lib/mysql/
???? ???? ???? 3. 服務運行隔離
- MySQL 啟動時自動切換到
mysql
用戶身份運行 - 與其他系統服務(如 Apache/Nginx 的
www-data
用戶)權限分離 - 防止服務間權限互相影響
???? ???? ???? 4. 禁止用戶登錄(安全加固)
/bin/false
作為登錄 shell 會立即終止任何登錄嘗試:$ sudo su - mysql This account is currently not available.
- 無法通過 SSH、su 或控制臺登錄
- 防止攻擊者利用該用戶作為跳板
???????? 工作流程示例
???????? 為什么需要這樣創建?
-
安全必要性
- MySQL 5.7+ 強制要求使用非 root 用戶運行
- 避免 CVE-2012-2122 等提權漏洞風險
-
權限最小化
# 查看 mysql 用戶權限 $ sudo -u mysql id uid=997(mysql) gid=998(mysql) groups=998(mysql)
- 無 home 目錄、無登錄 shell、無 sudo 權限
-
系統兼容性
- 適用于所有 Linux 發行版
- 與 MySQL 官方安裝包行為一致
???????? 重要注意事項
-
必須在安裝 MySQL 前創建
否則數據目錄權限可能不正確 -
組應先于用戶創建
正確順序:sudo groupadd -r mysql # 先創建組 sudo useradd -r -g mysql -s /bin/false mysql # 再創建用戶
-
目錄權限修復
若安裝后權限錯誤:sudo chown -R mysql:mysql /var/lib/mysql sudo chmod 750 /var/lib/mysql
-
不要修改此用戶
禁止解鎖或更改 shell,否則會引入安全風險
這種用戶創建方式是 Linux 服務部署的安全最佳實踐,不僅適用于 MySQL,也適用于 PostgreSQL、Redis 等其他需要權限隔離的服務。
???? ???? ???? 1. sudo groupadd mysql
- 作用:創建名為
mysql
的系統組 - 參數詳解:
- 無額外參數:直接創建指定名稱的用戶組
- 必要性:
- 所有 MySQL 相關進程將以該組身份運行
- 統一管理 MySQL 文件權限(數據文件、配置文件、日志等)
- 系統影響:
- 在
/etc/group
文件中添加條目:
mysql:x:GID:
(GID 為系統自動分配的組ID)
- 在
???? ???? ???? **2. sudo useradd -r -g mysql -s /bin/false mysql
或 sudo useradd -r -g mysql -s /bin/nologin mysql
**
-
作用:創建系統用戶
mysql
并加入mysql
組,禁止登錄 -
參數詳解:
參數 說明 安全意義 -r
創建系統賬戶(UID < 1000) 區別于普通用戶賬戶,不創建家目錄 -g mysql
指定主組為 mysql
確保文件權限一致性 -s /bin/false
設置登錄 shell 為偽終端 , 靜默拒絕登錄 關鍵安全配置 -s /bin/nologin
設置登錄 shell 為偽終端, 明確拒絕登錄 關鍵安全配置 mysql
用戶名 行業標準命名 -
/bin/false
的特殊作用:- 任何登錄嘗試(SSH、su 等)都會立即失敗
- 無任何輸出信息,避免暴露系統用戶存在
- 返回狀態碼 1(失敗),阻止會話建立
-
系統影響:
- 在
/etc/passwd
中添加條目:
mysql:x:UID:GID::/home/mysql:/bin/false
- UID 為系統分配的小于 1000 的值(通常 999 或 110-120 范圍)
- 不會創建
/home/mysql
目錄
- 在
???? ???? ???? 為什么需要專用用戶?
-
最小權限原則:
- MySQL 服務不需要 root 權限運行
- 被入侵時限制攻擊者權限范圍
-
文件所有權控制:
sudo chown -R mysql:mysql /usr/local/mysql/data sudo chmod 750 /usr/local/mysql/data
-
進程隔離:
- MySQL 進程以 mysql 用戶身份運行
- 通過
ps -ef | grep mysqld
可驗證:mysql 12345 0.0 2.1 1280000 42000 ? Ssl 10:00 0:02 /usr/sbin/mysqld
???? ???? ???? 安全增強建議
-
驗證用戶屬性:
# 檢查用戶配置 grep mysql /etc/passwd # 期望輸出:mysql:x:110:110::/home/mysql:/bin/false# 檢查組配置 grep mysql /etc/group # 期望輸出:mysql:x:110:
-
禁止家目錄創建(即使未使用
-m
參數):sudo usermod -d /nonexistent mysql
-
SELinux/AppArmor 集成:
# 為 MySQL 創建專用安全配置文件 sudo semanage user -a -R "staff_r system_r" mysql_u sudo semanage login -a -s mysql_u mysql
???? ???? ???? 替代方案對比
命令 | 優點 | 缺點 |
---|---|---|
useradd -r -g mysql -s /bin/false mysql | 完全靜默,無日志污染 | 管理員無法獲知登錄嘗試 |
useradd -r -g mysql -s /sbin/nologin mysql | 有拒絕登錄提示 | 可能產生無效系統日志 |
adduser --system --disabled-login --group mysql | 更簡潔的語法 | 部分系統不可用 |
???? ???? ???? MySQL 安裝后的權限設置
安裝完成后需執行:
### 設置 MySQL 目錄所有權
sudo chown -R mysql:mysql /usr/local/mysql### 初始化數據目錄(使用 mysql 用戶)
sudo -u mysql /usr/local/mysql/bin/mysqld --initialize
重要安全提示:永遠不要將 MySQL 用戶 shell 改為
/bin/bash
或有效 shell,即使臨時使用。如需維護,應使用sudo -u mysql /bin/sh -c "command"
代替。
這些步驟為 MySQL 創建了一個安全的運行環境,遵循了 Linux 服務賬戶管理的最佳實踐,是生產環境部署的必要前提。
???? ???? ???? /bin/false
和 /bin/nologin
對比
在 Linux 中創建 MySQL 系統用戶時,/bin/false
和 /bin/nologin
都是用于禁止用戶登錄的 shell,但它們在行為上有細微但重要的區別:
useradd -r -g mysql -s /bin/false mysql
- 行為:當用戶嘗試登錄時,立即以非零狀態退出(靜默失敗)
- 特點:
- 不顯示任何消息
- 立即終止登錄嘗試
- 返回退出代碼 1(失敗)
- 使用場景:
- 最嚴格的登錄限制
- 服務賬戶的理想選擇
- 推薦用于數據庫等關鍵服務
useradd -r -g mysql -s /bin/nologin mysql
- 行為:當用戶嘗試登錄時,顯示提示信息后退出
- 特點:
- 顯示默認消息:“This account is currently not available.”
- 可以通過創建
/etc/nologin.txt
自定義消息 - 返回退出代碼 0("成功"拒絕登錄)
- 使用場景:
- 需要向嘗試登錄者顯示提示信息
- 臨時禁用賬戶時更合適
- 某些系統管理場景
關鍵區別對比表:
特性 | /bin/false | /bin/nologin |
---|---|---|
登錄嘗試響應 | 靜默拒絕 | 顯示拒絕消息 |
退出狀態碼 | 1 (失敗) | 0 (成功拒絕) |
自定義消息 | 不支持 | 支持(通過 /etc/nologin.txt) |
安全性 | 更高(不泄露賬戶存在信息) | 稍低(揭示賬戶存在) |
推薦用于服務賬戶 | ? 強烈推薦 | ?? 可用但不理想 |
最佳實踐建議:
-
對于 MySQL 等數據庫服務:
sudo useradd -r -g mysql -s /bin/false mysql
- 這是更安全的選擇
- 防止潛在攻擊者探測服務賬戶
- 符合最小信息泄露原則
-
何時使用 nologin:
- 當需要向可能嘗試登錄的用戶顯示信息時
- 臨時禁用普通用戶賬戶
- FTP 等需要顯示自定義消息的場景
-
驗證用戶配置:
grep mysql /etc/passwd
正確輸出示例:
mysql:x:112:116:MySQL Server:/nonexistent:/bin/false
安全提示:對于服務賬戶(如 MySQL),始終優先選擇
/bin/false
。它不僅更安全,還能避免在系統日志中留下不必要的認證嘗試記錄,符合安全加固的最佳實踐。
???????? useradd -r -g mysql -s /bin/false mysql
命令詳解
這個命令用于創建 MySQL 服務專用的系統用戶,是 MySQL 安裝過程中的關鍵安全步驟。下面我將詳細解釋每個參數的作用和重要性:
???? ???? ???? 命令結構解析
useradd # 創建新用戶-r # 創建系統用戶(無主目錄、無登錄能力)-g mysql # 指定用戶的主組為 "mysql"-s /bin/false # 設置用戶的登錄 shell 為 /bin/false(禁止登錄)mysql # 要創建的用戶名
???? ???? ???? 各參數詳細說明
???? ???? ???? ???? 1. -r
(創建系統用戶)
- 作用:創建特殊權限受限的系統用戶
- 特點:
- 不會創建用戶主目錄 (
/home/mysql
) - UID 從系統用戶范圍分配(通常 < 1000)
- 無法用于交互式登錄
- 不會創建用戶主目錄 (
- 安全意義:
- 最小權限原則:MySQL 服務只需必要權限運行
- 攻擊面縮小:即使 MySQL 被入侵,攻擊者也無法獲得完整用戶權限
???? ???? ???? ???? 2. -g mysql
(指定主用戶組)
- 前提:需先創建
mysql
用戶組:sudo groupadd -r mysql # 創建系統組
- 作用:
- 將新用戶加入
mysql
組 - 確保 MySQL 相關文件和目錄有統一的所有權
- 將新用戶加入
- 權限管理:
# 查看結果 $ id mysql uid=997(mysql) gid=997(mysql) groups=997(mysql)
???? ???? ???? ???? 3. -s /bin/false
(禁用登錄)
- 安全機制:
/bin/false
是一個特殊的"假 shell"- 任何登錄嘗試會立即終止,返回失敗狀態
- 替代方案:
/usr/sbin/nologin
:顯示"此賬戶不可用"提示- 但
/bin/false
更安全,不提供任何反饋
- 驗證效果:
$ sudo su - mysql This account is currently not available.
???? ???? ???? ???? 4. mysql
(用戶名)
- 行業標準用戶名,便于識別服務
- 與 MySQL 官方文檔和配置保持一致
???? ???? ???? 為什么需要這樣創建用戶?
???? ???? ???? ???? 安全最佳實踐
-
權限隔離:
- MySQL 以非 root 用戶運行
- 數據庫被入侵時,系統不會被完全控制
-
文件所有權:
sudo chown -R mysql:mysql /usr/local/mysql sudo chown -R mysql:mysql /var/lib/mysql
- 確保數據庫文件只能被 MySQL 服務訪問
-
進程隔離:
ps aux | grep mysqld mysql 1234 0.0 2.1 1287000 43200 ? Ssl 10:00 0:05 /usr/sbin/mysqld
???? ???? ???? ???? 容器環境中的特殊處理
在 Dockerfile 中需要額外步驟:
RUN groupadd -r mysql && \useradd -r -g mysql -s /bin/false mysql && \mkdir -p /var/lib/mysql && \chown -R mysql:mysql /var/lib/mysql
3. 下載編譯包,解壓并配置編譯參數
MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。源碼包 mysql-boost-5.7.44.tar.gz 已包含正確版本。
???????? 下載編譯自帶 Boost庫 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar -zxvf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_JEMALLOC=system \-DWITH_LTO=ON \-DWITH_DEBUG=0 \-DENABLED_LOCAL_INFILE=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQLX_TCP_PORT=33060 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \-DSYSTEMD_PID_DIR=/var/run/mysqld \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \-DFORCE_INSOURCE_BUILD=1 \-DENABLE_DOWNLOADS=1 -DWITH_BOOST=../boost/boost_1_59_0 # 用于自帶boost版 , `../boost` 或 `../boost/boost_1_59_0` 都可以
???????? 下載編譯不帶 Boost庫 的版本
MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。
boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包
下載編譯不帶 Boost庫 的版本
mkdir -pm 777 /tmp/install/mysql && cd $_
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_JEMALLOC=system \-DWITH_LTO=ON \-DWITH_DEBUG=0 \-DENABLED_LOCAL_INFILE=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQLX_TCP_PORT=33060 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \-DMYSQLX_UNIX_ADDR=/tmp/mysqlx.sock \-DSYSTEMD_PID_DIR=/var/run/mysqld \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" \-DFORCE_INSOURCE_BUILD=1 \-DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost -DDOWNLOAD_BOOST=1 # 用于無boost版,會自動下載boost1.59.0版 到 -DWITH_BOOST指定的文件夾下的boost_1_59_0文件夾## 只能用boost.1.59.0版 -DDOWNLOAD_BOOST=1 會自動下載boost.1.59.0版 到 -DWITH_BOOST指定的文件夾下的boost_1_59_0文件夾
也可以手動安裝 boost 庫(可選)
boost的壓縮包比帶boost的mysql源碼包還要大, 還不如直接用帶boost的源碼包
boost_1_59_0.tar.gz
80多兆 , mysql-boost-5.7.44
50多兆
mkdir -pm 777 /tmp/install/boost && cd $_
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost/
???????? 相關cmake配置參數講解
源碼編譯安裝mysql用到的cmake的配置參數 筆記250401
MySQL 5.7 Source-Configuration Options CMake Option Reference Table 2.14 MySQL Source-Configuration Option Reference (CMake)
???? ???? ???? 一、基礎路徑配置
參數 | 說明 | 注意事項 |
---|---|---|
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql | 安裝根目錄 | 推薦保持默認 |
-DMYSQL_DATADIR=/usr/local/mysql/data | 數據存儲目錄 | 需手動創建并授權:sudo mkdir -p /usr/local/mysql/data sudo chown mysql:mysql /usr/local/mysql/data |
-DSYSCONFDIR=/etc | 配置文件目錄 | my.cnf 存放位置 |
???? ???? ???? 二、存儲引擎配置
參數 | 說明 | 推薦 |
---|---|---|
-DWITH_INNOBASE_STORAGE_ENGINE=1 | InnoDB 引擎 | 必須啟用 |
-DWITH_PARTITION_STORAGE_ENGINE=1 | 分區表支持 | 按需 |
-DWITH_ARCHIVE_STORAGE_ENGINE=1 | ARCHIVE 引擎 | 歸檔存儲 |
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 | BLACKHOLE 引擎 | 復制過濾 |
-DWITH_MYISAM_STORAGE_ENGINE=1 | MyISAM 引擎 | 兼容舊系統 |
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 | 性能監控引擎 | 生產環境建議 |
???? ???? ???? 三、系統集成與性能
參數 | 說明 | 優化效果 |
---|---|---|
-DWITH_READLINE=1 | 命令行編輯支持 | 需 libreadline-dev |
-DWITH_SYSTEMD=1 | Systemd 集成 | 關鍵參數: ? 生成 mysqld.service ? 需后續配置 |
-DWITH_JEMALLOC=system | Jemalloc 內存分配器 | 顯著提升性能: ? 減少內存碎片 ? 提高并發能力 需 libjemalloc-dev |
-DWITH_LTO=ON | 鏈接時優化(LTO) | 激進優化: ? 提升運行時性能 5-15% ? 增加編譯時間 2-3 倍 ? 需要更多內存 |
-DFORCE_INSOURCE_BUILD=1 | 強制源碼內編譯 | 簡化編譯流程 |
???? ???? ???? 四、安全與加密
參數 | 說明 | 安全建議 |
---|---|---|
-DWITH_SSL=system | 系統 OpenSSL | 需 libssl-dev |
-DWITH_DEBUG=0 | 禁用調試模式 | 生產必須 |
-DENABLED_LOCAL_INFILE=1 | 本地文件加載 | 高風險!生產環境設為 0 |
-DMYSQL_TCP_PORT=3306 | 默認端口 | 建議修改 |
???? ???? ???? 五、字符集與壓縮
參數 | 說明 | 推薦值 |
---|---|---|
-DDEFAULT_CHARSET=utf8mb4 | 默認字符集 | Unicode 支持 |
-DDEFAULT_COLLATION=utf8mb4_general_ci | 默認校對規則 | 通用排序 |
-DWITH_ZLIB=system | 系統 zlib 庫 | 需 zlib1g-dev |
???? ???? ???? 六、編譯優化
參數 | 說明 | 性能影響 |
---|---|---|
-DCMAKE_BUILD_TYPE=Release | 發布模式 | 啟用優化 |
-DBUILD_TESTING=OFF | 禁用測試套件 | 減少編譯時間 |
-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" | C++ 優化 | -O3 :最大優化-fno-omit-frame-pointer :保留棧幀 |
-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer" | C 優化 | 同上 |
???? ???? ???? 七、依賴管理
參數 | 說明 | 工作邏輯 |
---|---|---|
-DENABLE_DOWNLOADS=1 | 允許下載依賴 | 需穩定網絡 |
-DWITH_BOOST=/usr/local/boost | Boost 庫路徑 | MySQL 5.7 必需 |
-DDOWNLOAD_BOOST=1 | 自動下載 Boost | 組合邏輯: 1. 檢查指定路徑 2. 不存在則下載 |
???? ???? ???? 新增優化參數詳解
???? ???? ???? ???? 1. Jemalloc 內存分配器 (-DWITH_JEMALLOC=system
)
- 作用:替代 glibc 的 malloc,優化多線程內存管理
- 優勢:
- 減少內存碎片
- 提高高并發下的性能
- 降低內存占用
- 安裝依賴:
sudo apt install libjemalloc-dev
???? ???? ???? ???? 2. 鏈接時優化 (-DWITH_LTO=ON
)
- 原理:在鏈接階段進行全程序優化
- 效果:
- 提升運行時性能 5-15%
- 減小二進制體積 10-20%
- 代價:
- 編譯時間增加 2-3 倍
- 內存需求翻倍(建議 ≥4GB RAM + 4GB Swap)
- 可能增加編譯不穩定性
???? ???? ???? ???? 3. 源碼內編譯 (-DFORCE_INSOURCE_BUILD=1
)
- 作用:強制在源碼目錄編譯(默認推薦 out-of-source 編譯)
- 優點:簡化編譯流程
- 缺點:污染源碼目錄(中間文件混入)
- 替代方案(推薦):
mkdir build && cd build cmake .. [其他參數] # 無需 FORCE_INSOURCE_BUILD
此配置結合了高級優化技術(LTO + Jemalloc),適合追求極致性能的生產環境,但需要充足的硬件資源支持編譯過程。
???? ???? ???? 源碼編譯安裝mysql用到的cmake的配置參數 筆記250401
???? ???? ???? MySQL 5.7 Source-Configuration Options CMake Option Reference Table 2.14 MySQL Source-Configuration Option Reference (CMake)
Formats | Description | Default | Introduced | Removed |
---|---|---|---|---|
BUILD_CONFIG | Use same build options as official releases | |||
CMAKE_BUILD_TYPE | Type of build to produce | RelWithDebInfo | ||
CMAKE_CXX_FLAGS | Flags for C++ Compiler | |||
CMAKE_C_FLAGS | Flags for C Compiler | |||
CMAKE_INSTALL_PREFIX | Installation base directory | /usr/local/mysql | ||
COMPILATION_COMMENT | Comment about compilation environment | |||
CPACK_MONOLITHIC_INSTALL | Whether package build produces single file | OFF | ||
DEFAULT_CHARSET | The default server character set | latin1 | ||
DEFAULT_COLLATION | The default server collation | latin1_swedish_ci | ||
DISABLE_PSI_COND | Exclude Performance Schema condition instrumentation | OFF | ||
DISABLE_PSI_FILE | Exclude Performance Schema file instrumentation | OFF | ||
DISABLE_PSI_IDLE | Exclude Performance Schema idle instrumentation | OFF | ||
DISABLE_PSI_MEMORY | Exclude Performance Schema memory instrumentation | OFF | ||
DISABLE_PSI_METADATA | Exclude Performance Schema metadata instrumentation | OFF | ||
DISABLE_PSI_MUTEX | Exclude Performance Schema mutex instrumentation | OFF | ||
DISABLE_PSI_PS | Exclude the performance schema prepared statements | OFF | ||
DISABLE_PSI_RWLOCK | Exclude Performance Schema rwlock instrumentation | OFF | ||
DISABLE_PSI_SOCKET | Exclude Performance Schema socket instrumentation | OFF | ||
DISABLE_PSI_SP | Exclude Performance Schema stored program instrumentation | OFF | ||
DISABLE_PSI_STAGE | Exclude Performance Schema stage instrumentation | OFF | ||
DISABLE_PSI_STATEMENT | Exclude Performance Schema statement instrumentation | OFF | ||
DISABLE_PSI_STATEMENT_DIGEST | Exclude Performance Schema statements_digest instrumentation | OFF | ||
DISABLE_PSI_TABLE | Exclude Performance Schema table instrumentation | OFF | ||
DISABLE_PSI_THREAD | Exclude the performance schema thread instrumentation | OFF | ||
DISABLE_PSI_TRANSACTION | Exclude the performance schema transaction instrumentation | OFF | ||
DOWNLOAD_BOOST | Whether to download the Boost library | OFF | ||
DOWNLOAD_BOOST_TIMEOUT | Timeout in seconds for downloading the Boost library | 600 | ||
ENABLED_LOCAL_INFILE | Whether to enable LOCAL for LOAD DATA | OFF | ||
ENABLED_PROFILING | Whether to enable query profiling code | ON | ||
ENABLE_DOWNLOADS | Whether to download optional files | OFF | ||
ENABLE_DTRACE | Whether to include DTrace support | |||
ENABLE_GCOV | Whether to include gcov support | |||
ENABLE_GPROF | Enable gprof (optimized Linux builds only) | OFF | ||
FORCE_UNSUPPORTED_COMPILER | Whether to permit unsupported compilers | OFF | ||
IGNORE_AIO_CHECK | With -DBUILD_CONFIG=mysql_release, ignore libaio check | OFF | ||
INSTALL_BINDIR | User executables directory | PREFIX/bin | ||
INSTALL_DOCDIR | Documentation directory | PREFIX/docs | ||
INSTALL_DOCREADMEDIR | README file directory | PREFIX | ||
INSTALL_INCLUDEDIR | Header file directory | PREFIX/include | ||
INSTALL_INFODIR | Info file directory | PREFIX/docs | ||
INSTALL_LAYOUT | Select predefined installation layout | STANDALONE | ||
INSTALL_LIBDIR | Library file directory | PREFIX/lib | ||
INSTALL_MANDIR | Manual page directory | PREFIX/man | ||
INSTALL_MYSQLKEYRINGDIR | Directory for keyring_file plugin data file | platform specific | 5.7.11 | |
INSTALL_MYSQLSHAREDIR | Shared data directory | PREFIX/share | ||
INSTALL_MYSQLTESTDIR | mysql-test directory | PREFIX/mysql-test | ||
INSTALL_PKGCONFIGDIR | Directory for mysqlclient.pc pkg-config file | INSTALL_LIBDIR/pkgconfig | ||
INSTALL_PLUGINDIR | Plugin directory | PREFIX/lib/plugin | ||
INSTALL_SBINDIR | Server executable directory | PREFIX/bin | ||
INSTALL_SCRIPTDIR | Scripts directory | PREFIX/scripts | ||
INSTALL_SECURE_FILE_PRIVDIR | secure_file_priv default value | platform specific | ||
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR | secure_file_priv default value for libmysqld | |||
INSTALL_SHAREDIR | aclocal/mysql.m4 installation directory | PREFIX/share | ||
INSTALL_SUPPORTFILESDIR | Extra support files directory | PREFIX/support-files | ||
MAX_INDEXES | Maximum indexes per table | 64 | ||
MEMCACHED_HOME | Path to memcached; obsolete | [none] | 5.7.33 | |
MUTEX_TYPE | InnoDB mutex type | event | ||
MYSQLX_TCP_PORT | TCP/IP port number used by X Plugin | 33060 | 5.7.17 | |
MYSQLX_UNIX_ADDR | Unix socket file used by X Plugin | /tmp/mysqlx.sock | 5.7.15 | |
MYSQL_DATADIR | Data directory | |||
MYSQL_MAINTAINER_MODE | Whether to enable MySQL maintainer-specific development environment | OFF | ||
MYSQL_PROJECT_NAME | Windows/macOS project name | MySQL | ||
MYSQL_TCP_PORT | TCP/IP port number | 3306 | ||
MYSQL_UNIX_ADDR | Unix socket file | /tmp/mysql.sock | ||
ODBC_INCLUDES | ODBC includes directory | |||
ODBC_LIB_DIR | ODBC library directory | |||
OPTIMIZER_TRACE | Whether to support optimizer tracing | |||
REPRODUCIBLE_BUILD | Take extra care to create a build result independent of build location and time | 5.7.19 | ||
SUNPRO_CXX_LIBRARY | Client link library on Solaris 10+ | |||
SYSCONFDIR | Option file directory | |||
SYSTEMD_PID_DIR | Directory for PID file under systemd | /var/run/mysqld | ||
SYSTEMD_SERVICE_NAME | Name of MySQL service under systemd | mysqld | ||
TMPDIR | tmpdir default value | |||
WIN_DEBUG_NO_INLINE | Whether to disable function inlining | OFF | ||
WITHOUT_SERVER | Do not build the server; internal use only | OFF | ||
WITHOUT_xxx_STORAGE_ENGINE | Exclude storage engine xxx from build | |||
WITH_ASAN | Enable AddressSanitizer | OFF | ||
WITH_ASAN_SCOPE | Enable AddressSanitizer -fsanitize-address-use-after-scope Clang flag | OFF | 5.7.21 | |
WITH_AUTHENTICATION_LDAP | Whether to report error if LDAP authentication plugins cannot be built | OFF | 5.7.19 | |
WITH_AUTHENTICATION_PAM | Build PAM authentication plugin | OFF | ||
WITH_AWS_SDK | Location of Amazon Web Services software development kit | 5.7.19 | ||
WITH_BOOST | The location of the Boost library sources | |||
WITH_BUNDLED_LIBEVENT | Use bundled libevent when building ndbmemcache; obsolete | ON | 5.7.33 | |
WITH_BUNDLED_MEMCACHED | Use bundled memcached when building ndbmemcache; obsolete | ON | 5.7.33 | |
WITH_CLASSPATH | Classpath to use when building MySQL Cluster Connector for Java. Default is an empty string. |
| ||
WITH_CLIENT_PROTOCOL_TRACING | Build client-side protocol tracing framework | ON | ||
WITH_CURL | Location of curl library | 5.7.19 | ||
WITH_DEBUG | Whether to include debugging support | OFF | ||
WITH_DEFAULT_COMPILER_OPTIONS | Whether to use default compiler options | ON | ||
WITH_DEFAULT_FEATURE_SET | Whether to use default feature set | ON | ||
WITH_EDITLINE | Which libedit/editline library to use | bundled | ||
WITH_EMBEDDED_SERVER | Whether to build embedded server | OFF | ||
WITH_EMBEDDED_SHARED_LIBRARY | Whether to build a shared embedded server library | OFF | ||
WITH_ERROR_INSERT | Enable error injection in the NDB storage engine. Should not be used for building binaries intended for production. | OFF | ||
WITH_EXTRA_CHARSETS | Which extra character sets to include | all | ||
WITH_GMOCK | Path to googlemock distribution | |||
WITH_INNODB_EXTRA_DEBUG | Whether to include extra debugging support for InnoDB. | OFF | ||
WITH_INNODB_MEMCACHED | Whether to generate memcached shared libraries. | OFF | ||
WITH_KEYRING_TEST | Build the keyring test program | OFF | 5.7.11 | |
WITH_LDAP | Internal use only | 5.7.29 | ||
WITH_LIBEVENT | Which libevent library to use | bundled | ||
WITH_LIBWRAP | Whether to include libwrap (TCP wrappers) support | OFF | ||
WITH_LZ4 | Type of LZ4 library support | bundled | 5.7.14 | |
WITH_MECAB | Compiles MeCab | |||
WITH_MSAN | Enable MemorySanitizer | OFF | ||
WITH_MSCRT_DEBUG | Enable Visual Studio CRT memory leak tracing | OFF | ||
WITH_NDBAPI_EXAMPLES | Build API example programs. | OFF | ||
WITH_NDBCLUSTER | NDB 8.0.30 and earlier: Build NDB storage engine. NDB 8.0.31 and later: Deprecated; use WITH_NDB instead | ON | ||
WITH_NDBCLUSTER_STORAGE_ENGINE | Prior to NDB 8.0.31, this was for internal use only. NDB 8.0.31 and later: toggles (only) inclusion of NDBCLUSTER storage engine | ON | ||
WITH_NDBMTD | Build multithreaded data node binary | ON | ||
WITH_NDB_BINLOG | Enable binary logging by default by mysqld. | ON | ||
WITH_NDB_DEBUG | Produce a debug build for testing or troubleshooting. | OFF | ||
WITH_NDB_JAVA | Enable building of Java and ClusterJ support. Enabled by default. Supported in MySQL Cluster only. | ON | ||
WITH_NDB_PORT | Default port used by a management server built with this option. If this option was not used to build it, the management server's default port is 1186. | [none] | ||
WITH_NDB_TEST | Include NDB API test programs. | OFF | ||
WITH_NUMA | Set NUMA memory allocation policy | 5.7.17 | ||
WITH_PROTOBUF | Which Protocol Buffers package to use | bundled | 5.7.12 | |
WITH_RAPID | Whether to build rapid development cycle plugins | ON | 5.7.12 | |
WITH_SASL | Internal use only | 5.7.29 | ||
WITH_SSL | Type of SSL support | system | ||
WITH_SYSTEMD | Enable installation of systemd support files | OFF | ||
WITH_TEST_TRACE_PLUGIN | Build test protocol trace plugin | OFF | ||
WITH_UBSAN | Enable Undefined Behavior Sanitizer | OFF | ||
WITH_UNIT_TESTS | Compile MySQL with unit tests | ON | ||
WITH_UNIXODBC | Enable unixODBC support | OFF | ||
WITH_VALGRIND | Whether to compile in Valgrind header files | OFF | ||
WITH_ZLIB | Type of zlib support | bundled | ||
WITH_xxx_STORAGE_ENGINE | Compile storage engine xxx statically into server |
4. 編譯, 安裝, 設置環境變量
???????? 1. make編譯
make -j$(nproc) # 使用所有CPU核心
???????? 2. make安裝
sudo make install
???????? 3. 設置環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
創建配置 mysqld 服務
???????? 1. 創建目錄設置目錄權限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
???????? 2. 初始化數據庫
???? ???? ???? root無密碼初始化
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
???? ???? ???? root隨機密碼初始化
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
???????? 3. 創建配置文件
sudo tee /etc/my.cnf <<-'EOFxxxXXXeof---foeXXXxxxFOE'
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock ### 默認: socket=/tmp/mysql.sock
bind-address = *
port = 3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid[client]
socket = /var/run/mysqld/mysqld.sock ### 默認: socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOFxxxXXXeof---foeXXXxxxFOE
???? ???? ???? 4. 創建啟動服務
???? ???? ???? ???? 創建啟動服務方式1: 創建 systemd 服務
創建 systemd 服務
sudo cat > /etc/systemd/system/mysqld.service <<-'EOFxxxXXXeof---foeXXXxxxFOE'[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.targetEOFxxxXXXeof---foeXXXxxxFOE
啟動啟用服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
移除服務
sudo systemctl stop mysqld
sudo systemctl disable mysqld --now
sudo rm -rf /etc/systemd/system/mysqld.service
sudo systemctl daemon-reload
???? ???? ???? ???? 創建啟動服務方式2: 用 SysV init 啟動腳本方式創建服務
/usr/local/mysql/support-files/mysql.server
是現成的 SysV init 啟動腳本
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld
啟動
sudo /etc/init.d/mysqld start
設置開機自啟
sudo update-rc.d mysqld defaults
Debian10已支持用 systemctl 啟動啟用 /etc/init.d 的 服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld --now
講解:
/etc/systemd/system
和 /etc/init.d
是 Linux 系統中服務管理的兩種不同機制的核心目錄,分別對應 systemd 和 SysVinit 初始化系統。以下是詳細對比:
???????? 1. 所屬初始化系統
目錄 | 初始化系統 | 出現時間 | 現代發行版支持 |
---|---|---|---|
/etc/init.d | SysVinit | 傳統系統(1980s) | 逐步淘汰(兼容模式保留) |
/etc/systemd/system | systemd | 2010年后 | 主流默認(如 Ubuntu 16.04+、CentOS 7+) |
???????? 2. 文件類型與結構
目錄 | 文件類型 | 文件示例 | 配置結構 |
---|---|---|---|
/etc/init.d | Shell 腳本 | nginx (可執行腳本) | 單一腳本文件,包含啟動/停止邏輯 |
/etc/systemd/system | 單元文件(文本) | nginx.service (配置文件) | 結構化配置([Unit] 、[Service] 等節) |
-
/etc/init.d/nginx
腳本片段:start() {/usr/sbin/nginx -c /etc/nginx/nginx.conf } stop() {killproc nginx }
-
/etc/systemd/system/nginx.service
單元文件:[Unit] Description=NGINX Web Server After=network.target[Service] ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID Type=forking[Install] WantedBy=multi-user.target
???????? 3. 管理命令對比
操作 | SysVinit (/etc/init.d ) | systemd (/etc/systemd/system ) |
---|---|---|
啟動服務 | /etc/init.d/nginx start | systemctl start nginx |
停止服務 | /etc/init.d/nginx stop | systemctl stop nginx |
狀態查看 | /etc/init.d/nginx status | systemctl status nginx |
開機自啟 | chkconfig nginx on (Red Hat) | systemctl enable nginx |
update-rc.d nginx defaults (Debian) |
???????? 4. 依賴管理與啟動順序
特性 | /etc/init.d (SysVinit) | /etc/systemd/system (systemd) |
---|---|---|
依賴管理 | 通過腳本中的順序號(如 S20nginx )粗略控制 | 精確聲明(After= , Requires= ) |
并行啟動 | ? 串行啟動(按數字順序) | ? 支持并行,加快啟動速度 |
資源控制 | ? 不支持 | ? 支持(CPU/內存限制、安全沙盒等) |
???????? 5. 配置覆蓋與擴展
目錄 | 擴展機制 | 優先級 |
---|---|---|
/etc/init.d | 直接修改腳本(風險高) | 無覆蓋機制 |
/etc/systemd/system | 支持以下擴展: 1. 自定義單元文件(覆蓋默認配置) 2. nginx.service.d/override.conf (片段覆蓋) | 優先級高于系統默認單元文件(/usr/lib/systemd/system/ ) |
???????? 6. 日志管理
目錄 | 日志系統 | 查看日志命令 |
---|---|---|
/etc/init.d | syslog(分散) | grep nginx /var/log/syslog |
/etc/systemd/system | journald(集中) | journalctl -u nginx |
???????? 7. 兼容性與共存
- systemd 兼容 SysVinit:
當 systemd 檢測到/etc/init.d/
中的腳本時,會自動生成對應的.service
單元文件(名稱如sysvinit-nginx.service
),但功能有限(依賴管理弱)。 - 避免混用:
修改服務配置時,不要同時使用兩種目錄(例如:避免在/etc/init.d
修改腳本的同時在/etc/systemd/system
覆蓋配置)。
???????? 總結:如何選擇?
場景 | 推薦目錄 |
---|---|
現代 Linux 發行版(≥2015年) | ? /etc/systemd/system |
傳統系統或兼容舊腳本 | ?? /etc/init.d (臨時過渡) |
自定義服務配置 | ? /etc/systemd/system (優先使用 systemctl edit nginx 生成覆蓋片段) |
最佳實踐:
- 新服務配置始終通過 systemd 單元文件(
.service
)管理。- 舊腳本遷移到 systemd 時,將其轉換為單元文件以獲得完整功能。
- 調試時優先使用
journalctl -u service_name
查看日志。
1?? 參考 1
在 Debian 10 上編譯安裝 MySQL 5.7.44 需要仔細執行以下步驟,我將提供完整指南并優化關鍵環節:
準備工作
???????? 1. 安裝編譯依賴
sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev \
pkg-config libreadline-dev zlib1g-dev bison wget libaio-dev \
gcc g++ libjson-perl libnuma-dev
???????? 2. 創建 MySQL 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
???????? 3. 安裝 Boost 庫 (必需)
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_59_0.tar.gz
sudo mv boost_1_59_0 /usr/local/boost
編譯安裝過程
???????? 1. 下載源碼
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
???????? 2. 配置編譯選項 (關鍵優化)
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DENABLED_LOCAL_INFILE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_unicode_ci \-DENABLE_DOWNLOADS=1 \-DWITH_BOOST=/usr/local/boost \-DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_CXX_FLAGS="-O3 -fno-omit-frame-pointer" \-DCMAKE_C_FLAGS="-O3 -fno-omit-frame-pointer"
???????? 3. 編譯并安裝 (使用多核加速)
make -j$(nproc) # 使用所有CPU核心
sudo make install
系統配置
???????? 1. 設置目錄權限
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo mkdir -p /var/log/mysql /var/run/mysqld
sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
???????? 2. 初始化數據庫
sudo bin/mysqld --initialize-insecure --user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
???????? 3. 創建配置文件
sudo cp support-files/my-default.cnf /etc/my.cnf
sudo nano /etc/my.cnf
添加以下內容:
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock
port = 3306
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid[client]
socket = /var/run/mysqld/mysqld.sock
服務管理
???????? 1. 創建 systemd 服務
sudo nano /etc/systemd/system/mysqld.service
內容如下:
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
PrivateTmp=true[Install]
WantedBy=multi-user.target
???????? 2. 啟動服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
初始設置
???????? 1. 設置環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile
???????? 2. 設置 root 密碼
mysql -u root --skip-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourSecurePassword';
FLUSH PRIVILEGES;
EXIT;
???????? 3. 安全加固
mysql_secure_installation
按提示完成安全設置
驗證安裝
mysql --version
# 輸出: mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using EditLine wrappersudo systemctl status mysqld
故障排除指南
???????? 1. 編譯錯誤處理
# 清除緩存后重新配置
rm CMakeCache.txt
cmake .. [原參數]
???????? 2. 啟動失敗檢查
sudo tail -f /var/log/mysql/error.log
???????? 3. 常見錯誤解決
- 缺少 libtinfo:
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5
- 無法創建 PID 文件:
sudo chown -R mysql:mysql /var/run/mysqld
???????? 4. 性能優化建議
在 /etc/my.cnf 添加:
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
thread_cache_size = 10
query_cache_size = 64M
安全注意事項
- 生產環境不要使用
--initialize-insecure
- 初始化后立即修改 root 密碼
- 定期備份數據和配置文件
- 啟用防火墻限制訪問:
sudo ufw allow 3306/tcp
通過以上步驟,您可以在 Debian 10 上成功編譯安裝高性能的 MySQL 5.7.44。編譯過程可能需要 30-60 分鐘(取決于硬件配置),請確保系統有足夠內存(建議至少 2GB)。
在Debian 10上編譯安裝MySQL 5.7.44需要執行以下步驟。注意:編譯過程耗時較長(1小時以上)且需要充足內存(建議≥2GB),生產環境建議使用官方二進制包。
1. 安裝依賴
sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev libreadline-dev zlib1g-dev
2. 創建MySQL用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3. 下載源碼
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
4. 配置編譯選項
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
5. 編譯和安裝
make -j$(nproc) # 使用所有CPU核心編譯
sudo make install
6. 初始化數據庫
cd /usr/local/mysql
sudo mkdir mysql-files
sudo chown mysql:mysql mysql-files
sudo chmod 750 mysql-files# 初始化數據目錄(記錄輸出的臨時root密碼)
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data# 生成SSL證書
sudo bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
7. 配置啟動腳本
sudo cp support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld
8. 配置環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee /etc/profile.d/mysql.sh
source /etc/profile
9. 啟動MySQL服務
sudo /etc/init.d/mysqld start
10. 修改root密碼
# 使用初始化時的臨時密碼登錄
mysql -u root -p# 在MySQL命令行中修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
FLUSH PRIVILEGES;
11. 設置開機自啟
sudo update-rc.d mysqld defaults
驗證安裝
mysqladmin --version
sudo netstat -tulnp | grep mysqld
常見問題解決
-
編譯失敗:
- 檢查依賴是否完整:
sudo apt install libboost-dev
- 清除構建緩存:
rm CMakeCache.txt && make clean
- 檢查依賴是否完整:
-
啟動失敗:
- 檢查錯誤日志:
sudo tail -f /usr/local/mysql/data/*.err
- 確認端口未被占用:
sudo lsof -i :3306
- 檢查錯誤日志:
-
連接問題:
- 檢查socket路徑:
/tmp/mysql.sock
- 配置文件位置:
/etc/my.cnf
- 檢查socket路徑:
重要提示:編譯安裝適合特定定制需求,常規使用建議通過官方APT源安裝:
sudo apt install mysql-server-5.7
2?? 參考 2
Debian10編譯安裝MySQL5.7.44詳細步驟
???????? 一、環境準備
???? ???? ???? 1. 更新系統并安裝依賴
sudo apt update
sudo apt install -y \gcc g++ cmake make \libncurses5-dev libssl-dev \libboost-dev bison libaio-dev \libreadline-dev zlib1g-dev \pkg-config libsystemd-dev
???????? 二、下載MySQL源碼
???? ???? ???? 1. 下載源碼包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
???? ???? ???? 2. 驗證MD5校驗值(可選)
從MySQL官方下載頁面獲取對應平臺的MD5值,執行:
md5sum mysql-5.7.44.tar.gz
對比輸出與官方值是否一致。
???????? 三、編譯配置
???? ???? ???? 1. 創建構建目錄并配置
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_TCP_PORT=3306 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DENABLE_DOWNLOADS=1 \-DDOWNLOAD_BOOST=1 \-DWITH_BOOST=/usr/local/include
???????? 四、編譯與安裝
???? ???? ???? 1. 編譯并安裝
make -j$(nproc) # 多核編譯加速
sudo make install
???????? 五、初始化配置
???? ???? ???? 1. 創建MySQL用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
???? ???? ???? 2. 初始化數據庫
cd /usr/local/mysql
sudo mkdir -p data
sudo chown -R mysql:mysql .
sudo bin/mysqld --initialize --user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
- 記錄臨時密碼:初始化完成后,控制臺會輸出臨時root密碼,如:
A temporary password is generated for root@localhost: XXXXXXXXX
???????? 六、啟動服務
???? ???? ???? 1. 配置開機啟動
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo systemctl start mysql
sudo systemctl enable mysql
???? ???? ???? 2. 驗證服務狀態
sudo systemctl status mysql
???????? 七、安全配置
???? ???? ???? 1. 運行安全腳本
sudo bin/mysql_secure_installation
- 步驟說明:
- 輸入臨時root密碼。
- 設置新root密碼(建議復雜密碼)。
- 移除匿名用戶。
- 禁止root遠程登錄。
- 移除測試數據庫。
- 重新加載權限表。
???????? 八、環境變量配置
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
???????? 九、驗證安裝
???? ???? ???? 1. 檢查MySQL版本
mysql --version
輸出應類似:
mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64)
???? ???? ???? 2. 登錄MySQL
mysql -u root -p
輸入設置的root密碼,成功登錄后執行:
SELECT VERSION();
???????? 十、卸載MySQL
sudo apt purge mysql-server mysql-client mysql-common
sudo rm -rf /etc/mysql /var/lib/mysql /usr/local/mysql
sudo apt autoremove
通過以上步驟,您可以在Debian10系統上成功編譯安裝MySQL5.7.44,并進行基礎配置和安全加固。
在 Debian 10 系統上編譯安裝 MySQL 5.7.44,可按照以下步驟進行,此方法能靈活定制參數,但需處理依賴和編譯配置:
一、準備工作
-
更新系統包
sudo apt update && sudo apt upgrade -y
-
安裝編譯依賴
sudo apt install -y gcc g++ cmake make libncurses5-dev libssl-dev libboost-dev bison libaio-dev libreadline-dev zlib1g-dev pkg-config systemd-dev
- 說明:
libncurses5-dev
(終端界面庫)、libssl-dev
(SSL支持)、libboost-dev
(Boost庫)、bison
(語法分析器)、libaio-dev
(異步I/O支持)等為編譯必需依賴。
- 說明:
-
卸載沖突的 MariaDB(如存在)
sudo apt purge mariadb-* -y sudo rm -rf /var/lib/mysql/
二、下載源碼
-
獲取 MySQL 5.7.44 源碼
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz tar -zxvf mysql-5.7.44.tar.gz cd mysql-5.7.44
- 備用方案:若鏈接失效,訪問 MySQL Archives 手動下載。
-
選擇 Boost 庫版本(可選)
- 自帶 Boost 的版本:直接下載
mysql-boost-5.7.44.tar.gz
,解壓后無需額外處理 Boost。 - 手動指定 Boost:下載 Boost 1.59.0,解壓至
/usr/local/boost_1_59_0
。
- 自帶 Boost 的版本:直接下載
三、編譯配置
-
創建構建目錄并配置參數
mkdir build && cd build cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_TCP_PORT=3306 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DENABLE_DOWNLOADS=1 \-DWITH_BOOST=/path/to/boost_1_59_0 # 若手動指定 Boost 路徑
- 關鍵參數說明:
-DCMAKE_INSTALL_PREFIX
:MySQL 安裝目錄。-DMYSQL_DATADIR
:數據存儲目錄。-DWITH_INNOBASE_STORAGE_ENGINE=1
:啟用 InnoDB 存儲引擎。-DDEFAULT_CHARSET=utf8mb4
:支持完整的 Unicode 字符集(包括表情符號)。
- 關鍵參數說明:
-
解決常見配置錯誤
- 錯誤示例:
CMake Error at cmake/boost.cmake:XXX (message): Boost XXX library not found
解決方案:確保-DWITH_BOOST
路徑正確,或使用-DDOWNLOAD_BOOST=1
自動下載(僅限無 Boost 版本)。 - 錯誤示例:
Could NOT find OpenSSL
解決方案:安裝libssl-dev
并重新運行cmake
。
- 錯誤示例:
四、編譯與安裝
-
使用多核編譯加速
make -j$(nproc) # 根據 CPU 核心數自動調整線程數 sudo make install
-
驗證安裝文件
ls /usr/local/mysql/bin/ # 應包含 mysqld、mysql 等可執行文件
五、初始化與配置
-
創建 MySQL 用戶和組
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
初始化數據庫
cd /usr/local/mysql sudo mkdir -p data sudo chown -R mysql:mysql . sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 記錄臨時密碼:初始化輸出中會顯示臨時 root 密碼(如
A temporary password is generated for root@localhost: xxxxxx
)。
- 記錄臨時密碼:初始化輸出中會顯示臨時 root 密碼(如
-
配置 my.cnf 文件
sudo cp support-files/my-default.cnf /etc/my.cnf sudo nano /etc/my.cnf
- 示例配置:
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock port=3306 character-set-server=utf8mb4
- 示例配置:
六、啟動與驗證
-
啟動 MySQL 服務
sudo cp support-files/mysql.server /etc/init.d/mysql sudo chmod +x /etc/init.d/mysql sudo service mysql start
- 推薦方案:配置 systemd 服務(更可靠):
sudo nano /etc/systemd/system/mysql.service
[Unit] Description=MySQL Server After=network.target[Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf Restart=on-failure[Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql
- 推薦方案:配置 systemd 服務(更可靠):
-
修改 root 密碼
/usr/local/mysql/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼'; FLUSH PRIVILEGES;
-
測試連接
/usr/local/mysql/bin/mysql -u root -p -e "SHOW VARIABLES LIKE 'version%';"
- 預期輸出:
+-------------------------+---------------------+ | Variable_name | Value | +-------------------------+---------------------+ | version | 5.7.44 | | version_comment | MySQL Community Server | +-------------------------+---------------------+
- 預期輸出:
七、常見問題解決
-
權限錯誤
- 現象:
mysqld: Can't create/write to file '/usr/local/mysql/data/xxx'
- 解決方案:確保
/usr/local/mysql
及其子目錄屬主為mysql:mysql
:sudo chown -R mysql:mysql /usr/local/mysql
- 現象:
-
臨時密碼丟失
- 解決方案:刪除數據目錄并重新初始化:
sudo rm -rf /usr/local/mysql/data sudo bin/mysqld --initialize --user=mysql
- 解決方案:刪除數據目錄并重新初始化:
-
依賴缺失
- 現象:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND
- 解決方案:根據錯誤提示安裝對應依賴(如
libgmp-dev
、flex
等)。
- 現象:
在 Debian 10 系統上編譯安裝 MySQL 5.7.44,可按照以下步驟進行,該過程涉及依賴安裝、源碼下載、編譯配置、初始化及服務配置等環節:
一、安裝依賴庫
-
更新系統包索引:
sudo apt update sudo apt upgrade -y
-
安裝編譯工具和依賴庫:
sudo apt install -y gcc g++ cmake make libncurses5-dev libssl-dev libboost-dev bison libaio-dev libreadline-dev zlib1g-dev
二、下載 MySQL 5.7.44 源碼
-
訪問 MySQL 官方下載頁面:
MySQL 官方下載頁面 -
下載 MySQL 5.7.44 源碼包:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
-
解壓源碼包:
tar -zxvf mysql-5.7.44.tar.gz cd mysql-5.7.44
三、編譯與安裝
-
創建構建目錄并進入:
mkdir build cd build
-
配置編譯參數:
cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DENABLED_LOCAL_INFILE=1 \ -DMYSQL_TCP_PORT=3306 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DENABLE_DOWNLOADS=1 \ -DWITH_BOOST=../boost/boost_1_59_0 # 如果源碼包自帶 boost 則無需指定
注意:
- 如果使用無 boost 版本的源碼包,需要添加
-DDOWNLOAD_BOOST=1
參數,讓 CMake 自動下載 boost 1.59.0 版本。 - 確保
/usr/local/mysql
及子目錄的屬主為mysql:mysql
(后續步驟會創建該用戶和組)。
- 如果使用無 boost 版本的源碼包,需要添加
-
編譯并安裝:
make -j$(nproc) # 使用多核編譯,根據 CPU 核心數調整 sudo make install # 安裝到指定目錄
四、初始化與配置
-
創建 MySQL 用戶和組:
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
初始化數據庫:
cd /usr/local/mysql sudo mkdir -p data sudo chown -R mysql:mysql . sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意:
- 初始化完成后,記錄輸出的臨時 root 密碼(類似
A temporary password is generated for root@localhost: xxxxxx
)。 - 如果未記錄密碼,可刪除數據目錄并重新初始化:
sudo rm -rf /usr/local/mysql/data sudo bin/mysqld --initialize --user=mysql
- 初始化完成后,記錄輸出的臨時 root 密碼(類似
-
配置 my.cnf 文件:
sudo cp support-files/my-default.cnf /etc/my.cnf sudo nano /etc/my.cnf # 按需修改配置(如字符集、內存參數等)
示例配置:
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock port=3306 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci
五、啟動與使用
-
啟動 MySQL 服務:
sudo cp support-files/mysql.server /etc/init.d/mysql sudo chmod +x /etc/init.d/mysql sudo service mysql start
推薦:配置 systemd 服務(更現代的管理方式):
sudo nano /etc/systemd/system/mysql.service
輸入以下內容:
[Unit] Description=MySQL Server After=network.target[Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf Restart=on-failure[Install] WantedBy=multi-user.target
啟動服務:
sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql
-
修改 root 密碼:
/usr/local/mysql/bin/mysql -u root -p # 輸入初始化時的臨時密碼
在 MySQL 命令行中執行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼'; FLUSH PRIVILEGES;
-
設置環境變量:
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc source ~/.bashrc
六、常見問題解決
-
編譯失敗:
- 檢查依賴是否完整,重新執行
cmake
前清理緩存:make clean rm -f CMakeCache.txt
- 確保
/usr/local/mysql
及子目錄的屬主為mysql:mysql
:sudo chown -R mysql:mysql /usr/local/mysql
- 檢查依賴是否完整,重新執行
-
臨時密碼丟失:
- 刪除數據目錄并重新初始化(參考步驟四.2)。
-
權限問題:
- 確保 MySQL 數據目錄(
/usr/local/mysql/data
)的屬主為mysql:mysql
:sudo chown -R mysql:mysql /usr/local/mysql/data
- 確保 MySQL 數據目錄(
3?? 參考 3
以下是在 Debian 10 系統上通過源碼編譯安裝 MySQL 5.7.44 的完整步驟,結合依賴管理、編譯優化和初始化配置的關鍵要點,并附常見問題解決方案:
📦 一、安裝依賴與環境準備
-
安裝編譯依賴
確保系統已安裝必要的開發工具和庫:sudo apt update sudo apt install -y gcc g++ cmake make libncurses5-dev libssl-dev libaio-dev \libreadline-dev zlib1g-dev bison libboost-dev pkg-config
關鍵說明:
libboost-dev
是 MySQL 5.7 編譯的必需依賴,需確保版本匹配(官方要求 Boost 1.59.0)。- 若安裝時提示
libmecab2
缺失,需額外安裝:sudo apt install libmecab2
。
-
下載源碼(推薦自帶 Boost 版本)
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz tar -zxvf mysql-boost-5.7.44.tar.gz cd mysql-5.7.44
注意:若官網鏈接失效,需從 https://downloads.mysql.com/archives/community/ 手動下載。
?? 二、編譯配置與安裝
-
配置編譯參數
在源碼目錄創建build
并配置 CMake:mkdir build cd build cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 安裝根目錄-DMYSQL_DATADIR=/usr/local/mysql/data \ # 數據存儲路徑-DSYSCONFDIR=/etc \ # 配置文件目錄-DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 啟用InnoDB引擎-DWITH_SSL=system \ # 使用系統OpenSSL-DWITH_ZLIB=system \ # 使用系統Zlib-DDEFAULT_CHARSET=utf8mb4 \ # 默認字符集-DDEFAULT_COLLATION=utf8mb4_general_ci \ # 默認排序規則-DWITH_BOOST=../boost/boost_1_59_0 # 指定自帶Boost路徑
參數說明:
- 若使用無 Boost 的源碼包,需添加
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/include
(自動下載 Boost 1.59.0)。
- 若使用無 Boost 的源碼包,需添加
-
編譯與安裝
啟用多核編譯加速(根據 CPU 核心數調整-j
參數):make -j$(nproc) # 編譯(耗時約 30-60 分鐘) sudo make install # 安裝到指定目錄
🔧 三、初始化與系統配置
-
創建系統用戶和組
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
初始化數據庫
創建數據目錄并初始化(記錄輸出的臨時 root 密碼):sudo mkdir -p /usr/local/mysql/data sudo chown -R mysql:mysql /usr/local/mysql sudo /usr/local/mysql/bin/mysqld --initialize \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data
注意:
- 若需無密碼初始化(不推薦),使用
--initialize-insecure
。 - 臨時密碼格式:
A temporary password is generated for root@localhost: xxxxxx
。
- 若需無密碼初始化(不推薦),使用
-
配置 systemd 服務(推薦)
創建服務文件/etc/systemd/system/mysql.service
:[Unit] Description=MySQL Server After=network.target[Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf Restart=on-failure[Install] WantedBy=multi-user.target
啟動服務:
sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql
-
修改 root 密碼
使用臨時密碼登錄并更新:/usr/local/mysql/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼'; FLUSH PRIVILEGES;
🔒 四、安全加固與優化
-
運行安全腳本
刪除匿名用戶、禁止遠程 root 登錄等:sudo /usr/local/mysql/bin/mysql_secure_installation
-
配置環境變量
將 MySQL 二進制路徑加入全局PATH
:echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile source /etc/profile
?? 五、常見問題解決
問題 | 解決方案 |
---|---|
CMake 配置失敗 | 刪除 build/CMakeCache.txt 后重試,檢查依賴完整性(如 libtinfo-dev )。 |
初始化權限錯誤 | 確保 /usr/local/mysql 及子目錄屬主為 mysql:mysql 。 |
臨時密碼丟失 | 刪除數據目錄并重新初始化:sudo rm -rf /usr/local/mysql/data 。 |
服務啟動失敗 | 檢查日志 /var/log/mysql/error.log ,確認 my.cnf 中的路徑配置正確。 |
內存不足導致編譯中斷 | 添加交換空間或減少編譯線程數(如 make -j2 )。 |
💎 總結建議
- 編譯優勢:源碼安裝適合需深度定制(如特定存儲引擎、字符集優化)的場景,但耗時較長。
- 替代方案:若無定制需求,推薦使用 APT 倉庫安裝(快速安裝最新 5.7.x):
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb # 選擇 MySQL 5.7 sudo apt update sudo apt install mysql-server-5.7
- 驗證安裝:
mysql -V # 輸出示例:mysql Ver 14.14 Distrib 5.7.44 systemctl status mysql
完成安裝后,建議通過
mysql_secure_installation
加固安全,并配置防火墻限制 3306 端口訪問。
以下是根據多個可靠來源整理的 Debian 10 編譯安裝 MySQL 5.7.44 的完整指南,涵蓋依賴管理、編譯配置、服務部署等全流程關鍵步驟。此方法適用于需要高度定制化或嚴格版本控制的場景。
🔧 一、準備工作:系統環境與依賴
-
更新系統并安裝編譯工具
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake libssl-dev libncurses5-dev libaio1 libaio-dev bison libperl-dev zlib1g-dev pkg-config wget
-
創建專用用戶與目錄
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql sudo mkdir -p /opt/software/mysql/{data,build,package} sudo chown -R mysql:mysql /opt/software/mysql
-
下載源碼與 Boost 依賴
MySQL 5.7.44 需搭配 Boost 1.59.0:cd /opt/software/mysql/package wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.44.tar.gz tar -zxvf mysql-boost-5.7.44.tar.gz -C ../ # 解壓至 /opt/software/mysql/mysql-5.7.44
?? 二、編譯配置與安裝
-
進入編譯目錄并生成 Makefile
cd /opt/software/mysql/build cmake ../mysql-5.7.44 \-DCMAKE_INSTALL_PREFIX=/opt/software/mysql/mysql \-DMYSQL_DATADIR=/opt/software/mysql/data \-DSYSCONFDIR=/etc \-DMYSQL_TCP_PORT=3306 \-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_SSL=system \-DENABLED_LOCAL_INFILE=1 \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_BOOST=../mysql-5.7.44/boost # 關鍵:指向源碼內的 boost 目錄
注意:若配置失敗,刪除
CMakeCache.txt
后重試。 -
編譯并安裝
make -j$(nproc) # 使用多核加速編譯 sudo make install
編譯時間較長(約 30-60 分鐘),取決于硬件性能。
? 三、初始化與啟動服務
-
初始化數據目錄
cd /opt/software/mysql/mysql/bin sudo ./mysqld --initialize --user=mysql \--basedir=/opt/software/mysql/mysql \--datadir=/opt/software/mysql/data
記錄輸出的臨時 root 密碼(如
[Note] A temporary password is generated for root@localhost: Abc123!
)。 -
配置 systemd 服務
sudo cp ../support-files/mysql.server /etc/init.d/mysql sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql
-
設置環境變量(可選)
echo 'export PATH=/opt/software/mysql/mysql/bin:$PATH' | sudo tee -a /etc/profile source /etc/profile
🔐 四、安全配置與驗證
-
修改 root 密碼
使用臨時密碼登錄并修改:mysql -u root -p # 輸入臨時密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼'; FLUSH PRIVILEGES;
-
運行安全腳本
sudo /opt/software/mysql/mysql/bin/mysql_secure_installation
按提示移除匿名用戶、禁止遠程 root 登錄等。
-
驗證安裝
mysql -V # 輸出:mysql Ver 14.14 Distrib 5.7.44 systemctl status mysql # 確認服務狀態為 active (running)
?? 關鍵問題與注意事項
-
Boost 版本嚴格匹配
MySQL 5.7.44 必須使用 Boost 1.59.0,否則編譯失敗。源碼包mysql-boost-5.7.44.tar.gz
已包含正確版本。 -
依賴缺失處理
- 若報錯
libtinfo.so.5
缺失:sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib64/libtinfo.so.5
- 編譯失敗時檢查日志:
cat /opt/software/mysql/build/CMakeCache.txt | grep "NOT_FOUND"
- 若報錯
-
服務管理
- 自定義配置文件路徑:
/etc/my.cnf
(需手動創建) - 日志定位:
/opt/software/mysql/data/*.err
- 自定義配置文件路徑:
-
安全建議
- 生產環境需限制防火墻訪問:
sudo ufw allow 3306/tcp
- MySQL 5.7 已結束官方支持(EOL),僅建議用于兼容性場景。
- 生產環境需限制防火墻訪問:
總結:編譯安裝可精準控制版本與配置,但復雜度較高。若無需定制,推薦使用 APT 安裝(參考 )。操作前務必備份數據,編譯失敗時可清理
/opt/software/mysql/build
后重試。
在 Debian 10 上通過源碼編譯安裝 MySQL 5.7.44 的完整步驟如下,包含依賴處理、編譯配置及常見問題解決方案:
一、環境準備
???????? 1. 安裝編譯依賴
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake ncurses5 libaio1 wget libssl-dev libmecab2
- 關鍵依賴說明:
libaio1
:異步 I/O 支持ncurses5
:終端交互庫libssl-dev
:SSL/TLS 加密支持libmecab2
:分詞庫(用于全文索引)
???????? 2. 創建專用用戶和目錄
sudo groupadd mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql
sudo mkdir -p /usr/local/mysql/{data,logs,tmp}
sudo chown -R mysql:mysql /usr/local/mysql
二、下載與編譯源碼
???????? 1. 下載 MySQL 5.7.44 源碼包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
???????? 2. 配置編譯參數(關鍵步驟)
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=./boost \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITHOUT_SERVER=OFF # 啟用服務端編譯
- 參數說明:
-DWITH_BOOST
:指定 Boost 庫路徑(需與源碼包內路徑一致)-DWITHOUT_SERVER=OFF
:確保編譯完整服務端程序
???????? 3. 編譯與安裝
make -j$(nproc) # 使用多核加速編譯
sudo make install
- 編譯耗時:約 10-20 分鐘(視硬件性能)
三、初始化與配置
???????? 1. 初始化數據庫
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 記錄臨時密碼:日志文件
/usr/local/mysql/data/error.log
中包含初始密碼(格式:A temporary password is generated for root@localhost: ********
)
???????? 2. 配置系統服務
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo systemctl daemon-reload
sudo systemctl enable mysql
???????? 3. 啟動 MySQL 服務
sudo systemctl start mysql
sudo systemctl status mysql # 檢查運行狀態
四、安全配置
???????? 1. 修改 root 密碼
/usr/local/mysql/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourSecurePassword!';
FLUSH PRIVILEGES;
???????? 2. 運行安全腳本
sudo /usr/local/mysql/bin/mysql_secure_installation
- 操作選項:
- 移除匿名用戶
- 禁止遠程 root 登錄
- 刪除測試數據庫
- 重新加載權限表
五、常見問題解決
???????? 1. 編譯錯誤:找不到 Boost 庫
- 原因:CMake 未正確指向 Boost 路徑
- 解決:重新配置并指定 Boost 目錄:
cmake . -DWITH_BOOST=/path/to/mysql-5.7.44/boost
???????? 2. 初始化失敗:權限問題
- 解決:確保數據目錄權限正確:
sudo chown -R mysql:mysql /usr/local/mysql/data
???????? 3. 啟動時報錯:libtinfo.so.5 缺失
- 解決:創建符號鏈接(Debian 10 默認使用 ncurses6):
sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
???????? 4. 遠程連接被拒絕
- 修改配置文件:編輯
/etc/mysql/my.cnf
,注釋bind-address = 127.0.0.1
- 授權遠程訪問:
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
六、驗證安裝
mysql --version # 應輸出 mysql Ver 14.14 Distrib 5.7.44
mysql -u root -p -e "SELECT VERSION();"
七、卸載與清理(可選)
sudo systemctl stop mysql
sudo rm -rf /usr/local/mysql
sudo rm -f /etc/init.d/mysql
選擇建議
- 生產環境:推薦通過官方 APT 倉庫安裝(搜索結果),自動處理依賴和更新。
- 定制需求:僅當需要修改編譯參數(如啟用 SSL 或調整存儲引擎)時使用源碼安裝。
如需進一步優化(如調整 InnoDB 緩沖池大小),可編輯 /etc/mysql/my.cnf
并重啟服務。
4?? 參考 4
在 Debian 10 上編譯安裝 MySQL 5.7.44 需要手動下載源碼、配置編譯選項并完成安裝。以下是詳細的步驟:
1. 安裝依賴
在編譯 MySQL 之前,需要安裝必要的依賴包:
sudo apt update
sudo apt install -y build-essential cmake libncurses5-dev libssl-dev libaio-dev libnuma-dev
2. 創建 MySQL 用戶和組
為了安全,建議創建一個專用的 mysql
用戶和組來運行 MySQL 服務:
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3. 下載 MySQL 5.7.44 源碼
從 MySQL 官方下載源碼包(需要注冊 MySQL 賬號):
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
如果無法直接下載,可以訪問 MySQL 官網 手動下載。
4. 解壓源碼包
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
5. 創建編譯目錄
mkdir build
cd build
6. 配置編譯選項
使用 cmake
配置編譯選項。以下是一個常見的配置示例:
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/var/lib/mysql \-DSYSCONFDIR=/etc \-DMYSQL_USER=mysql \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_FEDERATED_STORAGE_ENGINE=1 \-DWITH_DEBUG=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_unicode_ci \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0
說明:
CMAKE_INSTALL_PREFIX
:指定 MySQL 的安裝目錄。MYSQL_DATADIR
:指定數據存儲目錄。SYSCONFDIR
:指定配置文件my.cnf
的位置。DEFAULT_CHARSET
和DEFAULT_COLLATION
:設置默認字符集為utf8mb4
。- 如果需要其他功能(如調試支持),可以調整
-DWITH_DEBUG
為1
。
7. 編譯和安裝
make -j$(nproc) # 使用多線程編譯以加快速度
sudo make install
8. 設置權限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /var/lib/mysql
9. 初始化 MySQL 數據庫
sudo /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
說明:
--initialize-insecure
:不生成隨機密碼。- 如果需要生成隨機密碼,可以使用
--initialize
替代,并在/var/lib/mysql
下的日志文件中查看密碼。
10. 配置 MySQL 服務
???????? 10.1 創建 systemd 服務文件
創建 /etc/systemd/system/mysqld.service
文件,內容如下:
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=on-failure[Install]
WantedBy=multi-user.target
???????? 10.2 創建 my.cnf
配置文件
創建 /etc/my.cnf
文件,內容如下:
[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
port=3306
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve
11. 啟動 MySQL 服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
12. 設置 root 密碼
???????? 12.1 登錄 MySQL
/usr/local/mysql/bin/mysql -u root
???????? 12.2 修改 root 密碼
在 MySQL 命令行中執行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
13. 驗證安裝
/usr/local/mysql/bin/mysql -u root -p
輸入密碼后,如果成功進入 MySQL 命令行,則表示安裝完成。
14. 配置環境變量(可選)
將 MySQL 的 bin
目錄添加到系統路徑中:
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
15. 常見問題解決
???????? 1. 編譯失敗
- 錯誤示例:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND...
- 解決方法:檢查依賴是否安裝完整(如
libncurses5-dev
,libssl-dev
等)。
- 解決方法:檢查依賴是否安裝完整(如
???????? 2. 權限問題
- 錯誤示例:
Can't start server: access denied for user 'mysql'...
- 解決方法:確保
/var/lib/mysql
的權限為mysql:mysql
。
- 解決方法:確保
???????? 3. 啟動失敗
- 錯誤示例:
Failed at step EXEC_START spawning...
- 解決方法:檢查
mysqld.service
文件中的路徑是否正確。
- 解決方法:檢查
16. 安全配置
運行 mysql_secure_installation
工具進一步加固 MySQL:
/usr/local/mysql/bin/mysql_secure_installation
17. 總結
通過以上步驟,您已成功在 Debian 10 上編譯安裝了 MySQL 5.7.44。如果需要進一步優化性能或配置高級功能(如主從復制、集群),可以參考 MySQL 官方文檔或相關教程。
在 Debian 10 上編譯安裝 MySQL 5.7.44 的步驟如下:
1. 準備工作
???????? 1.1 安裝依賴
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake libncurses5-dev libssl-dev libaio-dev libnuma-dev
???????? 1.2 下載 MySQL 5.7.44 源碼包
從 MySQL 官方歸檔頁面下載源碼包:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
2. 創建 MySQL 用戶和用戶組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3. 配置 MySQL 安裝路徑
???????? 3.1 創建安裝目錄
sudo mkdir -p /usr/local/mysql
sudo chown -R mysql:mysql /usr/local/mysql
???????? 3.2 創建數據目錄
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
4. 編譯 MySQL
???????? 4.1 配置 CMake
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_IPOPTIMIZATION=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0
???????? 4.2 編譯和安裝
make -j$(nproc) # 使用多核編譯加速
sudo make install
5. 初始化 MySQL 數據庫
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
說明:
--initialize-insecure
會生成空密碼的 root 用戶,后續需要手動設置密碼。
6. 配置 MySQL 服務
???????? 6.1 創建 my.cnf
配置文件
sudo vi /etc/my.cnf
添加以下內容:
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
port=3306
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
bind-address=0.0.0.0
???????? 6.2 創建 systemd 服務文件
sudo vi /etc/systemd/system/mysqld.service
添加以下內容:
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=on-failure[Install]
WantedBy=multi-user.target
???????? 6.3 啟動并啟用 MySQL 服務
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
7. 設置 root 密碼和安全配置
???????? 7.1 登錄 MySQL
/usr/local/mysql/bin/mysql -u root
???????? 7.2 修改 root 密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
???????? 7.3 安全配置(可選)
-- 刪除匿名用戶
DELETE FROM mysql.user WHERE User='';
-- 禁止 root 遠程登錄(可選)
UPDATE mysql.user SET Host='localhost' WHERE User='root' AND Host='%';
-- 刷新權限
FLUSH PRIVILEGES;
8. 配置遠程訪問(可選)
???????? 8.1 修改 my.cnf
sudo vi /etc/my.cnf
將 bind-address
改為:
bind-address=0.0.0.0
???????? 8.2 授權遠程訪問
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
???????? 8.3 開放防火墻端口
sudo ufw allow 3306/tcp
sudo ufw reload
9. 驗證安裝
???????? 9.1 檢查服務狀態
sudo systemctl status mysqld
???????? 9.2 檢查 MySQL 版本
/usr/local/mysql/bin/mysql --version
???????? 9.3 遠程連接測試
mysql -h <服務器IP> -u root -p
10. 常見問題解決
???????? 10.1 權限問題
- 確保
/data/mysql
目錄權限為mysql:mysql
:sudo chown -R mysql:mysql /data/mysql
???????? 10.2 端口沖突
- 檢查 3306 端口是否被占用:
sudo netstat -tulnp | grep 3306
???????? 10.3 查看錯誤日志
- MySQL 錯誤日志通常位于:
tail -n 100 /data/mysql/hostname.err
11. 補充說明
- 如果需要卸載 MySQL,可刪除相關目錄和配置:
sudo systemctl stop mysqld sudo systemctl disable mysqld sudo rm -rf /usr/local/mysql /data/mysql /etc/my.cnf /etc/systemd/system/mysqld.service sudo userdel mysql sudo groupdel mysql
通過以上步驟,你應該能夠在 Debian 10 上成功編譯安裝并配置 MySQL 5.7.44。如果遇到問題,請參考 MySQL 官方文檔或社區資源。
5?? 參考 5
在Debian 10上編譯安裝MySQL 5.7.44需要準備編譯環境、下載源碼并按步驟操作。以下是詳細過程:
1. 安裝編譯依賴
sudo apt update
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev libmysqlclient-dev \libreadline-dev libbz2-dev libcurl4-openssl-dev libarchive-dev liblz4-dev
2. 創建MySQL用戶和數據目錄
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
3. 下載并解壓MySQL源碼
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
4. 配置編譯選項(使用CMake)
cmake . \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_FEDERATED_STORAGE_ENGINE=1 \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DTRACE=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_unicode_ci \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0 \-DMYSQL_TCP_PORT=3306 \-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock
5. 編譯和安裝
make -j$(nproc) # 使用多線程編譯(nproc顯示CPU核心數)
sudo make install
6. 配置MySQL
創建配置文件 /etc/my.cnf
:
sudo tee /etc/my.cnf <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /var/run/mysqld/mysqld.sock
port = 3306
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
EOF
7. 初始化數據庫
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqldcd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意:初始化后會生成臨時密碼(在輸出中顯示 [Note] A temporary password is generated for root@localhost: xxxxx
),請記錄該密碼。
8. 啟動MySQL服務
sudo bin/mysqld_safe --user=mysql &
9. 配置環境變量
將MySQL命令添加到系統路徑:
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc
source ~/.bashrc
10. 安全設置
使用臨時密碼登錄并修改root密碼:
mysql -u root -p
# 輸入臨時密碼后執行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
FLUSH PRIVILEGES;
11. 配置為系統服務
創建systemd服務文件:
sudo tee /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=always
LimitNOFILE=10000[Install]
WantedBy=multi-user.target
EOF
重載systemd并啟用服務:
sudo systemctl daemon-reload
sudo systemctl enable mysqld
sudo systemctl start mysqld
驗證安裝
mysql -u root -p -e "SELECT VERSION();"
輸出應顯示 5.7.44
。
常見問題
- 編譯錯誤:檢查依賴是否完整安裝。
- 啟動失敗:檢查日志文件
/usr/local/mysql/data/hostname.err
。 - 權限問題:確保
/usr/local/mysql
和/var/run/mysqld
目錄權限正確。
通過以上步驟,你可以在Debian 10上成功編譯安裝MySQL 5.7.44。
在Debian 10系統上編譯安裝MySQL 5.7.44,可按以下步驟操作:
1. 安裝編譯依賴
sudo apt update
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \libmysqlclient-dev libreadline-dev libffi-dev libz-dev
2. 創建MySQL用戶和數據目錄
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
3. 下載并解壓MySQL源碼
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -xzf mysql-5.7.44.tar.gz
cd mysql-5.7.44
4. 配置編譯選項
cmake . \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_EMBEDDED_SERVER=1 \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DOWNLOADS=1
5. 編譯和安裝
make -j$(nproc) # 根據CPU核心數加速編譯
sudo make install
6. 配置MySQL
sudo cp support-files/my-default.cnf /etc/my.cnf
sudo vi /etc/my.cnf # 根據需要調整配置參數
7. 初始化數據庫
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意初始化后輸出的臨時密碼,用于首次登錄
8. 啟動MySQL服務
sudo bin/mysqld_safe --user=mysql &
9. 設置開機自啟
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults
10. 安全配置
sudo bin/mysql_secure_installation
驗證安裝
/usr/local/mysql/bin/mysql -u root -p
環境變量配置
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc
source ~/.bashrc
Debian 10編譯安裝MySQL 5.7.44腳本
#!/bin/bash# Debian 10編譯安裝MySQL 5.7.44腳本# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color# 錯誤處理函數
handle_error() {echo -e "${RED}錯誤: $1${NC}"exit 1
}# 安裝依賴
echo -e "${GREEN}正在安裝編譯依賴...${NC}"
sudo apt update || handle_error "更新APT源失敗"
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev \libmysqlclient-dev libreadline-dev libffi-dev libz-dev \libjemalloc-dev || handle_error "安裝依賴包失敗"# 創建MySQL用戶和組
echo -e "${GREEN}正在創建MySQL用戶和組...${NC}"
sudo groupadd mysql || handle_error "創建mysql組失敗"
sudo useradd -r -g mysql -s /bin/false mysql || handle_error "創建mysql用戶失敗"# 創建安裝目錄
echo -e "${GREEN}正在創建安裝目錄...${NC}"
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql || handle_error "設置目錄權限失敗"# 下載并解壓源碼
echo -e "${GREEN}正在下載和解壓MySQL源碼...${NC}"
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz || handle_error "下載源碼失敗"
tar -xzf mysql-5.7.44.tar.gz || handle_error "解壓源碼失敗"
cd mysql-5.7.44 || handle_error "進入源碼目錄失敗"# 配置編譯選項
echo -e "${GREEN}正在配置編譯選項...${NC}"
cmake . \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_EMBEDDED_SERVER=1 \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DOWNLOADS=1 \-DWITH_JEMALLOC=1 \-DWITH_SSL=system \-DWITH_ZLIB=system || handle_error "CMake配置失敗"# 編譯和安裝
echo -e "${GREEN}正在編譯MySQL,這可能需要一段時間...${NC}"
make -j$(nproc) || handle_error "編譯失敗"
echo -e "${GREEN}正在安裝MySQL...${NC}"
sudo make install || handle_error "安裝失敗"# 配置MySQL
echo -e "${GREEN}正在配置MySQL...${NC}"
sudo cp support-files/my-default.cnf /etc/my.cnf
# 添加基礎配置
sudo tee -a /etc/my.cnf > /dev/null <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/mysql.pid
log-error = /usr/local/mysql/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 500
innodb_buffer_pool_size = 1G
EOF# 初始化數據庫
echo -e "${GREEN}正在初始化MySQL數據庫...${NC}"
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data || handle_error "數據庫初始化失敗"# 獲取臨時密碼
TEMP_PASSWORD=$(grep 'temporary password' /usr/local/mysql/error.log | awk '{print $NF}')
echo -e "${YELLOW}臨時密碼: $TEMP_PASSWORD${NC}"# 配置系統服務
echo -e "${GREEN}正在配置系統服務...${NC}"
sudo cp support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults || handle_error "設置開機自啟失敗"# 啟動MySQL
echo -e "${GREEN}正在啟動MySQL服務...${NC}"
sudo systemctl start mysql || handle_error "啟動MySQL服務失敗"# 添加到環境變量
echo -e "${GREEN}正在配置環境變量...${NC}"
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile || handle_error "更新環境變量失敗"# 安全配置
echo -e "${GREEN}請手動進行安全配置,設置新密碼等...${NC}"
echo -e "${YELLOW}執行: mysql_secure_installation${NC}"echo -e "${GREEN}MySQL 5.7.44編譯安裝完成!${NC}"
echo -e "${YELLOW}使用命令 'mysql -u root -p' 登錄MySQL${NC}"
如果編譯過程中遇到依賴問題,可以通過apt search
命令查找對應的庫包并安裝。編譯完成后,建議進行性能測試和安全加固。
6?? 參考 6
在 Debian 10 上編譯安裝 MySQL 5.7.44
???????? 步驟 1:安裝編譯依賴
sudo apt update
sudo apt install -y cmake build-essential \
libncurses5-dev libssl-dev libboost-all-dev \
bison git wget
說明:MySQL 5.7 需要 Boost 庫和 OpenSSL 開發包。
???????? 步驟 2:下載源碼
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
???????? 步驟 3:配置編譯選項
mkdir build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/lib/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=../boost
關鍵參數:
INSTALL_PREFIX
:指定安裝目錄MYSQL_DATADIR
:設置數據庫存儲路徑WITH_SSL=system
:使用系統 OpenSSL 庫
???????? 步驟 4:編譯和安裝
make -j$(nproc) # 使用所有 CPU 核心加速編譯
sudo make install # 需要 root 權限
???????? 步驟 5:創建系統用戶和目錄
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql
???????? 步驟 6:初始化數據庫
cd /usr/local/mysql
sudo bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql --datadir=/var/lib/mysql
注意:
--initialize-insecure
會創建空密碼的 root 賬戶,生產環境應使用--initialize
生成隨機密碼。
???????? 步驟 7:配置 systemd 服務
創建服務文件 /etc/systemd/system/mysqld.service
:
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld \
--basedir=/usr/local/mysql \
--datadir=/var/lib/mysql \
--plugin-dir=/usr/local/mysql/lib/plugin \
--log-error=/var/log/mysql/error.log
Restart=on-failure[Install]
WantedBy=multi-user.target
啟用服務:
sudo systemctl daemon-reload
sudo systemctl enable mysqld
sudo systemctl start mysqld
???????? 步驟 8:設置環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
???????? 步驟 9:安全初始化
sudo mysql_secure_installation
按提示設置 root 密碼、移除匿名用戶等安全選項。
???????? 驗證安裝
mysql -u root -p -e "SELECT VERSION();"
應輸出:5.7.44
常見問題解決
-
CMake 錯誤:
- 檢查缺失依賴:
sudo apt install libtinfo5
- 清除緩存:
rm CMakeCache.txt
- 檢查缺失依賴:
-
內存不足:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4 sudo mkswap /swapfile && sudo swapon /swapfile
-
服務啟動失敗:
sudo journalctl -u mysqld -f # 查看實時日志
重要提示:編譯過程約需 1-2 小時(取決于硬件),建議在穩定環境中操作。
相關問題
- MySQL 5.7 與 Debian 10 的兼容性問題有哪些?
- 如何優化 MySQL 5.7 的編譯參數提升性能?
- 源碼安裝的 MySQL 如何升級到新版本?
- 編譯安裝和包管理器安裝的 MySQL 有何本質區別?
- : MySQL 官方要求編譯時必須安裝 Boost 庫和 OpenSSL 開發包
- 配置文件需正確設置數據目錄和套接字路徑
- 編譯大型項目建議預留至少 4GB 內存空間
在 Debian 10 上編譯安裝 MySQL 5.7.44 需要手動下載源碼并進行編譯。以下是詳細步驟:
一、安裝編譯依賴
sudo apt update
sudo apt install -y build-essential cmake libncurses5-dev libssl-dev libaio-dev libbz2-dev liblz4-dev liblzma-dev libjemalloc-dev libreadline-dev libcurl4-openssl-dev libcap-dev libnuma-dev
二、下載 MySQL 5.7.44 源碼
# 創建目錄并下載源碼包
mkdir ~/mysql-src && cd ~/mysql-src
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz# 解壓源碼
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
三、配置編譯選項
# 創建編譯目錄
mkdir build && cd build# 配置編譯參數(指定安裝路徑和優化選項)
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=yes \
-DWITH_ZLIB=bundled \
-DWITH_DEBUG=0 \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1
四、編譯并安裝
# 編譯(可能需要較長時間)
make -j$(nproc)# 安裝
sudo make install
五、配置 MySQL 環境
# 創建 mysql 用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql# 設置目錄權限
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod -R 755 /usr/local/mysql# 初始化數據庫
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
六、配置系統服務
- 創建 systemd 服務文件(
/etc/systemd/system/mysqld.service
):
[Unit]
Description=MySQL Server
After=network.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
- 啟動并啟用服務:
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
七、配置 MySQL
- 編輯配置文件(
/etc/my.cnf
):
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/mysqld.pid
port=3306
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock
- 登錄 MySQL 設置密碼:
sudo /usr/local/mysql/bin/mysql_secure_installation
八、驗證安裝
# 檢查服務狀態
systemctl status mysqld# 登錄 MySQL 查看版本
/usr/local/mysql/bin/mysql -u root -p
SELECT VERSION();
注意事項
- 依賴問題:若編譯失敗,請檢查是否安裝所有依賴庫。
- 路徑問題:確保
basedir
和datadir
路徑權限正確。 - 初始化密碼:初始化時會生成臨時 root 密碼,需在日志中查看并設置新密碼。
如果需要更詳細的配置選項或遇到問題,可以進一步說明具體需求!
7?? 參考 7
以下是在 Debian 10 上通過編譯源碼安裝 MySQL 5.7.44 的詳細步驟:
1. 安裝編譯依賴環境
sudo apt update
sudo apt install -y cmake gcc g++ make libncurses5-dev libssl-dev libaio-dev libsystemd-dev zlib1g-dev bison
2. 下載 MySQL 5.7.44 源碼包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
3. 配置編譯選項
mkdir build && cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc/mysql \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_SYSTEMD=1 \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci
關鍵參數說明:
CMAKE_INSTALL_PREFIX
:指定安裝路徑。MYSQL_DATADIR
:數據庫文件存儲目錄。SYSCONFDIR
:配置文件目錄(默認生成/etc/mysql/my.cnf
)。WITH_*
:啟用的存儲引擎和功能模塊。
4. 編譯并安裝
make -j$(nproc) # 使用多核加速編譯
sudo make install
5. 創建 MySQL 用戶和目錄權限
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
6. 初始化 MySQL 數據庫
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
記錄輸出的臨時 root 密碼(如 [Note] A temporary password is generated for root@localhost: xxxxxx
)。
7. 配置 systemd 服務
創建服務文件 /etc/systemd/system/mysql.service
:
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf
LimitNOFILE=5000[Install]
WantedBy=multi-user.target
8. 啟動 MySQL 服務
sudo systemctl daemon-reload
sudo systemctl start mysql
sudo systemctl enable mysql
9. 設置 root 密碼
/usr/local/mysql/bin/mysql_secure_installation
按提示輸入臨時密碼并修改為新密碼。
10. 驗證安裝
/usr/local/mysql/bin/mysql -uroot -p -e "SELECT VERSION();"
常見問題解決
???????? 1. 初始化失敗(目錄權限問題)
檢查 /usr/local/mysql/data
的權限:
sudo chown -R mysql:mysql /usr/local/mysql
???????? 2. 依賴缺失導致編譯中斷
通過 apt search
查找缺失的頭文件或庫,例如:
sudo apt install libssl-dev
???????? 3. 無法連接到 socket
檢查配置文件 /etc/mysql/my.cnf
中的 socket
路徑是否匹配:
[mysqld]
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
環境變量配置(可選)
將 MySQL 添加到 PATH:
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
總結
此方法適合需要 深度自定義編譯選項 的場景。如果僅需快速部署,建議優先使用 APT 倉庫安裝。MySQL 5.7 已結束官方支持(EOL),建議生產環境升級至 MySQL 8.x。
在Debian 10上編譯安裝MySQL 5.7.44的步驟如下:
1. 安裝依賴環境
sudo apt update
sudo apt install -y cmake build-essential libncurses5-dev libssl-dev libssl1.1 \libreadline-dev zlib1g-dev git pkg-config wget
2. 創建MySQL用戶和組
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
3. 下載MySQL源碼
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
tar -zxvf mysql-5.7.44.tar.gz
cd mysql-5.7.44
4. 配置編譯選項
mkdir build
cd build
cmake .. \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/usr/local/mysql/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_SSL=system \-DENABLED_LOCAL_INFILE=1 \-DENABLE_DTRACE=0 \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci
注:如果配置失敗,刪除
build/
目錄并重新執行cmake
。
5. 編譯并安裝
make -j$(nproc) # 使用所有CPU核心加速編譯
sudo make install
6. 初始化數據庫
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
保存初始密碼:輸出末尾的 root@localhost: 隨機密碼
。
7. 配置MySQL服務
???????? (1) 創建配置文件
sudo cp support-files/my-default.cnf /etc/my.cnf
sudo sed -i 's/^\[mysqld\]$/&\nuser=mysql\nbasedir=\/usr\/local\/mysql\ndatadir=\/usr\/local\/mysql\/data/' /etc/my.cnf
???????? (2) 創建Systemd服務文件
sudo tee /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
???????? (3) 加載服務并啟動
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
8. 設置環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee -a /etc/profile
source /etc/profile
9. 安全加固
# 使用初始密碼登錄
mysql -u root -p
在MySQL提示符下執行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;