新項目舊項目都需要給研發配置mysql監控,這里mysql監控對應aws 阿里云 騰訊云 華為云的云mysql產品或開源自建mysql。
exporter安裝雖然簡單,經常手動操作不免讓人心煩,一鍵完成省去繁瑣的常規操作。
配置信息對的情況下測試多次都可以正常安裝,支持一臺機器上安裝多個數據庫exporter,安裝時提供不同端口作為參數即可
指定exporter使用的用戶名、密碼和版本號。默認版本號為文檔日期所在最新版本
root@exporter-agent:/data/mysql-exporter# cat install_mysql_exporter.sh
#!/bin/bash# MySQL Exporter 一鍵安裝腳本(優化版)
# 使用方法: ./mysql_exporter_setup.sh <導出端口>set -e# 配置信息
MYSQL_HOST="db-host"
MYSQL_USER="monitor_user"
MYSQL_PASSWORD="bagayalu321"
MYSQL_PORT="3306"
VER=0.17.2# 獲取導出端口,默認為9104
EXPORTER_PORT=${1:-9104}# 基礎目錄
BASE_DIR="/data/mysql-exporter"
# 特定端口的工作目錄
WORK_DIR="${BASE_DIR}/${EXPORTER_PORT}"# 創建基礎目錄和端口特定目錄
mkdir -p $WORK_DIRecho "===> 開始安裝 MySQL Exporter 到 ${WORK_DIR}..."# 打印創建 MySQL 監控用戶的語句(僅供參考,不執行)
echo "===> MySQL 監控用戶授權語句(需手動執行):"
cat << EOF
-- 在 MySQL 中創建監控用戶的 SQL 語句:
CREATE USER '${MYSQL_MONITOR_USER}'@'%' IDENTIFIED BY '${MYSQL_MONITOR_PASSWORD}';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO '${MYSQL_MONITOR_USER}'@'%';
FLUSH PRIVILEGES;
EOFcat > $WORK_DIR/create_mysql_user.sql << EOF
-- 在 MySQL 中創建監控用戶的 SQL 語句:
CREATE USER '${MYSQL_MONITOR_USER}'@'%' IDENTIFIED BY '${MYSQL_MONITOR_PASSWORD}';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO '${MYSQL_MONITOR_USER}'@'%';
FLUSH PRIVILEGES;
EOFecho "===> 授權語句已保存到: ${WORK_DIR}/create_mysql_user.sql"
echo "===> 注意: 創建的監控用戶為 '${MYSQL_MONITOR_USER}',密碼為 '${MYSQL_MONITOR_PASSWORD}'"
echo "===> 如需修改,請編輯授權語句后手動執行"
# 清理舊的服務(如果存在)
if systemctl is-active --quiet mysql_exporter_${EXPORTER_PORT}; thenecho "===> 停止并禁用舊的 MySQL Exporter 服務..."systemctl stop mysql_exporter_${EXPORTER_PORT}systemctl disable mysql_exporter_${EXPORTER_PORT}
fi# 檢查 MySQL Exporter 是否已安裝
if [ -f "${BASE_DIR}/mysqld_exporter" ] && ${BASE_DIR}/mysqld_exporter --version &>/dev/null; thenecho "===> MySQL Exporter 已安裝,跳過下載步驟..."# 確保二進制文件可執行chmod +x ${BASE_DIR}/mysqld_exporter
elseecho "===> 下載并安裝 MySQL Exporter..."cd $BASE_DIRwget https://github.com/prometheus/mysqld_exporter/releases/download/v${VER}/mysqld_exporter-${VER}.linux-amd64.tar.gztar xvfz mysqld_exporter-${VER}.linux-amd64.tar.gzmv mysqld_exporter-${VER}.linux-amd64/mysqld_exporter .chmod +x mysqld_exporterrm -rf mysqld_exporter-${VER}.linux-amd64*
fi# 創建配置文件
echo "===> 創建 MySQL Exporter 配置文件..."
cat > $WORK_DIR/.my.cnf << EOF
[client]
host=$MYSQL_HOST
port=$MYSQL_PORT
user=$MYSQL_MONITOR_USER
password=$MYSQL_PASSWORD
EOFchmod 600 $WORK_DIR/.my.cnf# 保存配置信息
cat > $WORK_DIR/config.info << EOF
# MySQL Exporter 配置信息
MYSQL_HOST=$MYSQL_HOST
MYSQL_PORT=$MYSQL_PORT
MYSQL_USER=$MYSQL_USER
MYSQL_PASSWORD=$MYSQL_PASSWORD
EXPORTER_PORT=$EXPORTER_PORT
EOFchmod 600 $WORK_DIR/config.info# 創建 systemd 服務文件
echo "===> 配置 systemd 服務..."
cat > /etc/systemd/system/mysql_exporter_${EXPORTER_PORT}.service << EOF
[Unit]
Description=MySQL Exporter for Prometheus (Port ${EXPORTER_PORT})
After=network.target[Service]
User=root
Group=root
Type=simple
ExecStart=${BASE_DIR}/mysqld_exporter --config.my-cnf=${WORK_DIR}/.my.cnf --web.listen-address=:${EXPORTER_PORT}
Restart=always
RestartSec=10[Install]
WantedBy=multi-user.target
EOF# 重新加載 systemd 配置
systemctl daemon-reload# 啟動 MySQL Exporter 服務
echo "===> 啟動 MySQL Exporter 服務..."
systemctl enable mysql_exporter_${EXPORTER_PORT}
systemctl start mysql_exporter_${EXPORTER_PORT}# 等待服務啟動
sleep 5# 檢查服務狀態
if systemctl is-active --quiet mysql_exporter_${EXPORTER_PORT}; thenecho "===> MySQL Exporter 安裝成功!服務正在運行"echo "===> 監控端口: ${EXPORTER_PORT}"echo "===> 可通過訪問 http://$(hostname -I | awk '{print $1}'):${EXPORTER_PORT}/metrics 測試"# 創建清理腳本cat > $WORK_DIR/uninstall.sh << EOF
#!/bin/bash
# 卸載此 MySQL Exporter 實例的腳本systemctl stop mysql_exporter_${EXPORTER_PORT}
systemctl disable mysql_exporter_${EXPORTER_PORT}
rm -f /etc/systemd/system/mysql_exporter_${EXPORTER_PORT}.service
systemctl daemon-reloadecho "MySQL Exporter (端口 ${EXPORTER_PORT}) 已停止并禁用"
echo "可以手動刪除目錄: ${WORK_DIR}"
EOFchmod +x $WORK_DIR/uninstall.shecho "===> 卸載腳本已創建: ${WORK_DIR}/uninstall.sh"
elseecho "===> 安裝失敗,服務未能正常啟動"echo "===> 請檢查日志: journalctl -u mysql_exporter_${EXPORTER_PORT}"exit 1
fiecho "===> 所有文件均存放在: ${WORK_DIR}"
echo "===> 二進制文件位置: ${BASE_DIR}/mysqld_exporter"
echo "===> 配置信息已保存到: ${WORK_DIR}/config.info"
echo "===> 監控用戶創建腳本: ${WORK_DIR}/create_mysql_user.sql"
echo "===> 安裝完成!"