最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本命令搞定mysql_exporter部署,重復(fù)配置自動化

 更新時間:2026年05月23日 11:32:44   作者:User_芊芊君子  
本文使用shell腳本一鍵部署mysql_exporter,并步驟,確保多臺服務(wù)器配置一致且高效,通過預(yù)編譯密碼和權(quán)限,腳本自動創(chuàng)建MySQL監(jiān)控用戶、配置權(quán)限、寫service文件并啟動服務(wù),此外,文章還探討了使用cpolar解決跨網(wǎng)絡(luò)監(jiān)控問題,生成固定公網(wǎng)地址讓Prometheus抓取內(nèi)網(wǎng)MySQL指標(biāo)

前言

在多臺服務(wù)器上部署 mysql_exporter 這件事,手動做的話每一步都不能少:下載二進制包、MySQL 建監(jiān)控用戶、授權(quán)、寫 systemd 服務(wù)文件、配憑證文件。跑一臺的時候還好,批量跑的時候每臺都來一遍,容易出錯也浪費時間。

這篇的核心是把整個部署流程寫成一個 Shell 腳本:一條命令跑完下載、安裝、建用戶、配權(quán)限、寫服務(wù)、啟動服務(wù)這些步驟。腳本里硬編碼了 MySQL root 密碼和 exporter 用戶的密碼,跑的時候按需改一下就行。跑完之后 systemd 服務(wù)自動注冊好,開機自啟,prometheus 直接抓 metrics 地址就能用。

腳本本身不復(fù)雜,關(guān)鍵是把原本需要查文檔一步步做的內(nèi)容變成了可復(fù)用的工具。對于需要同時維護多臺 MySQL 實例的人來說,把這個腳本存下來,后續(xù)擴縮容的時候直接跑命令比逐臺操作效率高得多。

1.為什么選擇shell腳本一鍵安裝?

選擇Shell腳本一鍵安裝mysqld_exporter,主要是為了提升部署效率、保證配置一致性并降低人為操作錯誤風(fēng)險。

在生產(chǎn)環(huán)境中,往往需要在多臺服務(wù)器上快速部署監(jiān)控組件,手動執(zhí)行下載、解壓、創(chuàng)建用戶、配置MySQL權(quán)限、編寫systemd服務(wù)等步驟不僅繁瑣,還容易因環(huán)境差異導(dǎo)致配置遺漏或權(quán)限問題。

通過Shell腳本自動化整個流程,可以實現(xiàn)“一次編寫,處處運行”,確保所有節(jié)點的安裝路徑、用戶權(quán)限、監(jiān)聽端口和認(rèn)證信息完全統(tǒng)一,同時支持以非root用戶(如 prometheus)安全運行,并自動配置開機自啟,極大簡化了Prometheus監(jiān)控體系的落地與維護成本。

  • 部署高效快捷

    一條命令即可完成下載、配置、授權(quán)、啟動全過程,大幅縮短部署時間。

  • 配置標(biāo)準(zhǔn)化

    所有服務(wù)器使用相同的路徑、用戶、端口和權(quán)限策略,避免“環(huán)境漂移”問題。

  • 減少人為錯誤

    自動創(chuàng)建MySQL監(jiān)控用戶并授予權(quán)限,避免手動操作導(dǎo)致的拼寫錯誤或權(quán)限遺漏。

  • 安全合規(guī)

    自動以專用非登錄用戶(如prometheus)運行服務(wù),并設(shè)置配置文件權(quán)限為600,防止密碼泄露。

  • 自動開機自啟

    集成systemd服務(wù)管理,確保系統(tǒng)重啟后監(jiān)控組件自動恢復(fù)運行。

  • 便于批量運維

    可結(jié)合Ansible、SaltStack或直接通過SSH批量執(zhí)行,適用于大規(guī)模集群統(tǒng)一部署。

  • 可版本化與復(fù)用

    腳本可納入Git管理,實現(xiàn)變更追蹤、回滾和跨項目復(fù)用,提升DevOps能力。

2.編寫shell腳本

