最近博主由於工作原因需要把之前安裝好的的mysql 5.6.44版本卸載,然后安裝mysql 5.7.*版本。
前提:為什么要升級到5.7版本?
因為博主在5.6版本上執行腳本時候報出異常:to your MySQL server version for the right syntax to use near 'json DEFAULT...
大概意思是5.6版本不支持原生json 數據的插入
度娘說:MySQL5.7版本終於支持了原生的JSON格式,即將關系型數據庫和文檔型NO_SQL數據庫集於一身。
鏈接地址:http://www.bubuko.com/infodetail-1777950.html
所以不得已要升級到5.7,期間走了很多彎路,遇到很多坑,現總結如下,希望能幫助到你:
安裝過程十分艱辛,遇到了好幾個錯誤總結如下:
1:Can't connect to MySQL server on 'localhost' (10061)
2:-initialize specified but the data directory has files in it. Aborting
3:TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults
4:Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
解決方案,無非就是需要注意幾點:
1:某些命令一定要在管理員權限下執行,就是用管理員模式開啟命令提示符
2:某些命令一定要在mysql/bin 目錄下執行,文章中有標出
3:mysql 5.7默認是無data文件夾的,net start mysql #啟動mysql 命令一定要保證有data文件夾
4:mysql 5.7.27版本 my-default.ini 不能寫port=3306 不然會報錯
5:有時候錯誤需要在my-default.ini 文件中加入explicit_defaults_for_timestamp=true
6:查看mysql啟動錯誤命令 mysqld --console
7:如果遇到中途的mysql配置路徑錯誤導致服務中存在mysql
(如:mysqld install MySQL --defaults-file="D:\mysql5.7.27\mysql-5.7.27-winx64\my-default.ini" #安裝新版本mysql 這里邊的ini路徑輸入錯誤后 回車,系統服務中會存在mysql,但是啟動不了),
執行sc delete mysql 刪除不掉服務的情況,需要打開任務管理器中找到mysql進程關閉之后再 執行sc delete mysql就可以成功刪除mysql 服務了
8:如果在安裝過程中某一步錯誤,導致需要重新執行安裝mysql命令,切記需要保證(D:\mysql5.7.27\mysql-5.7.27-winx64\data\)data 路徑下為空,如果有文件要刪除后執行安裝命令。
第一步:官網下載mysql5.7.27 zip文件,官方地址:https://dev.mysql.com/downloads/mysql/
有32位和64位兩個版本,博主64位點擊下載
第二步:下載好之后解壓
第三步:文件夾里面默認沒有my-default.ini文件,需要我們新建一個basedir和datadir需要改成你安裝的路徑地址,以下是我的my-default.ini配置
[mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 [mysqld] # 設置mysql的安裝目錄 basedir = D:\Mysql5.27\mysql-5.7.27-winx64 # 設置mysql數據庫的數據的存放目錄 datadir = D:\Mysql5.27\mysql-5.7.27-winx64\data # 允許最大連接數 max_connections=200 # 服務端使用的字符集默認為8比特編碼的latin1字符集 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB # 如果需要的存儲引擎被禁用或未編譯,可以防止自動替換存儲引擎 # 為事務存儲引擎啟用嚴格模式,也可能為非事務存儲引擎啟用嚴格模式 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 開啟查詢緩存 explicit_defaults_for_timestamp=true
MySQL 5.7版本中sql_mode更加嚴格。解釋下各個mode的含義: ONLY_FULL_GROUP_BY 不要讓GROUP BY部分中的查詢指向未選擇的列 STRICT_TRANS_TABLES 為事務存儲引擎啟用嚴格模式,也可能為非事務存儲引擎啟用嚴格模式 NO_ZERO_IN_DATE 在嚴格模式,不接受月或日部分為0的日期 NO_ZERO_DATE 在嚴格模式,不將 '0000-00-00'做為合法日期 ERROR_FOR_DIVISION_BY_ZERO 在嚴格模式,在INSERT或UPDATE過程中,如果被零除(或MOD(X,0)),則產生錯誤 NO_AUTO_CREATE_USER 防止GRANT自動創建新用戶,除非還指定了密碼 NO_ENGINE_SUBSTITUTION 如果需要的存儲引擎被禁用或未編譯,可以防止自動替換存儲引擎 注意:在一個主從環境下,為保證數據的一致性,一定要設置主從的sql_mode一樣,在數據遷移的時候也要保證sql_mode的一致,不然復制和遷移遇到上面的限制均會失敗,所以盡可能使用標准SQL語法。
第四步:配置環境變量
第五步:停止服務里邊mysql
cmd->services.msc #打開服務
找到mysql停止
第六步:查看mysql版本是否正確
cmd->mysql --help
第七步:卸載5.6版本,這步很關鍵,博主找了很多資料,終於解決 參考鏈接:https://blog.csdn.net/qq_39701269/article/details/77935490
cmd->sc query mysql #管理員身份運行,輸入sc query mysql,查看一下名為mysql的服務
sc delete mysql #刪除該mysql
第八步:安裝mysql 5.7.27 參考鏈接:https://www.cnblogs.com/super-wking/p/10551936.html
1:安裝Mysql命令如下:
mysqld install MySQL --defaults-file="D:\mysql5.7.27\mysql-5.7.27-winx64\my-default.ini" #安裝新版本mysql
2:獲取mysql臨時密碼如下
注意:一定要進入到mysql安裝bin目錄下執行以下命令!!!!
mysqld --initialize --user=mysql --console #初始化 獲取root隨機密碼 “root@localhost”后的隨機字符串就是root的臨時密碼。
注意:如果出現如下情況,說明CMD沒有以管理員身份打開,以管理員身份打開后執行即可
3:啟動mysql
注意:一定要進入到mysql安裝bin目錄下執行以下命令!!!!
net start mysql #啟動mysql
第九步:修改mysql密碼
mysql -u root -p #進入mysql輸入之前的臨時密碼
第十步:設置root新密碼
set password = password('root');
設置成功后exit 退出,重新執行以下命令,密碼是你自己設置的,我設置的密碼是root
mysql -u root -p
至此mysql升級完畢!!!
添加新用戶權限:
grant select,insert,update,delete on book.* to test@localhost Identified by "abc";
參考鏈接:https://www.cnblogs.com/wanghuaijun/p/5802209.html
給某個用戶某個數據庫權限
GRANT select,insert,delete,update ON testdb.* TO 'test'@'%';