二進制安裝MySQL 8.0指南:跨平臺、自定義數據路徑、安全遠程訪問配置

二進制安裝 MySQL 8.0

在生產或測試環境中,我們常常希望避免包管理器帶來的依賴和交互問題,尤其是當系統自帶版本過舊或安裝過程頻繁彈窗時。此時,使用 MySQL 官方提供的二進制壓縮包(Generic Linux Binary) 進行安裝,是一種高度可控、跨平臺兼容、無交互、可定制化強的解決方案。

本文將詳細介紹如何在任意主流 Linux 系統(如 Ubuntu、CentOS、Debian、Red Hat 等)上,通過 二進制方式靜默安裝 MySQL 8.0,并將數據目錄指定為 /data/mysql,適用于需要高性能、獨立部署或自動化腳本集成的場景。


一、為什么選擇二進制安裝?

優勢說明
完全可控,避免包管理副作用繞過 apt/yum/dnf 的依賴解析與自動配置,避免因系統庫版本沖突導致安裝失敗或配置被覆蓋。
高度可移植,跨 Linux 發行版運行使用官方預編譯的 x86_64 通用二進制包,可在 CentOS、Ubuntu、Debian、Red Hat 等任意主流發行版上一致部署,環境一致性更強。
目錄結構完全自定義安裝路徑(basedir)、數據目錄(datadir)、日志、socket 文件等均可自由指定,滿足企業級部署規范(如 /data/mysql 存放數據)。
實例獨立,便于遷移與災備MySQL 實例完全獨立于系統包管理器,可整體打包遷移至其他服務器,適合容器化、離線部署或快速恢復場景。
適合自動化與標準化交付無需處理交互式配置,可通過 Shell 腳本、Ansible、Packer 等工具實現無人值守部署,適用于 CI/CD 流水線和規模化運維。

二、 環境準備

  • 操作系統:任意 Linux 發行版(Ubuntu 18.04+/CentOS 7+/Debian 10+ 等)

  • - 架構:x86_64

    指常見的 64 位服務器 CPU 架構,無論是 Intel 還是 AMD 生產的現代服務器都支持。 ? 不支持 ARM 架構(如華為鯤鵬、AWS Graviton、Mac M1/M2)。 驗證方法:運行 uname -m,如果顯示 x86_64 則符合要求。

  • 內存:建議 ≥ 2GB

  • 磁盤:確保 /data 分區有足夠空間

  • 用戶權限:具備 rootsudo 權限


三、安裝步驟

1. 下載 MySQL 8.0 二進制包

前往 MySQL 官方下載頁 或使用以下命令下載通用二進制包:

cd /tmp
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz

🔗 包名說明:mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz
這是官方為 Linux 系統編譯的通用二進制版本,適用于大多數現代發行版。


2. 創建安裝目錄并解壓

我們將 MySQL 安裝到 /usr/local/mysql,數據目錄設為 /data/mysql

