前言
為了MySQL8.0.28安裝教程我竟然在MySQL官方文檔逛了一天,至此獻給想入門MySQL8.0的初學者。以目前最新版本的MySQL8.0.28為示例進行安裝與初步使用的詳細講解,面向初學者的詳細教程。無論是Windows還是Linux上安裝,咱都會。這也許是迄今為止全網最最最詳細的MySQL8.0.28的安裝與使用教程。
溫故而知新,可以為師矣。咱缺的是學習的途徑嗎?答案并不是,而是缺乏學習的方法。官方文檔是很詳細的,而且是權威的,其它的那些書籍、博文啊都是基于官方文檔以及自己的使用經驗總結的。寫這篇文章的用意,希望大家可以總結自己的學習方法,善于利用官方文檔來提升自己。
建議初學者多在指令行視窗下進行練習,熟能生巧。達到一定的熟練程度,再借助用戶端工具提高我們的工作效率。最終目的是啥?活下去呗,提高撈金能力。當然開個玩笑,回到正題,接着往下看。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLj9mcw91N5UCR4USNFVyN4UyQ4UiNFViRBViQBVyNFVyNCVCO4UiNFViMBVSRBVSNFVCNBViQCVCNFVCRCVSM5USNFVCN4USQ5UyNFVCMugDbxNXethTQlQTOlcTRlYkQlQkQlQTRlUDOlADOlgTRlYTQlQUQlUTRlQUOlgDOlUTRl8CXzV2Zh1WavwlclR3ch12LcdXYy9CXn1Wavw1an5WY3lHZvwVbvNmLlVGdpd2Lc9CX6MHc0RHaiojIsJye.jpg)
從下載下傳到安裝,再到忘記密碼解決方案。一步步使用指令行視窗學會基本操作,然後使用用戶端遠端連接配接工具。最後配合時下比較火熱的Java語言進行示範如何使用JDBC連接配接最新的MySQL8.0資料庫,以及執行查詢傳回結果。
正文
咱也不多哔哔,直接上幹貨,要的就是實用性和成本效益!
一、MySQL8.0.28下載下傳
可以下載下傳msi檔案一鍵安裝或者解壓版zip檔案進行指令行初始化安裝。
MySQL官網下載下傳位址
https://dev.mysql.com/downloads/mysql/
1、Windows版本下載下傳
在Windows下可以選擇下載下傳msi檔案或者解壓版zip檔案。一般使用,選擇我使用紫色框線選中的即可。關于下面的Debug Test Suite,是帶有許多的測試套件在裡面,對于有測試需求的人員可以進行下載下傳。
2、Linux版本下載下傳
根據自己需要的Linux發行版版本适配的MySQL進行選擇。比如,我個人選擇的是自己比較熟悉的Redhat7系列進行下載下傳。同樣有bundle版本,包含了一些插件和依賴在裡面,便于使用rpm包安裝。安裝單個的server服務,需要安裝其它的依賴包比較繁瑣。對于初學者,建議直接下載下傳RPM bundle版本。我偏不,就要折騰。那也行,請接着往下看,一樣提供了詳細安裝步驟。
3、注意事項
一般人可以能沒仔細看,官方會提示登入,加了button按鈕字型非常顯眼,而下面的的我需要立即下載下傳則字型很小。是以注意了,選擇下面的No thanks,我需要立即下載下傳。選擇的是社群版本,免費提供下載下傳。
二、MySQL8.0安裝
初學者嘗鮮,建議在Windows下安裝。
一般情況,預設安裝一個MySQL版本服務執行個體。也不排除預算有限,在同台伺服器上安裝多個執行個體進行測試。預設端口3306,如果在釋出(生産)環境建議修改預設端口,達到不讓别人一下就猜到的目的。接下來安裝測試多個MySQL服務版本共存一個作業系統下,隻針對于Windows下安裝多個服務(沒有使用虛拟機工具,真機環境下測試)。Linux下有便捷的yum源以及apt方式安裝,一鍵安裝所需依賴,但也有比較繁瑣的rpm包安裝。
1、Windows下安裝
配置環境變量,編輯系統環境變量,控制台>所有控制台項>系統>進階系統配置>系統環境變量:
#變量名
MySQL_HOME
#變量值
D:\work\mysql-8.0.28-winx64\bin
msi檔案安裝就不介紹了,傻瓜式的一鍵安裝,注意選擇路徑。
主要介紹解壓版本zip的安裝與執行個體化:
mysql-8.0.28-winx64.zip
1.1、解壓上面準備的安裝包mysql-8.0.28-winx64.zip
在解壓後的D:\work\mysql-8.0.28-winx64目下新增my.ini檔案,預設解壓版是沒有的。然後加入如下配置:
[client]
# 設定mysql用戶端預設字元集
default-character-set=utf8
[mysqld]
# 設定3307端口,有多個服務,為了不沖突修改預設的3306端口為3307
port=3307
# 設定mysql的安裝目錄
basedir=D:\\work\\mysql-8.0.28-winx64
# 設定 mysql資料庫存放目錄
datadir=D:\\work\\mysql-8.0.28-winx64\\data
# 允許最大連接配接數
max_connections=20
# 服務端使用的字元集預設為8比特編碼的latin1字元集
character-set-server=utf8
# 建立新表時将使用的預設存儲引擎
default-storage-engine=INNODB
1.2、執行個體化
以管理者身份運作CMD指令視窗,切換到mysql解壓後的目錄下:
-- 第一步執行d:,切換到D盤
d:
-- 第二步執行cd指令,切換到個人安裝mysql的bin目錄下
cd D:\work\mysql-8.0.28-winx64\
設定為空密碼,去掉不必要的麻煩。
mysqld --initialize-insecure
1.3、安裝服務
進入到解壓後MySQL的bin目錄下,執行安裝服務指令:
cd D:\work\mysql-8.0.28-winx64\bin
mysqld install
mysqld install --service -mysql8
如果沒有安裝多個服務,使用mysqld install即可。可以不用指定服務名,預設的服務名為MySQL。
1.4、服務指令使用,需要管理者身份運作CMD指令,注意看我的路徑是在bin目錄下執行的
我沒有配置MySQL8的系統環境變量,是以都在MySQL的bin目錄中執行指令。
啟動服務net start mysql
# 啟動服務
net start mysql
D:\work\mysql-8.0.28-winx64\bin>net start mysql8
MySQL8 服務正在啟動 .
MySQL8 服務已經啟動成功。
停止服務net stop mysql
# 停止服務
net stop mysql
D:\work\mysql-8.0.28-winx64\bin>net stop mysql8
MySQL8 服務正在停止..
MySQL8 服務已成功停止。
删除服務sc delete mysql
# 删除服務
sc delete mysql
# 或者mysqld remove删除服務,需要在mysql的bin目錄下執行mysqld指令
mysqld remove mysql
1.5、注意事項
# 安裝服務指定了服務名為MySQL8
計算機\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8
# 或者是MySQL
計算機\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL
安裝服務指定了服務名為MySQL8。在下面的多執行個體服務共存也提到過,需要将原始殘留的系統資料庫删掉,重新開機電腦,再進行安裝即可。
出現了丢失MSVCR120.dll,缺少元件,安裝以下元件解決
vcredist_x64.exe
vcredist_x86.exe
Download Visual C++ Redistributable Packages for Visual Studio 2013 from Official Microsoft Download Center
注意:使用了mysqld -initialize,密碼是随機生成的,在mysql的錯誤日志中可以找到
例如我的日志(mysql的data中以.err結尾的檔案)
A temporary password is generated for root@localhost: 6hk20yueza=M
修改密碼的指令
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼'
之是以在Windows下介紹的如此詳細,是因為我們平時的工作環境更多的是在Windows下進行的。就算使用Linux環境一般也是使用虛拟機配合Linux發行版,再就是雲伺服器了。MySQL的一些指令都熟悉了,Linux下安裝還能難倒你嗎?直接翻一翻官方文檔即可。
2、Linux下安裝
建議初學者不要像我這樣去安裝rpm包,你可以直接下載下傳rpm bundle,或者使用mysql官方的yum源。個人有多年Linux使用經驗,以及有一定的實際工作經驗;知道如何判斷哪些包是必須的,以及哪些需要被替換掉。
一定要注意Linux作業系統的權限問題,權限在最小範圍内滿足即可。
2.1、準備好安裝包
直接在官網下載下傳,或者使用wget指令下載下傳都可以,同樣可以使用官網的yum源進行安裝。亦或是使用apt指令擷取安裝。至于為什麼一些Linux發行版将MySQL從預設中移除了,因為MySQL被Oracle收購後存在閉源的風險。取而代之的是她的妹妹MariaDB,這也是為什麼我在安裝的時候提到了MariaDB。
2.2、安裝rpm包
系統會提示哪些是需要的依賴包,是以我事先準備需要的依賴包。
[mysql@localhost ~]$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-server-8.0.28-1.el7.x86_64.rpm: 頭V4 RSA/SHA256 Signature, 密鑰 ID 3a79bd29: NOKEY
錯誤:依賴檢測失敗:
mysql-community-client(x86-64) >= 8.0.11 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
mysql-community-common(x86-64) = 8.0.28-1.el7 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
mysql-community-icu-data-files = 8.0.28-1.el7 被 mysql-community-server-8.0.28-1.el7.x86_64 需要
[root@localhost mysql]# rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm: 頭V4 RSA/SHA256 Signature, 密鑰 ID 3a79bd29: NOKEY
準備中... ################################# [100%]
正在更新/安裝...
1:mysql-community-icu-data-files-8.################################# [100%]
[root@localhost mysql]# rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-common-8.0.28-1.el7.x86_64.rpm: 頭V4 RSA/SHA256 Signature, 密鑰 ID 3a79bd29: NOKEY
準備中... ################################# [100%]
正在更新/安裝...
1:mysql-community-common-8.0.28-1.e################################# [100%]
[root@localhost mysql]# rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
警告:mysql-community-client-8.0.28-1.el7.x86_64.rpm: 頭V4 RSA/SHA256 Signature, 密鑰 ID 3a79bd29: NOKEY
錯誤:依賴檢測失敗:
mysql-community-client-plugins = 8.0.28-1.el7 被 mysql-community-client-8.0.28-1.el7.x86_64 需要
mysql-community-libs(x86-64) >= 8.0.11 被 mysql-community-client-8.0.28-1.el7.x86_64 需要
2.2.1、安裝依賴包,然後使用
rpm -qa | grep mysql
查詢哪些被安裝了。怎麼傳到伺服器上,簡單一點scp指令即可。
rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64
rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64
[root@localhost mysql]# rpm -qa | grep mysql
2.2.2、Redhat7系列需要解除安裝原有的mariadb-libs,替換為mysql-community-libs依賴
$ yum remove mariadb-libs
2.2.3、正式安裝server
$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
檢視安裝的版本Ver 8.0.28 for Linux on x86_64
[mysql@localhost ~]$ mysqladmin --version
mysqladmin Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
2.2.4、賦予mysql安裝目錄所有者為mysql使用者,rpm包預設安裝後的路徑在/var/lib/mysql。在授予mysql使用者所有者和所屬組權限之後,你可以使用mysql使用者進行登入或者啟動服務與關閉服務。
#添加mysql組
$ groupadd mysql
#新增mysql使用者到mysql組中
$ useradd -g mysql mysql
#修改mysql使用者密碼
$ mysql passwd
#修改所有者
$ chown -R mysql:mysql /var/lib/mysql
tips:你也可以将mysql使用者加入到/etc/sudoers配置檔案中,限制mysql使用者使用的權限。
2.3、初始化
設定密碼為空,後續登入可修改密碼
$ mysqld --initialize-insecure
2.4、啟動服務與檢視服務狀态
Redhat7系列使用指令啟動MySQL服務
$ systemctl start mysqld
設定開機自啟
$ systemctl enable mysqld
關閉服務
$ systemctl stop mysqld
重新開機服務
$ systemctl restart mysqld
登入mysql
$ mysql -uroot -p
2.5、設定防火牆
加入mysql服務以及需要的端口3306
$ firewall-cmd --zone=public --add-port=3306/tcp --permanent
$ firewall-cmd --zone=public --add-service=mysql --permanent
$ firewall-cmd --reload
或者臨時關閉防火牆測試
$ systemctl stop firewalld.service
2.6、測試遠端登入
開啟防火牆,加入了3306/tcp協定規則,加入了mysql服務規則。設定了以前舊的密碼緩存驗證規則
mysql_native_password
,,解決
caching_sha2_password
驗證插件無法被加載的問題。
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步建立使用者
mysql> GRANT ALL ON *.* TO root@'%'; -- 第二步授權
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456'; -- 第三步修改密碼驗證方式
mysql> flush privileges; -- 第四步重新整理權限
3、關于忘記密碼解決方案
很多小夥伴估計都遇到過設定密碼後,結果忘記密碼了。本文的解決方案,完全适用目前最新版本MySQL8.0.28,親自測試驗證過。
參考MySQL8.0官方文檔以及stackoverflow解決方法。結果兜兜轉轉回到了跳過登入密碼權限驗證,8.0版本之前的方法失效了,咱沒跟上MySQL更新的步伐。
1、關閉MySQL服務:
$ systemctl stop mysqld
2、設定MySQL環境選項參數,跳過權限表驗證
$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
或者在/etc/my.cnf檔案中添加,是一樣的效果。最後記得去掉跳過驗證。Windows下在my.ini檔案中加入skip-grant-tables。
[mysqld]
skip-grant-tables
3、使用了剛剛的設定啟動mysql
$ systemctl start mysqld
4、登入到root
$ mysql -u root
5、使用指令更新root使用者密碼
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
-> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit
a、這種方式可能行不通
UPDATE user SET authentication_string = PASSWORD('123456') WHERE User = 'root' AND Host = 'localhost';
b、采取将密碼先置空
update user set authentication_string = '' where user = 'root';
6、修改密碼,解決方案,設定更強的密碼規則即可
As mentioned my shokulei in the comments, for 5.7.6 and later, you should use
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Or you'll get a warning
MySQL8.0出現這種情況,請設定更安全的密碼規則比如設定密碼為:Mysql@123456,即可成功。
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql@123456';
7、關閉mysql服務
$ systemctl stop mysqld
8、重置前面設定的mysql環境變量參數
$ systemctl unset-environment MYSQLD_OPTS
9、再次啟動mysql
$ systemctl start mysqld
最終成功登入到mysql
$ mysql -u root -p
三、MySQL8.0使用
主要基于Windows10進行說明的,一些指令同樣适用于Linux。
1、Windows多個MySQL服務執行個體共存
注意修改系統資料庫路徑,解決啟動MySQL服務意外停止的情況,提示1067還是1068來着。
net start mysql8
net start mysql
為了測試示範最新版本,我将服務名改成了MySQL8。
# 安裝服務指定了服務名為MySQL8
計算機\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8
# 或者是MySQL
計算機\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL
我之前安裝的MariaDB10.5.6。我想繼續使用MariaDB,又想體驗最新版的MySQL8.0.28,選擇這樣處理。
1.1、登入并指定端口3307,預設為3306,我的MariaDB已經占用了3306端口。個人測試示範多個執行個體共存改了端口為3307。
注意:在Windows下使用cmd指令視窗以管理者身份運作登入,沒有配置環境變量也沒關系,切換到MySQL安裝的bin目錄下執行指令。
-- 第一步執行d:,切換到D盤
d:
-- 第二步執行cd指令,切換到個人安裝mysql的bin目錄下
cd D:\work\mysql-8.0.28-winx64\bin
-- 執行登入指令,并指定端口
mysql -uroot -p -P 3307
-- 查詢資料庫版本
```sql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.28 |
+-----------+
1 row in set (0.00 sec)
```
總結一下:
- 第一步執行d:,切換到D盤;
- 第二步執行cd指令,切換到個人安裝mysql的bin目錄下;
- 第三步執行登入指令,并指定端口登入到mysql;
- 最後進行簡單的互動,并查詢資料庫版本。
1.2、初步使用指令行模式進行互動
2、權限設定
2.1、參考官方文檔
設定遠端登入權限,以及密碼校驗規則,與安裝資料庫版本預設使用的預設認證插件有關
參考MySQL官方文檔:https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
01、Authentication plugin 'caching_sha2_password' is not supported
02、Authentication plugin 'caching_sha2_password' cannot be loaded:
dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2):
image not found
03、Warning: mysqli_connect(): The server requested authentication
method unknown to the client [caching_sha2_password]
使用上面這種密碼緩存驗證算法。描述到驗證插件不支援caching_sha2_password,不能被加載,服務連接配接請求提出警告認證方法無法識别用戶端。通俗一點解釋:在使用SQLyog、MySQL workbench等用戶端連接配接時,密碼驗證規則是不被允許的。需要更換驗證方式,或者其它方式解決驗證。下面将會給出解決方案。
2.2、修改root使用者密碼
使用alter user語句修改使用者密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';
2.3、建立普通使用者并授權(開發人員或者DBA使用的比較頻繁)
初學者可以先忽略授權這一步,使用root使用者将基本功練紮實。還沒入門,就沒這頭皮發麻的授權模式給弄崩潰了,哈哈。
授權指令GRANT,撤銷權限指令REVOKE。建立使用者并授權參考官方文檔:https://dev.mysql.com/doc/refman/8.0/en/roles.html
建立角色:CREATE ROLE指令
CREATE ROLE 'app_developer', 'app_read', 'app_write';
授予角色權限:GRANT指令
GRANT ALL ON app_db.* TO 'app_developer';
GRANT SELECT ON app_db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';
建立使用者:CREATE USER指令
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';
CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';
CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';
CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
授權給建立的使用者:GRANT指令
GRANT 'app_developer' TO 'dev1'@'localhost';
GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';
你還可以在my.ini或者my.cnf配置檔案中指定設定:
[mysqld]
mandatory_roles='role1,role2@localhost,r3@%.example.com'
同樣可以在指令模式下使用SET指令設定:
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com';
檢查角色dev1的權限,檢查權限比較多,我就不一一列舉。詳情可以參考官方文檔。
mysql> SHOW GRANTS FOR 'dev1'@'localhost';
+-------------------------------------------------+
| Grants for dev1@localhost |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `dev1`@`localhost` |
| GRANT `app_developer`@`%` TO `dev1`@`localhost` |
+-------------------------------------------------+
建立使用者并授權,授權全部權限:
CREATE USER 'old_app_dev'@'localhost' IDENTIFIED BY 'old_app_devpass';
GRANT ALL ON old_app.* TO 'old_app_dev'@'localhost';
鎖定使用者:鎖定:LOCK,盲猜解鎖就是UNLOCK
ALTER USER 'old_app_dev'@'localhost' ACCOUNT LOCK;
授權給新的開發賬号權限,授權部分權限:
CREATE USER 'new_app_dev1'@'localhost' IDENTIFIED BY 'new_password';
GRANT 'old_app_dev'@'localhost' TO 'new_app_dev1'@'localhost';
以上提供官方文檔進行參考,與其東找找西找找,不如翻閱官方文檔更直接更準确。咱缺的不是學習的途徑,而是缺乏學習的方法。
3、測試建立使用者
3.1、建立普通使用者并授權遠端登入
建立一個普通使用者test
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
授予使用者test在本地(localhost)的權限,隻給查詢權限(SELECT),授權所有(ALL)
mysql> GRANT SELECT ON *.* TO test@'localhost';
Query OK, 0 rows affected (0.01 sec)
3.2、給root使用者授權
建立root使用者授權給所有IP都能登入,以及修改密碼緩存認證方式。
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456';
mysql> GRANT ALL ON *.* TO root@'%';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456';
mysql> flush privileges;
在第三方工具中驗證登入結果,在localhost下可以登入成功:
目前隻給了查詢(select)權限,驗證插入(insert)權限:
mysql> insert into study values(7,'美柑');
ERROR 1142 (42000): INSERT command denied to user 'test'@'localhost' for table 'study'
這是在SQLyog工具下進行驗證的,建議初學者多在指令行視窗下進行練習,熟能生巧。
3.2、授權root使用者遠端登入,MySQL8.0授權方式
使用者授權,在MySQL8.0版本中變得更加嚴格,以前MySQL5.6或者5.7版本中可以執行授權的方式有了變化。經過個人親測,操作如下。
MySQL8.0授權方式,記得使用flush privileges重新整理權限
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步建立使用者
mysql> GRANT ALL ON *.* TO root@'%'; -- 第二步授權
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456'; -- 第三步修改密碼驗證方式
mysql> flush privileges; -- 第四步重新整理權限
修改密碼認證方式(8.0預設使用的是sha2算法緩存認證),第一種解決方案如下,這隻是其中一種解決方案,親測有效。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
第二種解決方案:在my.ini或者my.cnf配置檔案加入如下配置,重新開機服務并加載配置檔案。經過測試沒有生效,似乎沒有讀取到配置檔案,但奇怪的是我設定的3307端口和預設存儲引擎以及編碼格式是生效的。(在官網看到的解決方案)
[mysqld]
default_authentication_plugin=mysql_native_password
MySQL8.0官方文檔預設設定的認證緩存算法是caching_sha2_password
ALTER USER user(使用者) IDENTIFIED WITH caching_sha2_password BY 'password';
MySQL8.0之前的授權方式(5.6或者5.7都支援這種方式授權)
GRANT ALL PRIVILEGES ON *.* TO '你的使用者名'@'你的IP位址' IDENTIFIED BY '設定的密碼' WITH GRANT OPTION;
示例:授權root戶,所有IP都可連接配接。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
重新整理權限
flush privileges;
4、如何高效的使用自帶官方文檔
登入到MySQL8,指定3307端口,或者使用預設端口登入。
mysql -uroot -p -P 3307
mysql -uroot -p
使用幫助指令,以? create contents形式查找系統幫助指令。
? create contents;
? create user;
? create database;
? create table;
? select;
? insert;
? update;
? delete;
URL: https://dev.mysql.com/doc/refman/8.0/en/select|insert|update|delete.html
在使用本地的幫助文檔時,你會發現系統自動提示了官方文檔的位址 https://dev.mysql.com/doc。
示例:查詢建立表的幫助指令? create table隻展示了一部分内容。
mysql> ? create table
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
data_type:
(see https://dev.mysql.com/doc/refman/8.0/en/data-types.html)
index_type:
USING {BTREE | HASH}
index_option: {
KEY_BLOCK_SIZE [=] value
| index_type
...
}
URL: https://dev.mysql.com/doc/refman/8.0/en/create-table.html
- Name:檢視的幫助指令名稱
- Description:描述
- Syntax:示例
- data_type:支援的資料類型
- index_type:可以使用的索引類型
我隻列舉了部分進行說明,更詳細的可以自己測試。
在建立使用者、資料庫以及建表和字段全部采取的大寫,因為在Linux和Unix下對大寫敏感的,并不是MySQL本身對大小寫敏感。
1、建立資料庫
CREATE DATABASE TEST;
USE TEST;
2、建立表,可以通過ENGINE指定表的存儲引擎,mysql5.6以及之後的版本預設為InnoDB存儲引擎。
CREATE TABLE STUDY(
ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAMES VARCHAR(64) NOT NULL
)ENGINE=MyISAM;
3、插入資料
INSERT INTO STUDY VALUES(1,'mysql目前最新版本msyql8.0.28');
4、查詢資料
SELECT * FROM STUDY;
5、修改資料
UPDATE STUDY S SET S.NAMES='mysql預設的存儲引擎是InnoDB' WHERE S.ID=1;
6、删除全部資料
DELETE FROM STUDY;
至此基本的建立使用者、建立資料庫、增删改查都會使用了。
四、MySQL連接配接工具
做了超連結,友善去官網擷取。
- phpMyAdmin
- MYSQL workbench
- SQLyog
推薦幾個比較常用的工具:phpMyAdmin、SQLyog、MySQL Workbench、Navicat可視化工具進行連接配接操作。工具的使用是其次的,更重要的在于對MySQL指令語句的運用。
tips:包含了SQLyog,還整理了部分安裝包以及MySQL官方提供的sakila 、world示例喲!
連結: https://pan.baidu.com/s/11gIlZKxoTG5BCCcoXdVJRg 提取碼: ntu7
給出一個使用Navicat逆向生成的示例資料庫world的模型:
如果真的要使用到建實體模型:推薦你學習Sybase PowerDesigner設計工具的使用,而且需要了解關系資料庫設計遵循的三範式。現在資料庫設計最多滿足3NF,普遍認為範式過高,雖然具有對資料關系更好的限制性,但也導緻資料關系表增加而令資料庫IO更易繁忙,原來交由資料庫處理的關系限制現更多在資料庫使用程式中完成。
五、MySQL之JDBC
1、官方connector-j
MySQL8.0的maven安裝JDBC:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-maven.html
JDBC連接配接驅動管理:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// Notice, do not import com.mysql.cj.jdbc.*
// or you will have problems!
public class LoadDriver {
public static void main(String[] args) {
try {
// The newInstance() call is a work around for some
// broken Java implementations
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
} catch (Exception ex) {
// handle the error
}
}
}
Connection conn = null;
...
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=root&password=123456");
// Do something with the Connection
...
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
2、JDBC測試連接配接MySQL8.0資料庫
2.1、maven配置
設定pom.xml配置檔案,使用MySQL最新的版本8.0.28進行連接配接測試。maven的鏡像倉庫,可以使用阿裡的鏡像源位址。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
2.2、編寫Java代碼
使用編輯器sts(Spring Tool Suite4或者IDEA)
建立普通的maven項目或者springboot項目,然後配置pom.xml。
目的:使用純JDBC測試,或者ORM架構mybatis、JPA、或者hibernate都行,最終達到對資料庫進行最基本的增删改查。
package com.example.demo.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestConnMySQL8 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
TestSQLConnMySQL();
}
private static final Logger log = LoggerFactory.getLogger(TestConnMySQL8.class);
//初始化參數
static Connection conn = null;
static PreparedStatement ps = null;
static ResultSet rs = null;
/**
* @throws SQLException
* @throws ClassNotFoundException
*/
private static void TestSQLConnMySQL() throws SQLException, ClassNotFoundException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
/**
* 1.擷取連接配接參數url,username,password,預設端口是3306
* MySQL:url ="jdbc:mysql://127.0.0.1:3306/test";
*/
/** MySQL拼接url **/
String url = "jdbc:mysql://192.168.245.147:3306/TEST?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "Mysql@123456";
//擷取連接配接
conn = DriverManager.getConnection(url, username, password);
if(null != conn) {
log.info("connect database success...");
}else {
log.error("connect database failed...");
}
//查詢資料庫
String sql = "SELECT * FROM STUDY";
// 3.通過preparedStatement執行SQL
ps = conn.prepareStatement(sql);
// 4.執行查詢,擷取結果集
rs = ps.executeQuery();
// 5.周遊結果集,前提是你的資料庫建立了表以及有資料
while (rs.next()) {
//對應資料庫表中字段類型Int使用getInt,varchar使用getString
System.out.println("ID:" + rs.getInt("ID"));
System.out.println("姓名:" + rs.getString("NAMES"));
}
} finally {
// 6.關閉連接配接 釋放資源
rs.close();
ps.close();
conn.close();
}
}
}
在sts編輯工具連接配接并傳回測試結果
總結
以上就是本次MySQL8.0.28安裝與使用的全部内容,希望能對你的工作與學習有所幫助。感覺寫的好,就拿出你的一鍵三連。在公衆号上更新的可能要快一點,目前還在完善中。能看到這裡的,都是帥哥靓妹。如果感覺總結的不到位,也希望能留下您寶貴的意見,我會在文章中進行調整優化。
原創不易,轉載也請标明出處和作者,尊重原創。不定期上傳到github或者gitee。認準龍騰萬裡sky,如果看見其它平台不是這個ID發出我的文章,就是轉載的。MySQL系列文章:《MySQL開發篇,存儲引擎的選擇真的很重要嗎?》已經上傳至github和gitee倉庫SQL-study。個人github倉庫位址,一般會先更新PDF檔案,然後再上傳markdown檔案。如果通路github太慢,可以使用gitee進行克隆。
tips:使用hexo搭建的靜态部落格也會定期更新維護。