為Prometheus創(chuàng)建MySQL訪問賬號
使用Prometheus收集MySQL數(shù)據(jù)庫監(jiān)控?cái)?shù)據(jù)時(shí),需要?jiǎng)?chuàng)建一個(gè)供Prometheus使用的MySQL訪問賬號,并最小化授予只讀權(quán)限。本文將以mysqld_exporter
為例,為您演示創(chuàng)建的全部步驟。
示例說明
$
和mysql>
為命令提示符,在輸入命令時(shí),請避免輸入提示符。#
和--
為注釋前綴,在輸入命令時(shí),請避免輸入注釋前綴及注釋內(nèi)容。
操作步驟
MySQL 8.0版本之后禁止使用GRANT
語句創(chuàng)建新用戶,創(chuàng)建用戶與授權(quán)操作需要分開執(zhí)行。因此,本文示例將分為創(chuàng)建和授權(quán)兩個(gè)步驟。
MySQL 8.0版本之前的用戶可以在登錄賬號后,參考步驟三:授權(quán)所示操作和注釋,創(chuàng)建并授權(quán)賬戶。
步驟一:登錄root賬戶或管理員賬戶
啟動(dòng)并登錄MySQL,以root用戶為例。
$ mysql -u root -p
# 在Enter password后輸入root用戶密碼
Enter password: password
步驟二:創(chuàng)建賬號
在MySQL命令行中執(zhí)行以下命令,創(chuàng)建一個(gè)賬號
mysqld_exporter
。mysql> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'password';
localhost
:允許連接的主機(jī)IP,可根據(jù)實(shí)際情況替換。mysqld_exporter
和password
是自定義的用戶名和密碼,可以根據(jù)實(shí)際情況進(jìn)行替換。
驗(yàn)證(可選)
在命令行中執(zhí)行以下命令,若查詢到用戶及對應(yīng)主機(jī)信息,則用戶
mysqld_exporter
創(chuàng)建成功。-- 從mysql.user表中查詢用戶信息 mysql> SELECT User,Host FROM mysql.user WHERE User = 'mysqld_exporter'; -- 查詢結(jié)果 +-----------------+-----------+ | User | Host | +-----------------+-----------+ | mysqld_exporter | localhost | +-----------------+-----------+
步驟三:授權(quán)
在命令行中執(zhí)行授權(quán)命令,對
mysqld_exporter
賬戶進(jìn)行最小化授權(quán)。-- 添加對所有表的主從服務(wù)器狀態(tài)檢查權(quán)限和進(jìn)程查看權(quán)限。 -- 直接使用GRANT語句創(chuàng)建新用戶時(shí),建議在末尾添加[IDENTIFIED BY 'password']以設(shè)置用戶密碼。 mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost'; -- 添加performance_schema.* 表的讀取權(quán)限。 mysql> GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost'; -- 重新加載權(quán)限表,使賬號授權(quán)生效。 mysql> FLUSH PRIVILEGES;
REPLICATION CLIENT
:授權(quán)語句,允許賬戶檢查主/從服務(wù)器狀態(tài)。PROCESS
:授權(quán)語句,允許賬戶查看MySQL中的進(jìn)程信息。
驗(yàn)證(可選)
在命令行中執(zhí)行以下命令,可檢查用戶是否已被授予相應(yīng)權(quán)限。
-- 查看用戶持有權(quán)限 mysql> SHOW GRANTS FOR 'mysqld_exporter'@'localhost'; -- 查詢結(jié)果 +---------------------------------------------------------------------------+ | 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'
這個(gè)錯(cuò)誤表示創(chuàng)建用戶失敗,因?yàn)橐呀?jīng)存在具有相同名稱的用戶。要解決此問題,可以首先嘗試刪除現(xiàn)有用戶,然后再創(chuàng)建新的用戶。刪除用戶命令:
mysql> DROP USER 'username'@'hostname';
Access denied for user 'username'@'hostname'(using password: YES/NO)
這個(gè)錯(cuò)誤表示MySQL服務(wù)器拒絕了連接嘗試,因?yàn)樘峁┑挠脩裘蛎艽a不正確。要解決此問題,可以檢查使用的用戶名和密碼是否正確,并確保已為用戶授予適當(dāng)?shù)臋?quán)限。
Can't find any matching row in the user table
這個(gè)錯(cuò)誤表示使用的用戶名或主機(jī)名在MySQL權(quán)限列表中不存在。要解決此問題,可以檢查是否有拼寫錯(cuò)誤,并確保正確地輸入了主機(jī)名。如確認(rèn)拼寫無誤可嘗試使用
FLUSH PRIVILEGES
命令刷新權(quán)限列表。
相關(guān)文檔
使用Prometheus收集MySQL數(shù)據(jù)庫監(jiān)控?cái)?shù)據(jù)的具體操作,請參考如何使用Prometheus監(jiān)控MySQL。