檢查 root 用戶的權限
查看該用戶針對這個數據庫的權限
-- 如果在終端連接mysql時需要
mysql -u root -p
-- 查看用戶權限
SELECT user, host FROM mysql.user WHERE user = 'root';
可以看的出來root有他的訪問權限,如過沒有localhost或者% 說明沒有訪問權限
添加權限
數據庫權限包括:
SELECT:允許用戶讀取數據。
INSERT:允許用戶插入數據。
UPDATE:允許用戶更新數據。
DELETE:允許用戶刪除數據。
CREATE:允許用戶創建數據庫和表。
DROP:允許用戶刪除數據庫和表。
ALTER:允許用戶修改表結構。
INDEX:允許用戶創建或刪除索引。
EXECUTE:允許用戶執行存儲過程。
FILE:允許用戶在服務器上讀寫文件。
GRANT OPTION:允許用戶授予或撤銷其他用戶的權限。
如果需要如果允許所有機器那么用%,可以執行如下語句添加權限
分配權限語句:
GRANT 權限列表 ON 數據庫.表 TO ‘用戶名’@‘主機’;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
執行了GRANT語句后,你需要使用FLUSH PRIVILEGES;命令來使權限更改立即生效(尤其是在直接編輯MySQL的授權表后):
FLUSH PRIVILEGES;
重置root 密碼
停止 MySQL 服務
sudo systemctl stop mysql
以安全模式啟動 MySQL
sudo mysqld_safe --skip-grant-tables &
登錄 MySQL(無需密碼)
mysql -u root
重置 root 密碼
USE mysql;
UPDATE user SET authentication_string=PASSWORD(‘new_password’) WHERE User=‘root’;
FLUSH PRIVILEGES;
EXIT;
重啟 MySQL 服務
sudo systemctl restart mysql
root 用戶已經允許從任意主機(%)和本地(localhost)登錄,但仍然無法遠程連接,
防火墻配置
檢查服務器防火墻
確保服務器的防火墻允許 MySQL 端口(默認是 3306)的入站連接。例如
如果使用 ufw(Ubuntu):
sudo ufw allow 3306/tcp
如果使用 firewalld(CentOS):
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
檢查云服務器安全組
如果使用云服務器(如 AWS、阿里云等),確保安全組規則允許從遠程 IP 地址訪問 MySQL 端口(3306)
MySQL 配置問題
檢查 bind-address 配置
1、MySQL 默認只監聽本地地址(127.0.0.1),需要修改配置以允許遠程連接。
2、打開 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf)。
找到 bind-address 配置項,將其改為 0.0.0.0(監聽所有網絡接口)或服務器的公網 IP 地址
[mysqld]
bind-address = 0.0.0.0
#保存文件并重啟 MySQL 服務
sudo systemctl restart mysql
檢查 skip-networking 配置
確保 MySQL 配置文件中沒有啟用 skip-networking。如果存在該配置項,將其注釋或刪除
#skip-networking