MySQL8.0與MySQL5.7有什么區別和坑?有必要升級MySQL8.0嗎?MySQL 8.0是2018年4月20日發布的全球最受歡迎的開源數據庫的一個非常令人興奮的新版本,一些關鍵的增強包括:SQL窗口函數,公用表表達式,NOWAIT和SKIP LOCKED,降序索引,分組,正則表達式,字符集,成本模型和直方圖。JSON擴展語法,新功能,改進排序和部分更新。
那么我們有必要及時升級到mysql8.0嗎?我們先說說Mysql8.0的新特點:
Mysql8.0的新特點
使用JSON表函數,您可以使用JSON數據的SQL機制。
GIS地理支持。空間參考系統(SRS),以及SRS感知空間數據類型,空間索引和空間功能。
可靠性 DDL語句已變得原子性和崩潰安全,元數據存儲在單個事務數據字典中。
由InnoDB提供支持!可觀察性性能架構,信息架構,配置變量和錯誤記錄的顯着增強。
可管理性遠程管理,撤消表空間管理和新的即時DDL。
安全 OpenSSL改進,新的默認身份驗證,SQL角色,分解超級特權,密碼強度等等。
性能 InnoDB在讀/寫工作負載,IO綁定工作負載和高爭用“熱點”工作負載方面明顯更好。
增加了資源組功能,通過將用戶線程映射到CPU,為用戶提供一個選項,以針對特定硬件上的特定工作負載進行優化 。
然后我們分別從以下幾點分別介紹MYSQL8.0和MYSQL5.7的區別:
1. 賬戶與安全
用戶的創建與授權 在MySQL5.7的版本:
grant all privileges on . to ‘jyzzc’@’localhost’ identified by ‘jyzzc1QAZ’; #grant all privileges on . to ‘用戶名’@’主機’ identified by ‘密碼’;
1
在MySQL8.0需要分開執行,否則使用以前的命令在8.0里面創建用戶,會出現sql語法錯誤:
mysql> create user ‘jyzzc’@’localhost’ identified by ‘jyzzc1QAZ’;
Query OK, 0 rows affected (0.04 sec) #create user ‘用戶名’@’主機’ identified by ‘密碼’;
1
2
mysql> grant all privileges on . to ‘jyzzc’@’localhost’;
Query OK, 0 rows affected (0.04 sec) # grant all privileges on . to ‘用戶名’@’主機’;
1
2
2. 認證插件更新
MySQL5.7 默認身份插件是 mysql_native_password
MySQL8.0 默認的身份插件是 caching_sha2_password
查看身份認證插件命令:show variables like ‘default_authentication_plugin%’;
mysql> show variables like ‘default_authentication_plugin%’;
+——————————-+———————–+
| Variable_name | Value |
+——————————-+———————–+
| default_authentication_plugin | caching_sha2_password |
+——————————-+———————–+
1 row in set (0.04 sec)
1
2
3
4
5
6
7
身份認證插件可以通過以下2中方式改變:
1)系統變量default_authentication_plugin去改變,在my.ini文件的[mysqld]下設置default_authentication_plugin=mysql_native_password
2)如果希望只是某一個用戶通過mysql_native_password的方式認證,可以修改數據庫mysql下面的user表的字段,執行以下命令:
mysql> alter user ‘用戶名’@’主機’ identified width mysql_native_password by ‘密碼’;
1
3. 密碼管理
MySQL8.0的密碼管理策略有3個變量
password_history #修改密碼不允許與最近幾次使用或的密碼重復,默認是0,即不限制
password_reuse_interval #修改密碼不允許與最近多少天的使用過的密碼重復,默認是0,即不限制
password_require_current #修改密碼是否需要提供當前的登錄密碼,默認是OFF,即不需要;如果需要,則設置成ON
1
2
3
查詢當前MySQL密碼管理策略相關變量,使用以下命令:
mysql> show variables like ‘password%’;
1
1)設置全局的密碼管理策略,在my.ini配置文件中,設置以上3個變量的值這種設置方式,需要重啟mysql服務器;某些生產環境不允許重啟,MySQL8.0提供了關鍵字persist持久化:
mysql> set persist password_history=6; #這條命令會在數據目錄下生成新的配置文件(/var/lib/mysql/mysqld-auto.cnf),下次服務器重啟的時候除了讀取全局配置文件,還會讀取這個配置文件,這條配置就會被讀入從而達到持久化的目的
1
2)針對某一個用戶單獨設置密碼管理策略
mysql> alter user ‘用戶名’@’主機’ password history 5; #這個用戶的password_history 就被設置成了5
1
查看一下:
mysql> show user,host,Password_reuse_history from user;
1
查看某一張的字段的所有字段,使用以下命令:
mysql> desc 表名;
1
4. 角色管理
角色:一組權限的集合
一組權限賦予某個角色,再把某個角色賦予某個用戶,那用戶就擁有角色對應的權限
1)創建一個角色
mysql> create role ‘角色1’;
1
2)為這個角色賦予相應權限
mysql> grant insert,update on . to ‘角色1’;
1
3)創建一個用戶
mysql> create user ‘用戶1’ identified by ‘用戶1的密碼’;
1
4)為這個用戶賦予角色的權限
mysql> grant ‘角色1’ on . to ‘用戶1’;
1
執行完上面4步,用戶1就擁有了插入與更新的權限
5)再創建1個用戶
mysql> create user ‘用戶2’ identified by ‘用戶2的密碼’;
1
6)為這個用戶賦予同樣的角色
mysql> grant ‘角色1’ on . to ‘用戶2’;
1
執行完上面2步,用戶2也用了角色1的權限,即插入與更新
查看用戶權限,執行以下命令:
mysql> show grants for ‘用戶名’;
1
7)啟用角色,設置了角色,如果不啟用,用戶登錄的時候,依舊沒有該角色的權限
mysql> set default role ‘角色名’ to ‘用戶名’;
1
8)如果一個用戶有多個角色,使用以下命令
mysql> set default role all to ‘用戶名’;
1
MySQL中與用戶角色相關的表:mysql.default_roles、mysql.role_edges。
9)撤銷權限
mysql> revoke insert,update on . from ‘角色名’;
1
Mysql5.7下載:
https://cdn.mysql.com/archives/mysql-installer/mysql-installer-community-5.7.26.0.msi
Mysql8.0下載:
https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-8.0.25.0.msi
————————————————
版權聲明:本文為CSDN博主「極意自在宸」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u010014830/article/details/118175036