# 創建安裝目錄
sudo mkdir -p /usr/local/mysql# 解壓到臨時目錄并移動
sudo tar -xJf mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz -C /tmp/
sudo mv /tmp/mysql-8.0.36-linux-glibc2.12-x86_64/* /usr/local/mysql/

3. 創建 MySQL 用戶和組

為安全起見,MySQL 應以專用用戶運行:

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql# 設置安裝目錄權限
sudo chown -R mysql:mysql /usr/local/mysql

4. 創建數據目錄(關鍵:使用 /data/mysql

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

💡 將數據目錄放在 /data 下,便于獨立掛載大容量磁盤,提升 I/O 性能。


5. 初始化數據庫

執行初始化命令,生成系統數據庫和臨時 root 密碼:

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

? 成功后會輸出:

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jj?-kM:A6xLw

?? 請務必記錄此臨時密碼! 后續首次登錄需要使用。


6. 生成 SSL/RSA 證書(推薦)

sudo bin/mysql_ssl_rsa_setup \--basedir=/usr/local/mysql \--datadir=/data/mysql

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

sudo tee /etc/my.cnf > /dev/null << 'EOF'
[mysqld]
# 基本路徑
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/error.log# 網絡配置
port = 3306
bind-address = 0.0.0.0# InnoDB 設置(可選優化)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M[client]
socket = /var/run/mysqld/mysqld.sock[mysql]
socket = /var/run/mysqld/mysqld.sock
EOF

創建日志目錄:

sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
# 創建目錄
sudo mkdir -p /var/run/mysqld

創建 socket 目錄并設置權限

# 創建目錄
sudo mkdir -p /var/run/mysqld# 設置屬主為 mysql 用戶
sudo chown mysql:mysql /var/run/mysqld# 設置權限(關鍵)
sudo chmod 755 /var/run/mysqld

8. 創建 systemd 服務文件

sudo tee /etc/systemd/system/mysql.service > /dev/null << 'EOF'
[Unit]
Description=MySQL Server
After=network.target[Service]
RuntimeDirectory=mysqld
RuntimeDirectoryMode=0755
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
LimitNOFILE=65535[Install]
WantedBy=multi-user.target
EOF

9. 啟動 MySQL 服務

# 重載 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload# 啟動并設置開機自啟
sudo systemctl start mysql
sudo systemctl enable mysql# 查看狀態
sudo systemctl status mysql --no-pager

10. 獲取臨時密碼并登錄修改 root 密碼

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jj?-kM:A6xLw

登錄 MySQL:

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

修改 root 密碼:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password123!';
FLUSH PRIVILEGES;
EXIT;

在 MySQL 中創建內網 root 訪問權限

-- 創建 root 用戶,僅允許從內網段 192.168.0.0/16 登錄
CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'Password123!';-- 授予所有權限(與本地 root 一致)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%' WITH GRANT OPTION;-- 刷新權限
FLUSH PRIVILEGES;
EXIT;

11. 創建專用遠程管理員用戶(不推薦直接開放 root 遠程)

? 原始做法風險:CREATE USER 'root'@'%' ...
即使設置了強密碼,也極易成為暴力破解和 SQL 注入攻擊的目標。

-- 創建專用遠程管理員(僅限指定IP登錄)
CREATE USER 'admin'@'公司出口IP' IDENTIFIED BY 'StrongPass!2025';-- 授予全局管理權限(等同于 root 權限)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'公司出口IP' WITH GRANT OPTION;-- 刷新權限
FLUSH PRIVILEGES;
EXIT;

📌 說明:

  • 用戶名改為 admindba 更安全,避免暴露 root
  • 登錄來源限定為 公司出口IP,防止其他 IP 嘗試連接
  • 密碼需包含大小寫+數字+特殊字符,長度 ≥ 12

確保 /etc/my.cnfbind-address = 0.0.0.0,然后重啟:

systemctl restart mysql

(可選)進一步最小化權限(更安全)

如果不需要完全 ALL PRIVILEGES,可以按需授權:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, PROCESS, RELOAD, SHUTDOWN,SHOW DATABASES, SUPER, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'admin'@'公司出口IP';

12. 配置 iptables 實現精細網絡訪問控制

目標:

  • ? 允許 公司出口IP 訪問 3306(外網特定IP)
  • ? 允許 192.168.0.0/16 內網所有機器訪問 3306
  • ? 拒絕其他所有外部主機訪問 3306
方法一:直接使用 iptables 命令(臨時生效)
# 允許特定公網IP訪問MySQL
sudo iptables -A INPUT -p tcp --dport 3306 -s 公司出口IP -j ACCEPT# 允許內網段訪問MySQL
sudo iptables -A INPUT -p tcp --dport 3306 -s 192.168.0.0/16 -j ACCEPT# 拒絕其他所有對3306的訪問(必須放在最后)
sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

?? 重要:iptables 規則是按順序匹配的,-j DROP 必須在所有 ACCEPT 規則之后,否則會被提前攔截!


方法二:持久化保存 iptables 規則(重啟不失效)

不同系統保存方式略有差異:

Ubuntu / Debian
# 安裝持久化工具
sudo apt-get install -y iptables-persistent# 保存當前規則
sudo netfilter-persistent save
CentOS / RHEL / Rocky Linux
# 安裝服務
sudo yum install -y iptables-services || sudo dnf install -y iptables-service# 啟用并保存
sudo systemctl enable iptables
sudo service iptables save

13. 驗證安裝

/usr/local/mysql/bin/mysql --version
# 輸出:/usr/local/mysql/bin/mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)/usr/local/mysql/bin/mysql -u root -p -e "SELECT VERSION();"
# 應返回 MySQL 版本號
+-----------+
| VERSION() |
+-----------+
| 8.0.36    |
+-----------+

14. 添加 MySQL 到環境變量(可選)

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

之后可直接使用 mysqlmysqldump 等命令。


四、如何卸載?

sudo systemctl stop mysql
sudo systemctl disable mysql
sudo rm /etc/systemd/system/mysql.service
sudo rm /etc/my.cnf
sudo rm -rf /usr/local/mysql
sudo rm -rf /data/mysql
sudo rm -rf /var/log/mysql
sudo userdel mysql 2>/dev/null || true
sudo groupdel mysql 2>/dev/null || true

五、最佳實踐建議

  1. 定期備份 /data/mysql
    數據目錄集中,便于使用 xtrabackupmysqldump 備份。

  2. 監控磁盤空間
    /data 分區應有足夠的擴展能力。

  3. 使用專用備份用戶

    CREATE USER 'backup'@'localhost' IDENTIFIED BY 'BackupPass!789';
    GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
    
  4. 定期更新 MySQL 版本
    二進制包方式便于快速升級:只需替換 /usr/local/mysql 并保留 /data/mysql

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

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

相關文章

Z檢驗與T檢驗的區別與聯系:原理、公式和案例全解

Z檢驗與T檢驗全解析&#xff1a;原理、區別與實際案例 統計學的核心任務之一&#xff0c;就是通過有限的樣本數據去推斷總體特征。在這一過程中&#xff0c;假設檢驗成為了最常見的工具。而在眾多檢驗方法中&#xff0c;Z檢驗與T檢驗幾乎是入門必學&#xff0c;也是應用最廣泛的…

SpringBoot之緩存(最詳細)

文章目錄項目準備新建項目并選擇模塊安裝添加依賴添加application.yml刪除demos.web包編寫pojo層userdto/ResultJson編寫mapper層UserMapper編寫service層UserService編寫controller層編寫配置類MybatisPlusConfig編寫測試類1 緩存分類1.1 MyBatis一級緩存1.2 MyBatis二級緩存1…

B站 韓順平 筆記 (Day 29)

目錄 1&#xff08;集合的框架體系&#xff09; 2&#xff08;Collection接口和常用方法&#xff09; 2.1&#xff08;Collection接口實現類特點&#xff09; 2.2&#xff08;常用方法&#xff09; 2.3&#xff08;遍歷元素方式1&#xff1a;迭代器&#xff09; 1&#x…

axios報錯解決:unsupported BodyInit type

目錄 問題 原因 解決方法 問題 Got ‘unsupported BodyInit type’ bug on iPhone 14(IOS 17.5) Issue #6444 axios/axios 我這里是iPhone 6plus打開會報錯白屏 好多人遇到了相同的問題 當我在 iPhone 14 上瀏覽頁面時,我收到一條錯誤消息:錯誤:不支持的 BodyInit 類型,…

iperf3網絡性能測試工具

iperf3 是一個功能非常強大的網絡性能測試工具,用于測量兩個網絡節點之間的最大TCP、UDP帶寬和性能。它通過創建數據流并測量其吞吐量來工作。 下面我將為您詳細介紹其核心用法、常用命令和參數。 核心概念:客戶端/服務器模式 iperf3 測試需要兩臺機器:一臺作為服務器端(…

【C#】 資源共享和實例管理:靜態類,Lazy<T>單例模式,IOC容器Singleton我們該如何選

文章目錄前言一、靜態類1.1 靜態類的特點1.2 靜態類的使用1.3 靜態類的缺點二、單例模式2.1 Lazy延遲初始化2.2 Lazy< T>單例模式的使用2.3 單例模式的特點三、IOC的Singleton總結前言 編寫程序的時候&#xff0c;常常能碰到當某些數據或方法需要被整個程序共享&#xf…

MySQL——存儲引擎、索引

一、存儲引擎1.MySQL體系結構2.存儲引擎簡介存儲引擎就是儲存數據、建立索引、更新/查詢數據等技術的實現方式。儲存引擎是基于表的&#xff0c;而不是基于庫的&#xff0c;所以存儲引擎也可被稱為表類型建表語句&#xff1a;查詢數據庫支持的儲存引擎&#xff1a;show engines…

機器學習01——機器學習概述

上一章&#xff1a;機器學習核心知識點目錄 下一章&#xff1a;機器學習02——模型評估與選擇 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、參考書推薦二、機器學習的基本概…

Shell編程:檢測主機ip所在網段內其他在線ip

一、邏輯設計獲取本機 ip 及 網段循環檢測網段內所有 ip判斷 ping 結果&#xff0c;符合條件的輸出相關信息二、代碼展示#!/bin/bash#獲取本機ip local_iphostname -I #local_ipip addr| grep "inet "|grep -v 127.0.0.1| awk {print $2}#獲取本機網段 networkecho $…

Windows安裝Chroma DB

安裝步驟 安裝python 3.8或以上的版本創建虛擬環境&#xff1a;python -m venv chroma_env激活虛擬環境&#xff1a;.\chroma_env\Scripts\activate安裝Chroma DB&#xff1a;pip install chromadb(可選)安裝擴展功能&#xff1a;pip install sentence-transformers pypdf tikt…

李彥宏親自說

昨天&#xff0c;李彥宏親自說&#xff1a;百度的數字人直播以假亂真&#xff0c;很多人是看不出這是數字人&#xff0c;而且轉化率很高”這幾個月百度一直在推“數字人”不再強調“大模型”了。數字人是AI落地最適合企業的一款產品&#xff0c;一般用于客服、面試、直播帶貨等…

JS 中bind、call、apply的區別以及手寫bind

1.作用call、apply、bind作用是改變函數執行的上下文&#xff0c;簡而言之就是改變函數運行時的this指向那么什么情況下需要改變this的指向呢&#xff1f;下面舉個例子var name "lucy"; var obj {name: "martin",say: function () {console.log(this.nam…

vue2(7)-單頁應用程序路由

1.單頁應用程序如 單頁&#xff1a;網易云&#xff0c;多頁&#xff1a;京東單頁應用程序&#xff0c;之所以開發效率高&#xff0c;性能高&#xff0c;用戶體驗好最大的原因是&#xff1a;頁面按需更新 要按需更新&#xff0c;就要明確訪問路徑和組件的關系這時候就要用…

vue中通過heatmap.js實現熱力圖(多個熱力點)熱區展示(帶鼠標移入彈窗)

直接上完整代碼&#xff01;記錄實現方式 注意heatmap.min.js需要通過heatmap.js提供的下載地址進行下載&#xff0c;地址放在下邊 url&#xff1a;heatmap GIT地址 <template><div class"heatmap-view" ref"heatmapContainer"></div&g…

配置Kronos:k線金融大模型

github地址 網頁btc預測demo使用的Kronos-mini模型 huggingface的倉庫 文章目錄配置環境安裝python環境獲取市場數據的庫通過webui使用example中的例子prediction_example.py補充說明根據原例優化的代碼CryptoDataFetcher單幣對多周期預測配置環境 使用conda的環境. 首先進行換…

【Deep Learning】Ubuntu配置深度學習環境

【start: 250715】 文章目錄ubuntu與深度學習安裝cuda查看顯卡信息&#xff08;nvidia-smi&#xff09;升級驅動下載cuda安裝conda安裝anaconda默認指向自己的conda初始化conda確認 conda.sh 被加載安裝cuda-toolkit直接安裝cuda-toolkit&#xff08;高級的&#xff09;安裝高于…

車載數據采集(DAQ)解析

<摘要> 車載數據采集&#xff08;DAQ&#xff09;軟件模塊是現代汽車電子系統的核心組件&#xff0c;負責實時采集、處理、記錄和傳輸車輛運行數據。本文系統解析了DAQ模塊的開發&#xff0c;涵蓋其隨著汽車智能化演進的歷史背景&#xff0c;深入闡釋了信號、協議、緩存等…

強化學習框架Verl運行在單塊Tesla P40 GPU配置策略及避坑指南

1.前言 由于比較窮,身邊只有1塊10年前的Tesla P40 GPU卡(2016年9月發布),想利用起來學習強化學習框架Verl。程序員學習開源代碼,大部分人的第一直覺不是分析模塊組成,而是跑起來試試,然后去debug一下后面的運行邏輯。 由于在官方部署指導文檔中并未指明跑通Verl的最低…

leetcode169.多數元素

題目描述給定一個大小為 n 的數組 nums &#xff0c;返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。題目解法博耶-摩爾多數投票算法&#xff08;英語&#xff1a;Boyer–Moore…

基于機器學習的P2P網貸平臺信用違約預測模型

使用平臺提供的借款人信息&#xff08;年齡、收入、歷史信用等&#xff09;和借款信息&#xff0c;構建一個二分類模型來預測借款人是否會違約。重點解決類別不平衡問題和模型可解釋性。邏輯回歸、隨機森林、XGBoost、SMOTE過采樣、模型評估&#xff08;AUC, KS, F1-Score&…