使用Prometheus收集MySQL資料庫監控資料時,需要建立一個供Prometheus使用的MySQL訪問帳號,並最小化授予唯讀許可權。本文將以mysqld_exporter
為例,為您示範建立的全部步驟。
樣本說明
$
和mysql>
為命令提示字元,在輸入命令時,請避免輸入提示符。#
和--
為注釋首碼,在輸入命令時,請避免輸入注釋首碼及注釋內容。
操作步驟
MySQL 8.0版本之後禁止使用GRANT
語句建立新使用者,建立使用者與授權操作需要分開執行。因此,本文樣本將分為建立和授權兩個步驟。
MySQL 8.0版本之前的使用者可以在登入帳號後,參考步驟三:授權所示操作和注釋,建立並授權賬戶。
步驟一:登入root賬戶或管理員賬戶
啟動並登入MySQL,以root使用者為例。
$ mysql -u root -p
# 在Enter password後輸入root使用者密碼
Enter password: password
步驟二:建立帳號
在MySQL命令列中執行以下命令,建立一個帳號
mysqld_exporter
。mysql> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'password';
localhost
:允許串連的主機IP,可根據實際情況替換。mysqld_exporter
和password
是自訂的使用者名稱和密碼,可以根據實際情況進行替換。
驗證(可選)
在命令列中執行以下命令,若查詢到使用者及對應主機資訊,則使用者
mysqld_exporter
建立成功。-- 從mysql.user表中查詢使用者資訊 mysql> SELECT User,Host FROM mysql.user WHERE User = 'mysqld_exporter'; -- 查詢結果 +-----------------+-----------+ | User | Host | +-----------------+-----------+ | mysqld_exporter | localhost | +-----------------+-----------+
步驟三:授權
在命令列中執行授權命令,對
mysqld_exporter
賬戶進行最小化授權。-- 添加對所有表的主從伺服器狀態檢查許可權和進程查看許可權。 -- 直接使用GRANT語句建立新使用者時,建議在末尾添加[IDENTIFIED BY 'password']以設定使用者密碼。 mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost'; -- 添加performance_schema.* 表的讀取許可權。 mysql> GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost'; -- 重新載入許可權表,使帳號授權生效。 mysql> FLUSH PRIVILEGES;
REPLICATION CLIENT
:授權語句,允許賬戶檢查主/從伺服器狀態。PROCESS
:授權語句,允許賬戶查看MySQL中的進程資訊。
驗證(可選)
在命令列中執行以下命令,可檢查使用者是否已被授予相應許可權。
-- 查看使用者持有許可權 mysql> SHOW GRANTS FOR 'mysqld_exporter'@'localhost'; -- 查詢結果 +---------------------------------------------------------------------------+ | Grants for mysqld_exporter@localhost | +---------------------------------------------------------------------------+ | GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost' | | GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost' | +---------------------------------------------------------------------------+
常見問題及解決方案
Operation CREATE USER failed for 'usernam'@'hostname'
這個錯誤表示建立使用者失敗,因為已經存在具有相同名稱的使用者。要解決此問題,可以首先嘗試刪除現有使用者,然後再建立新的使用者。刪除使用者命令:
mysql> DROP USER 'username'@'hostname';
Access denied for user 'username'@'hostname'(using password: YES/NO)
這個錯誤表示MySQL伺服器拒絕了串連嘗試,因為提供的使用者名稱或密碼不正確。要解決此問題,可以檢查使用的使用者名稱和密碼是否正確,並確保已為使用者授予適當的許可權。
Can't find any matching row in the user table
這個錯誤表示使用的使用者名稱或主機名稱在MySQL許可權列表中不存在。要解決此問題,可以檢查是否有拼字錯誤,並確保正確地輸入了主機名稱。如確認拼字無誤可嘗試使用
FLUSH PRIVILEGES
命令重新整理許可權列表。
相關文檔
使用Prometheus收集MySQL資料庫監控資料的具體操作,請參考如何使用Prometheus監控MySQL。