2026-06-10 mySQL *ERROR 1045 (28000)
2026-06-10 mySQL *ERROR 1045 (28000)
我:
???MacBook-Air:bin root# mysql -u root
ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: NO)
???MacBook-Air:bin root#
GPT:
您遇到了 ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ 的錯誤,這是因為您在沒有提供密碼的情況下嘗試以 root 身份進入 MySQL,而 MySQL 需要驗證密碼。因此,出現了 “Access denied” 的錯誤信息。
您可以嘗試以下步驟來解決此問題:
方法 1:使用 -p 提供密碼
請嘗試以下命令,並根據提示輸入 root 使用者的密碼:
1 | mysql -u root -p |
這會要求您輸入 MySQL root 密碼。如果您忘記了這個密碼,請參考以下步驟來重置密碼。
方法 2:重置 Root 密碼
如果您忘記了 root 密碼,可以通過以下步驟來重置:
1. 停止 MySQL 服務
首先需要停止 MySQL 服務,以便可以在安全模式下啟動 MySQL:
1 | sudo /usr/local/mysql/support-files/mysql.server stop |
2. 啟動 MySQL 到安全模式
啟動 MySQL 進入安全模式,這樣可以跳過權限檢查,不需要密碼就可以登錄:
1 | sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables & |
這個命令會啟動 MySQL,並允許您在不提供密碼的情況下訪問 MySQL。
3. 無密碼登錄 MySQL
現在使用以下命令以 root 身份登錄:
1 | mysql -u root |
這次應該能夠成功進入 MySQL 提示符 **mysql>**。
4. 重置 Root 密碼
在 MySQL 提示符中執行以下 SQL 命令來重置 root 密碼:
1 | USE mysql; |
請將 新密碼 替換為您希望設置的新密碼。
5. 重啟 MySQL 服務
輸入 exit 退出 MySQL 提示符,然後重新啟動 MySQL 服務:
1 | sudo /usr/local/mysql/support-files/mysql.server start |
6. 使用新密碼登錄
現在可以使用新設置的密碼登錄 MySQL:
1 | mysql -u root -p |
輸入您剛剛設置的新密碼後,應該能夠順利登錄。
方法 3:檢查 my.cnf 配置
有時候 my.cnf 配置文件中可能包含一些會影響 root 用戶訪問的設置。您可以查看 my.cnf 文件,確認是否有關於 root 用戶訪問的特殊配置。例如:
- 確認是否有設置
skip-grant-tables(跳過權限表的設置),這樣會使得 MySQL 無法進行密碼檢查,並可能導致登錄失敗。 - 檢查
bind-address設置,確保它允許本地連接(例如127.0.0.1或localhost)。
使用以下命令查看 my.cnf 文件的位置:
1 | sudo find / -name "my.cnf" |
總結
- Access Denied 的錯誤通常是由於密碼不正確或者沒有提供密碼造成的。可以使用
-p選項來提示輸入密碼。 - 如果忘記 root 密碼,可以通過安全模式(
--skip-grant-tables)進入 MySQL 並重置密碼。 - 確認 MySQL 配置文件中沒有影響到 root 登錄的設置。
如果還有其他問題或步驟中遇到困難,隨時告訴我,我會幫助您解決。
我:
my.cnf 該怎麼配置?
GPT:my.cnf 是 MySQL 的主要配置文件,用於設置 MySQL 伺服器的各種參數,比如端口號、數據目錄、緩存大小、網絡設置等。以下是一些常見的配置選項以及如何配置它們的建議。
my.cnf 的位置
my.cnf 文件通常可以在以下幾個位置找到,具體位置取決於 MySQL 的安裝方式:
/etc/my.cnf或/etc/mysql/my.cnf(全局配置文件)/usr/local/mysql/etc/my.cnf(自定義安裝的 MySQL)~/.my.cnf(用戶級別的配置)
如果您不知道具體位置,可以使用以下命令查找:
1 | sudo find / -name "my.cnf" |
配置 my.cnf 的基本結構
my.cnf 文件使用分區節來配置不同服務的參數,例如 [mysqld] 針對 MySQL 伺服器,[client] 針對 MySQL 客戶端。以下是常見的配置結構:
1 | [client] |
my.cnf 配置選項詳解
[client] 部分
這一部分配置 MySQL 客戶端的參數,例如命令行工具使用的設置:
- **
port**:指定默認的 MySQL 端口號(通常為3306)。 - **
socket**:指定 Unix Socket 文件的位置,通常用於本地連接。
[mysqld] 部分
這是 MySQL 伺服器的主要配置部分,控制伺服器的各種行為:
基本設置
- **
user**:指定運行 MySQL 伺服器的用戶(默認為mysql)。 - **
port**:指定 MySQL 使用的端口號(默認為3306)。 - **
bind-address**:指定 MySQL 綁定的 IP 地址。通常設為127.0.0.1以僅允許本地連接。如果想允許遠程連接,可以設置為0.0.0.0或特定 IP。 - **
datadir**:指定 MySQL 數據存儲目錄的位置。
- **
性能調整
- **
max_connections**:指定 MySQL 允許的最大連接數,默認為151。如果是大流量應用,應根據硬體資源增加此值。 - **
skip-external-locking**:防止 MySQL 對文件鎖使用外部鎖定,這樣可以提高性能。
- **
語言與字符集設置
- **
character-set-server**:設置伺服器的默認字符集,通常設為utf8mb4,以支援更多特殊字符。 - **
collation-server**:設置伺服器的字符集校對規則。
- **
緩存與內存設置
- **
key_buffer_size**:設置索引緩存大小,適合 MyISAM 表使用。InnoDB 則主要依賴innodb_buffer_pool_size。 - **
query_cache_size**:查詢緩存大小,可以加快相同查詢的響應速度。請注意,從 MySQL 8.0 開始已棄用查詢緩存。 - **
innodb_buffer_pool_size**:設置 InnoDB 的緩存大小,建議設置為系統內存的 50%-80%,以提高性能。
- **
日誌設置
- **
log_error**:指定錯誤日誌文件的路徑,用於記錄 MySQL 伺服器運行時發生的錯誤。 - **
slow_query_log**:是否啟用慢查詢日誌(1為啟用)。 - **
slow_query_log_file**:指定慢查詢日誌文件的路徑。 - **
long_query_time**:設置查詢的時間閾值(單位為秒),超過這個時間的查詢會被記錄在慢查詢日誌中。
- **
InnoDB 引擎設置
- **
innodb_log_file_size**:設置 InnoDB 日誌文件的大小,通常設置為緩存池大小的 1/4。 - **
innodb_file_per_table**:為每個表創建單獨的數據文件,便於管理和備份。
- **
如何修改 my.cnf 配置
找到
my.cnf文件:使用以下命令查找配置文件的位置:
1
sudo find / -name "my.cnf"
常見位置是
/etc/my.cnf或/usr/local/mysql/etc/my.cnf。
**使用文本編輯器修改
my.cnf**:可以使用 nano 或 vi 編輯配置文件。例如:
1
sudo nano /etc/my.cnf
修改完畢後,保存並退出編輯器。
重啟 MySQL 服務以應用更改:
修改完成後,您需要重新啟動 MySQL 服務來使配置生效:
1
sudo /usr/local/mysql/support-files/mysql.server restart
或者,如果您使用的是 Homebrew 安裝的 MySQL:
1
brew services restart mysql
小結
my.cnf文件 用於配置 MySQL 伺服器的各種行為,包括網絡設置、緩存、日誌、性能調優等。- 常見的配置項目包括端口號、數據目錄、字符集、最大連接數、緩存大小等。
- 修改
my.cnf後需要重啟 MySQL 服務以使更改生效。
這些配置可以根據您的需求進行調整,以優化 MySQL 的性能和行為。如果您有特定的需求或遇到問題,隨時告訴我,我會幫助您進一步設置。