【MySQL8】 安裝后的簡單配置(主要解決navicat等客戶端登陸報錯問題)


一、navicat等客戶端登陸報錯的原因

使用mysql,多數我們還是喜歡用可視化的客戶端登陸管理的,個人比較喜歡用navicat。一般裝好服務器以后,習慣建一個遠程的登陸帳號,在mysql8服務器上,用老方法創建的帳號,可以用mysql自己命令行正常登入,但是用navicat等軟件登入卻會提示錯誤

原因是MySQL8的新特性,MySQL8默認使用 caching_sha2_password 身份驗證機制。舊客戶端不支持這種驗證,當然就無法登入了。

所以解決辦法也很簡單,只需要我們在服務器上用舊的認證機制(mysql_native_password)設置密碼就可以了。舊模式不是MySQL8默認模式,所以需要在創建用戶或者修改密碼時,明確指定為mysql_native_password模式。

首先我們試驗下,用默認模式創建用戶,

執行 ALTER USER 'root'@'%' IDENTIFIED BY 'aaabbb'; 創建的記錄是這樣的

這種情況下,客戶端登入不會成功

如果在創建/或者修改命令中 用WITH mysql_native_password 指明密碼模式

例如ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'aaabbb';

執行后的用戶記錄如下,可見plugin被設置為了mysql_native_password

此時再次測試,客戶端就可以正常登入了。

 

二、例:完整的創建一個遠程管理員帳號

1、創建一個可以遠程登陸的root用戶

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密碼';

注意@后面“%”允許遠程登入,WITH mysql_native_password 修飾允許舊模式的客戶端登入

2、為賬戶開放權限

grant all privileges on *.* to root@'%';

flush privileges;

 

三、例:創建一個普通用戶並為其分配一個數據庫

這是開發中比較常見的需求,即給特定用戶指定數據庫內部的全部權限

1、添加一般賬戶

CREATE USER '用戶名'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';

2、創建新數據庫

CREATE DATABASE IF NOT EXISTS 數據庫名;
或者干脆
CREATE DATABASE 數據庫名;

以前常常還要指定默認utf8字符集,現在MySQL 8.0的默認字符集是utf8mb4,所以默認即可。

默認生成的數據庫字符集是這樣的

3、新賬戶授權新數據庫

grant all privileges on 數據庫名.* to 用戶名@'%';

為方便常常用戶名和數據庫名設為相同以便管理。

附:其他常用的命令

平時配置數據庫少,很多命令不算熟悉,所以羅列起來,用的時候復制粘貼加修改是最方便的了。。。

創建用戶(WITH mysql_native_password 是可選的,為了適應客戶端兼容性)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
設置/修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密碼';
ALTER USER 'root'@'localhost' IDENTIFIED BY '密碼';
alter user 'yzd'@'%' identified by 'aaa';
清除密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '';
UPDATE user SET authentication_string='' WHERE user='root';
刪除用戶
drop user 用戶名@ localhost;
Delete FROM mysql.user Where User="用戶名" and Host=”localhost”;
分配權限
grant all privileges on *.* to root@'%';
刷新權限
flush privileges;
創建數據庫
CREATE DATABASE IF NOT EXISTS yzd DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
查詢數據庫列表
show databases;
查詢數據表列表
show tables;
查詢用戶列表
select host,user,plugin,authentication_string from mysql.user;
查詢當前用戶名
select user();
查詢當前用戶權限
show grants;

 

mysql8有很多新特性,密碼丟失后找回的操作也和舊版不同了。這幾天為恢復一個python項目后台庫密碼,折騰了不少時間,網上mysql5的手段反復試了都走不通。

后來發現,MySQL8有另外的密碼復位辦法,繼續探索中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM