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
2
3
USE mysql;
UPDATE user SET authentication_string = PASSWORD('新密碼') WHERE User = 'root';
FLUSH PRIVILEGES;

請將 新密碼 替換為您希望設置的新密碼。

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 用戶訪問的特殊配置。例如:

  1. 確認是否有設置 skip-grant-tables(跳過權限表的設置),這樣會使得 MySQL 無法進行密碼檢查,並可能導致登錄失敗。
  2. 檢查 bind-address 設置,確保它允許本地連接(例如 127.0.0.1localhost)。

使用以下命令查看 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
user = mysql
port = 3306
bind-address = 127.0.0.1
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock

# 基本設置
max_connections = 100
skip-external-locking

# 語言與時區設置
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
default-time-zone = '+00:00'

# 緩存與性能設置
key_buffer_size = 256M
max_allowed_packet = 64M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
query_cache_size = 64M

# 日誌設置
log_error = /usr/local/mysql/data/mysql_error.log
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/data/mysql_slow_query.log
long_query_time = 2

# InnoDB 引擎設置
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
innodb_file_per_table = 1

my.cnf 配置選項詳解

[client] 部分

這一部分配置 MySQL 客戶端的參數,例如命令行工具使用的設置:

  • **port**:指定默認的 MySQL 端口號(通常為 3306)。
  • **socket**:指定 Unix Socket 文件的位置,通常用於本地連接。

[mysqld] 部分

這是 MySQL 伺服器的主要配置部分,控制伺服器的各種行為:

  1. 基本設置

    • **user**:指定運行 MySQL 伺服器的用戶(默認為 mysql)。
    • **port**:指定 MySQL 使用的端口號(默認為 3306)。
    • **bind-address**:指定 MySQL 綁定的 IP 地址。通常設為 127.0.0.1 以僅允許本地連接。如果想允許遠程連接,可以設置為 0.0.0.0 或特定 IP。
    • **datadir**:指定 MySQL 數據存儲目錄的位置。
  2. 性能調整

    • **max_connections**:指定 MySQL 允許的最大連接數,默認為 151。如果是大流量應用,應根據硬體資源增加此值。
    • **skip-external-locking**:防止 MySQL 對文件鎖使用外部鎖定,這樣可以提高性能。
  3. 語言與字符集設置

    • **character-set-server**:設置伺服器的默認字符集,通常設為 utf8mb4,以支援更多特殊字符。
    • **collation-server**:設置伺服器的字符集校對規則。
  4. 緩存與內存設置

    • **key_buffer_size**:設置索引緩存大小,適合 MyISAM 表使用。InnoDB 則主要依賴 innodb_buffer_pool_size
    • **query_cache_size**:查詢緩存大小,可以加快相同查詢的響應速度。請注意,從 MySQL 8.0 開始已棄用查詢緩存。
    • **innodb_buffer_pool_size**:設置 InnoDB 的緩存大小,建議設置為系統內存的 50%-80%,以提高性能。
  5. 日誌設置

    • **log_error**:指定錯誤日誌文件的路徑,用於記錄 MySQL 伺服器運行時發生的錯誤。
    • **slow_query_log**:是否啟用慢查詢日誌(1 為啟用)。
    • **slow_query_log_file**:指定慢查詢日誌文件的路徑。
    • **long_query_time**:設置查詢的時間閾值(單位為秒),超過這個時間的查詢會被記錄在慢查詢日誌中。
  6. InnoDB 引擎設置

    • **innodb_log_file_size**:設置 InnoDB 日誌文件的大小,通常設置為緩存池大小的 1/4。
    • **innodb_file_per_table**:為每個表創建單獨的數據文件,便於管理和備份。

如何修改 my.cnf 配置

  1. 找到 my.cnf 文件

    • 使用以下命令查找配置文件的位置:

      1
      sudo find / -name "my.cnf"
    • 常見位置是 /etc/my.cnf/usr/local/mysql/etc/my.cnf

  2. **使用文本編輯器修改 my.cnf**:

    • 可以使用 nanovi 編輯配置文件。例如:

      1
      sudo nano /etc/my.cnf
    • 修改完畢後,保存並退出編輯器。

  3. 重啟 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 的性能和行為。如果您有特定的需求或遇到問題,隨時告訴我,我會幫助您進一步設置。