一、Windows 10 上安裝 MySQL 8.0.13
最新版本可以上官網在 MySQL 下載 中選擇 Microsoft Windows(x86,64-bit) ,ZIP Archive 下載。無需在該網站註冊信息。下載完後,我們將 zip 包解壓到相應的目錄,這裏我將解壓後的文件夾放在 F:\Mysql\mysql-8.0.13-winx64 下。
接下來我們需要配置下 MySQL 的配置文件
打開剛剛解壓的文件夾 F:\Mysql\mysql-8.0.13-winx64 ,在該文件夾下創建 my.ini 配置文件,編輯 my.ini 配置以下基本信息:
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[mysqld]
# 設置3306端口
port = 3306
# 設置mysql的安裝目錄
basedir=F:\\Mysql\\mysql-8.0.13-winx64
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
# datadir=C:\\web\\sqldata
# 允許最大連接數
max_connections=20
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
接下來我們來啓動下 MySQL 數據庫:
以管理員身份打開 cmd 命令行工具,切換目錄:
cd /d F:\Mysql\mysql-8.0.13-winx64\bin
初始化數據庫:
mysqld --initialize --console
執行完成後,會輸出 root 用戶的初始默認密碼,如:
...
2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ
...
APWCY5ws&hjQ
就是初始密碼,後續登錄需要用到,記得在關閉當前命令行之前先複製下來。
繼續,在F:\Mysql\mysql-8.0.13-winx64\bin
目錄下:
執行數據庫的安裝、初始化mysql數據庫的數據存放目錄data以及mysql服務的啓動。
mysqld install
mysqld --initialize-insecure
net start mysql
如果在執行第三條語句net start mysql
出現:
發生系統錯誤 2。
系統找不到指定的文件。
原因:你服務的路徑和安裝的路徑不一致造成的,之前安裝過mysql後卸載的機器容易出現這樣的問題。
解決方法:修改一下註冊表。首先進入命令行,輸入regedit,回車,進入註冊表編輯器。選擇 HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> services -> MySQL
, 修改ImagePath
的路徑,爲你的安裝路徑, 比如 F:\Mysql\mysql-8.0.13-winx64\bin\mysqld MySQL
。
二、登錄 MySQL
如果我們要登錄本機的 MySQL 數據庫,只需要輸入以下命令即可:
mysql -u root -p
如果出現:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
從錯誤的提示中可以看出MySQL服務沒有啓動,因此只需要啓動MySQL服務就可以了
直接採用net start MySQL
就可以啓動MySQL服務,但如果輸入命令後仍然出現錯誤 :
服務名無效
請鍵入 NET HELPMSC 2185 以獲得更多幫助。
原因:服務名不一致引起。在自定義安裝的過程默認服務名可能會加上MYSQL的版本數字。
解決方案:系統搜索進入服務
,找到其中的MySQL服務,檢查其服務名是否有數字後綴,如:MYSQL80。此時再輸入net start MySQL80
,如果發生如下錯誤:
發生系統錯誤 5。
拒絕訪問。
原因:權限不夠
解決方案:以管理員身份運行CMD,系統搜索cmd
之後右擊以管理員的方式運行。
以上錯誤都不發生的正常情況如下:按回車確認會得到以下響應:
Enter password:
將我們剛剛複製下來初始密碼輸入,如果正確的話,就已經 成功進入數據庫中了。命令提示符會一直以 mysq> 加一個閃爍的光標等待命令的輸入, 輸入 exit
退出登錄。
接下來我們來修改下 MySQL 數據庫的登錄密碼:
正常的修改密碼方法如:
mysql> use mysql;
mysql> update user set password=password('123456') where user='root' and host='localhost';
mysql> flush privileges;
執行報錯的話:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
我們可以用如下語句執行:
set password '123456'
成功的話,執行show databases;
能夠看到當前所以的數據庫。
三、連接SQLYog
如果一切順利的話,只需要在SQLYog中新建一個MYSQL
連接,填入主機地址:localhost
,用戶名:root
,密碼:123456
,端口:3306
就可以了。
如果端口不對,可以用命令行進入數據庫通過以下指令查詢得到:
show global variables like 'port';
如果配置新連接報錯:錯誤號碼 2058,分析是 mysql 密碼加密方法變成caching_sha2_password
了(8.0版本開始出現的問題)。
解決方法:windows 下cmd 登錄 mysql -u root -p 登錄你的 mysql 數據庫,然後執行這條SQL(注意分號):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
用新密碼到SQLYog登錄。
四、JDBC中調用Mysql出現的問題
本人一直使用的是5.x版本的mysql進行開發,不料在這次的項目開發中JDBC加載數據庫時,出現了從未有過的問題,一慌之下就卸載重載了(天知道我當時怎麼想的…)
由於本人用的是8.0版本數據庫,所以JDBC調用時需要注意如果出現以下問題(這個問題也是我重裝8.0版本吧的根源…):
SunCertPathBuilderException: unable to find valid certification path to requested target
原因:可能是由於選擇使用SSL的方式訪問數據庫,沒有有效證書
解決方案:配置驅動類的url時,將uesrSSL設爲false。
ds.setUrl("jdbc:mysql://localhost:3306/software_project?serverTimezone=UTC&userSSL=false");
需要補充的時,8.0的Mysql也支持開發者這麼使用。修改之後依舊出現如下問題:
java.sql.SQLException: Unknown system variable 'query_cache_size'
原因:mysql-connecter-java
的版本過低,很顯然是數據庫驅動程序與數據庫版本不對應 。
解決方法:導入mysql-connecter-java-8.0.13.jar
,如果使用maven管理的話在pom.xml中添加:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
沒想到我在使用maven管理的時候,下載這個版本的竟然沒成功(maven導包經常由於網絡原因沒有下成功,網上建議換成阿里源的我嘗試了,效果不是很理想),於是手動上官網下載放入maven的存庫中我的路徑是C:\Users\user\.m2\repository\mysql\mysql-connector-java\8.0.13
,避免中間有坑,這裏直接貼上網址。
之後,我們連接數據庫驅動時需要注意:
驅動類改成com.mysql.cj.jdbc.Driver
,指定時區改成serverTimezone=UTC
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
//ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/software_project?serverTimezone=UTC&userSSL=false");
ds.setUsername("root");
ds.setPassword("123456");
如果已經確定導入最近mysql-connecter-java
包還出現如下錯誤:
java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver)
原因:必需的jar沒有包含在應用程序服務器上部署的Artifact配置中
解決方案:進入Project Structure 將該jar包部署進Artifact 中,在如下方框處,右擊選擇第一個選項。
最後JDBC成功訪問8.0版本的Mysql數據庫。
五、注意點
- 數據庫平時不用又嫌佔內存的話可以關閉服務,進入
服務
找到MYSQL後關閉即可。 - 如果嫌棄每次進命令行都要切換到Mysql的安裝目錄下麻煩的話,可以將Mysql的安裝路徑設置到系統環境變量,具體方法在此不展開了。