部署MySQL Exporter(mysqld_exporter)的步驟,簡單明了如下:

  1. 創(chuàng)建專用監(jiān)控用戶

    在MySQL中創(chuàng)建一個僅用于監(jiān)控的用戶(如 mysqld_exporter),并授予必要權(quán)限:REPLICATION CLIENT PROCESS SELECT on performance_schema.*

  2. 下載并解壓 mysqld_exporter

    從 Prometheus 官方 GitHub 下載對應(yīng)版本的二進制包,解壓到指定目錄(如 /app/mysqld_exporter)。

  3. 配置數(shù)據(jù)庫連接憑證

    創(chuàng)建一個配置文件(如 localhost_db.cnf),寫入監(jiān)控用戶的用戶名和密碼,格式為標(biāo)準(zhǔn) MySQL 客戶端配置(含 **[client]**段),并設(shè)置權(quán)限為 600,確保安全。

  4. 創(chuàng)建systemd服務(wù)

    編寫systemd服務(wù)文件,以非root用戶(如prometheus)運行mysqld_exporter,指定配置文件路徑和監(jiān)聽端口(默認(rèn) :9105),并啟用開機自啟。

  5. 啟動并驗證服務(wù)

    啟動服務(wù),檢查狀態(tài)是否正常,并通過瀏覽器或 curl,確認(rèn)指標(biāo)可訪問。

按照這個部署步驟,我已經(jīng)把腳本寫出來啦,需要的小伙伴僅供參考~(我安裝的版本是0.18.0)

#!/bin/bash
# 一鍵安裝 mysqld_exporter for CentOS 7
# 使用固定 MySQL root密碼自動建用戶
# 監(jiān)控用戶: mysqld_exporter / Sjixin520!

set -e

VERSION="v0.18.0"
INSTALL_DIR="/app/mysqld_exporter"
PORT="9105"

MYSQL_ROOT_USER="root"
MYSQL_ROOT_PASS="Sjixin52!"
EXPORTER_USER="mysqld_exporter"
EXPORTER_PASS="Sjixin52!"

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

log() { echo -e "${GREEN}[INFO]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; exit 1; }

if [ "$EUID" -ne 0 ]; then
    error "請以 root 用戶運行此腳本!"
fi

# 安裝依賴
log "安裝必要工具..."
yum install -y wget tar &>/dev/null

# 下載mysqld_exporter
URL="https://github.com/prometheus/mysqld_exporter/releases/download/${VERSION}/mysqld_exporter-${VERSION#v}.linux-amd64.tar.gz"
log "正在下載mysqld_exporter ${VERSION} ..."
wget -O /tmp/mysqld_exporter.tar.gz "$URL" || error "下載失敗"

# 解壓到/app/mysqld_exporter
mkdir -p "$INSTALL_DIR"
tar -zxvf /tmp/mysqld_exporter.tar.gz -C "$INSTALL_DIR" --strip-components=1
chown -R root:root "$INSTALL_DIR"

# 確保prometheus用戶存在
if ! id "prometheus" &>/dev/null; then
    log "創(chuàng)建prometheus系統(tǒng)用戶..."
    useradd --system --shell /sbin/nologin --no-create-home prometheus
fi

# 自動創(chuàng)建MySQL監(jiān)控用戶
log "正在連接MySQL并創(chuàng)建監(jiān)控用戶 '$EXPORTER_USER' ..."

# 測試root登錄是否成功
if ! mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASS" -e "SELECT 1;" >/dev/null 2>&1; then
    error "無法使用root / Sjixin52! 登錄MySQL,請確認(rèn)MySQL正在運行且密碼正確"
fi

# 創(chuàng)建exporter用戶
mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASS" <<SQL
CREATE USER IF NOT EXISTS '$EXPORTER_USER'@'localhost' IDENTIFIED BY '$EXPORTER_PASS';
GRANT REPLICATION CLIENT, PROCESS ON *.* TO '$EXPORTER_USER'@'localhost';
GRANT SELECT ON performance_schema.* TO '$EXPORTER_USER'@'localhost';
FLUSH PRIVILEGES;
SQL

log "MySQL監(jiān)控用戶創(chuàng)建成功!"

# 創(chuàng)建.my.cnf文件
cat > "$INSTALL_DIR/localhost_db.cnf" <<EOF
[client]
user=$EXPORTER_USER
password=$EXPORTER_PASS
host=localhost
EOF

chmod 600 "$INSTALL_DIR/localhost_db.cnf"
chown prometheus:prometheus "$INSTALL_DIR/localhost_db.cnf"

# 創(chuàng)建systemd服務(wù)
cat > /etc/systemd/system/mysqld_exporter.service <<EOF
[Unit]
Description=MySQL Exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=$INSTALL_DIR/mysqld_exporter \\
    --config.my-cnf=$INSTALL_DIR/localhost_db.cnf \\
    --web.listen-address=:9105
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

# 啟動服務(wù)
log "啟動 mysqld_exporter 服務(wù)..."
systemctl daemon-reload
systemctl enable --now mysqld_exporter

log "? 安裝完成!"
log "指標(biāo)地址: http://$(hostname -I | awk '{print $1}'):${PORT}/metrics"
log "服務(wù)狀態(tài): systemctl status mysqld_exporter"

3.使用腳本部署mysql_exporter

編輯一個mysql_exporter.sh文件:

vi mysql_exporter.sh
#!/bin/bash
# 一鍵安裝 mysqld_exporter for CentOS 7
# 使用固定 MySQL root密碼自動建用戶
# 監(jiān)控用戶: mysqld_exporter / Sjixin520!

set -e

VERSION="v0.18.0"
INSTALL_DIR="/app/mysqld_exporter"
PORT="9105"

MYSQL_ROOT_USER="root"
MYSQL_ROOT_PASS="Sjixin52!"
EXPORTER_USER="mysqld_exporter"
EXPORTER_PASS="Sjixin52!"

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

log() { echo -e "${GREEN}[INFO]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; exit 1; }

if [ "$EUID" -ne 0 ]; then
    error "請以 root 用戶運行此腳本!"
fi

# 安裝依賴
log "安裝必要工具..."
yum install -y wget tar &>/dev/null

# 下載mysqld_exporter
URL="https://github.com/prometheus/mysqld_exporter/releases/download/${VERSION}/mysqld_exporter-${VERSION#v}.linux-amd64.tar.gz"
log "正在下載mysqld_exporter ${VERSION} ..."
wget -O /tmp/mysqld_exporter.tar.gz "$URL" || error "下載失敗"

# 解壓到/app/mysqld_exporter
mkdir -p "$INSTALL_DIR"
tar -zxvf /tmp/mysqld_exporter.tar.gz -C "$INSTALL_DIR" --strip-components=1
chown -R root:root "$INSTALL_DIR"

# 確保prometheus用戶存在
if ! id "prometheus" &>/dev/null; then
    log "創(chuàng)建prometheus系統(tǒng)用戶..."
    useradd --system --shell /sbin/nologin --no-create-home prometheus
fi

# 自動創(chuàng)建MySQL監(jiān)控用戶
log "正在連接MySQL并創(chuàng)建監(jiān)控用戶 '$EXPORTER_USER' ..."

# 測試root登錄是否成功
if ! mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASS" -e "SELECT 1;" >/dev/null 2>&1; then
    error "無法使用root / Sjixin52! 登錄MySQL,請確認(rèn)MySQL正在運行且密碼正確"
fi

# 創(chuàng)建exporter用戶
mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASS" <<SQL
CREATE USER IF NOT EXISTS '$EXPORTER_USER'@'localhost' IDENTIFIED BY '$EXPORTER_PASS';
GRANT REPLICATION CLIENT, PROCESS ON *.* TO '$EXPORTER_USER'@'localhost';
GRANT SELECT ON performance_schema.* TO '$EXPORTER_USER'@'localhost';
FLUSH PRIVILEGES;
SQL

log "MySQL監(jiān)控用戶創(chuàng)建成功!"

# 創(chuàng)建.my.cnf文件
cat > "$INSTALL_DIR/localhost_db.cnf" <<EOF
[client]
user=$EXPORTER_USER
password=$EXPORTER_PASS
host=localhost
EOF

chmod 600 "$INSTALL_DIR/localhost_db.cnf"
chown prometheus:prometheus "$INSTALL_DIR/localhost_db.cnf"

# 創(chuàng)建systemd服務(wù)
cat > /etc/systemd/system/mysqld_exporter.service <<EOF
[Unit]
Description=MySQL Exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=$INSTALL_DIR/mysqld_exporter \\
    --config.my-cnf=$INSTALL_DIR/localhost_db.cnf \\
    --web.listen-address=:9105
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

# 啟動服務(wù)
log "啟動 mysqld_exporter 服務(wù)..."
systemctl daemon-reload
systemctl enable --now mysqld_exporter

log "? 安裝完成!"
log "指標(biāo)地址: http://$(hostname -I | awk '{print $1}'):${PORT}/metrics"
log "服務(wù)狀態(tài): systemctl status mysqld_exporter"

添加完成后,執(zhí)行該文件:

sh mysql_exporter.sh

執(zhí)行過程還是很順利的,我們來一下終極驗證,查看mysqld_exporter服務(wù)是否啟動成功:

systemctl status mysqld_exporter

我們自動腳本就編寫成功啦!

這樣,無論你有上百臺機器都不怕啦~

眾所周知,mysql_exporter是搭配prometheus來使用的,接下來,跟我一起搭配prometheus來使用吧~

4.prometheus監(jiān)控mysql_exporter

找到prometheus的配置文件,編輯添加如下內(nèi)容(由于我是在另一臺機器上安裝的prometheus,所以寫了mysql_exporter的Ip地址,正常寫localhost就可以):

vi prometheus.yml
      - targets: ["192.168.42.146:9105"]
        labels:
          app: "mysql_exporter"

使用瀏覽器ip+9090打開promethues的頁面:

我們可以看到prometheus已經(jīng)抓取到192.168.42.146里面的mysql_exporter服務(wù)啦!

那么,現(xiàn)在我有一個疑問:**當(dāng)MySQL Exporter與Prometheus部署在同一個局域網(wǎng)內(nèi)時,監(jiān)控自然暢通無阻;但如果它們不在同一網(wǎng)絡(luò)環(huán)境——比如 Prometheus在公網(wǎng)服務(wù)器,而MySQL數(shù)據(jù)庫位于內(nèi)網(wǎng)或本地開發(fā)環(huán)境中,無法被外網(wǎng)直接訪問,這時該怎么辦?**別擔(dān)心!cpolar正是解決這類跨網(wǎng)絡(luò)監(jiān)控難題的利器。通過cpolar的內(nèi)網(wǎng)穿透能力,我們可以安全、穩(wěn)定地將內(nèi)網(wǎng)中運行的mysqld_exporter(默認(rèn)監(jiān)聽 :9105)暴露到公網(wǎng),生成一個臨時或固定的公網(wǎng)地址。Prometheus只需將該地址配置為抓取目標(biāo),即可像訪問本地服務(wù)一樣采集內(nèi)網(wǎng)MySQL的性能指標(biāo),全程無需修改防火墻策略、無需公網(wǎng)IP,也無需暴露數(shù)據(jù)庫本身。更重要的是,cpolar支持HTTPS加密、身份認(rèn)證和隧道?;睿_保監(jiān)控數(shù)據(jù)傳輸?shù)陌踩耘c可靠性。無論是遠程調(diào)試、混合云架構(gòu),還是邊緣設(shè)備監(jiān)控,cpolar都能輕松打通網(wǎng)絡(luò)壁壘,讓Prometheus的“眼睛”看得更遠、更廣。所以,無論你的數(shù)據(jù)庫藏得多深,只要有一條出網(wǎng)通道,cpolar就能幫你把監(jiān)控數(shù)據(jù)“送出去”!

5.安裝cpolar內(nèi)網(wǎng)穿透工具

cpolar 可以將你本地電腦中的服務(wù)(如 SSH、Web、數(shù)據(jù)庫)映射到公網(wǎng)。即使你在家里或外出時,也可以通過公網(wǎng)地址連接回本地運行的開發(fā)環(huán)境。

??以下是安裝cpolar步驟:

使用一鍵腳本安裝命令:

sudo curl https://get.cpolar.sh | sh

安裝完成后,執(zhí)行下方命令查看cpolar服務(wù)狀態(tài):(如圖所示即為正常啟動)

sudo systemctl status cpolar

Cpolar安裝和成功啟動服務(wù)后,在瀏覽器上輸入虛擬機主機IP加9200端口即:【ip:9200】訪問Cpolar管理界面,使用Cpolar官網(wǎng)注冊的賬號登錄,登錄后即可看到cpolar web 配置界面,接下來在web 界面配置即可:

打開瀏覽器訪問本地9200端口,使用cpolar賬戶密碼登錄即可,登錄后即可對隧道進行管理。

6.配置公網(wǎng)地址

登錄cpolar web UI管理界面后,點擊左側(cè)儀表盤的隧道管理——創(chuàng)建隧道:

  • 隧道名稱:可自定義,本例使用了:mysql_exporter,注意不要與已有的隧道名稱重復(fù)

  • 協(xié)議:http

  • 本地地址:9105

  • 域名類型:隨機域名

  • 地區(qū):選擇China Top

創(chuàng)建成功后,打開左側(cè)在線隧道列表,可以看到剛剛通過創(chuàng)建隧道生成了公網(wǎng)地址,接下來就可以在其他電腦或者移動端設(shè)備(異地)上,使用地址訪問。

Prometheus可以通過這個公網(wǎng)地址38c53143.r2.cpolar.top訪問到運行在本地9105端口的mysql_exporter服務(wù),從而抓取系統(tǒng)指標(biāo)。

      - targets: ["38c53143.r2.cpolar.top"]
        labels:
          app: "mysql_exporter"

抓取成功!

7.保留固定公網(wǎng)地址

使用cpolar為其配置二級子域名,該地址為固定地址,不會隨機變化。

點擊左側(cè)的預(yù)留,選擇保留二級子域名,地區(qū)選擇china Top,然后設(shè)置一個二級子域名名稱,我這里演示使用的是mysqll,大家可以自定義。填寫備注信息,點擊保留。

登錄cpolar web UI管理界面,點擊左側(cè)儀表盤的隧道管理——隧道列表,找到所要配置的隧道m(xù)ysql_exporter,點擊右側(cè)的編輯。

修改隧道信息,將保留成功的二級子域名配置到隧道中

  • 域名類型:選擇二級子域名
  • Sub Domain:填寫保留成功的二級子域名
  • 地區(qū): China Top

點擊更新

更新完成后,打開在線隧道列表,此時可以看到隨機的公網(wǎng)地址已經(jīng)發(fā)生變化,地址名稱也變成了保留和固定的二級子域名名稱。

最后,我們使用固定的公網(wǎng)地址在任意設(shè)備的瀏覽器中訪問,可以看到成功訪問本地部署的頁面,這樣一個永久不會變化的二級子域名公網(wǎng)網(wǎng)址即設(shè)置好了。

結(jié)尾

腳本的價值在于把手動操作變成可復(fù)制的命令。把部署流程寫進腳本里,不只是省時間,更重要的是減少人為操作帶來的差異——每臺機器的路徑、用戶權(quán)限、配置文件內(nèi)容都能保持一致,出問題的時候排查邏輯也是統(tǒng)一的。

mysql_exporter 本身接入 Prometheus 的鏈路很標(biāo)準(zhǔn):起服務(wù)、Prometheus 配 job 拉 metrics、告警規(guī)則針對具體的指標(biāo)閾值來配。cpolar 在這里解決的是 Prometheus 和 exporter 不在同一網(wǎng)絡(luò)的連通性問題,屬于特定場景下的方案。

整體來說,這套腳本適合需要批量部署或者經(jīng)常遷移環(huán)境的場景,一條命令搞定比查文檔一步步做要可靠得多。

到此這篇關(guān)于shell腳本命令搞定mysql_exporter部署,重復(fù)配置自動化的文章就介紹到這了,更多相關(guān)shell腳本部署mysql_exporter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

江城| 井陉县| 黔东| 萍乡市| 阿荣旗| 南投县| 巴塘县| 杨浦区| 凤凰县| 达孜县| 玛曲县| 广灵县| 邢台县| 木兰县| 克东县| 乌拉特中旗| 仁布县| 楚雄市| 红安县| 兴和县| 延安市| 华坪县| 揭阳市| 淳安县| 台南市| 宣恩县| 连州市| 辽宁省| 长顺县| 洛宁县| 江山市| 墨竹工卡县| 策勒县| 成都市| 佛教| 永修县| 台东市| 旺苍县| 富川| 乐清市| 云和县|