為什么升級到MySQL 8.0
基于安全考慮基于性能和 穩定性考慮:
mgr復制 ,并行復制writeset 等功能,性能提升新的功能:
Hash join ,窗口函數,DDL即時,json 支持原始環境中版本太多,統一版本8.0版本基本已到穩定期,可以大量投入生產環境中
升級之前需要了解
數據庫字典升級
schema,mysql,information_schema,performance_schema,sys
比如:密碼測試 mysql_native_password → caching_sha2_password
關鍵詞是不是兼容
關鍵詞 added in查詢
SQL是不是兼容
Group by處理上的不兼容,觸發器mysql升級,存儲過程
5.6 可以跑select id,count(*)from group by name;
5.7,8.0是不是允許的 sql_mode控制

數據文件存儲格式是不是可以直接升級
Perconal 和 mysql 存儲引擎一直,可以兼容
現有應用的兼容性是否滿足
自定義函數,一些不規范的SQL語句等等
密碼策略
What Is New in MySQL 8.0
作為DBA需要基本了解8.0的一些功能,參考:



升級準備事項
已經了解8.0的特性,應對升級需要事*行驗證和準備工作測試庫升級,應用驗證

數據庫升級,末知問題發生
f配置信息調整
不兼容的操作方法,影響復制
一個平穩的過濾,列如先升級一個從庫,到所有從庫
最少停機時間,同樣生產數據恢復到環境,進行模擬升級,評估時間
怎樣進行數據驗證:行數,表的數量 等等
考慮回滾方案
數據庫備份
升級前檢查
Mysql8.0還是提供了很多方便,不像之前一樣5.6升級5.7那樣。現在可以通過mysql shell進行確認。
下面2種方式

#mysqlsh root:123456@192.168.244.130:3410 -e 'util.checkForServerUpgrade({"targetVersion":"8.0.19","configPath":"/etc/f"})';
MySQL JS > util.checkForServerUpgrade('root@192.168.244.130:3410', {"password":"123456", "targetVersion":"8.0.11", "configPath":"/etc/f"})按照提示的要求進行更改

雖然shell做的很好,但還是存在一些缺陷。
比如以下內容都不會存在提示:
1. basedir,
2. sql_mode ,
3. 半同步配置,
4. 密碼策略:default_authentication_plugin = mysql_native_password
開始升級
下載對應的tar包

下面是單機升級,高可用架構下 需要先升級從庫,在逐步升級主庫。
執行mysql_upgrade命令,會提示如下:
#/mysql8.0.19/bin/mysql_upgrade -uroot -p123456
在MySQL 8中mysql_upgrade客戶端現已棄用。升級客戶端執行的操作現在由服務器完成。
要升級,請使用較舊的數據目錄啟動新的 MySQL 二進制文件。自動修復用戶表。升級后不需要重新啟動。
所以必須在測試環境模擬準備對應SQL語句
正確操作如下:
1)登錄服務器進行正常關閉:innodb_fast_shutdown是默認是1mysql升級,常常認為是安全關閉
關閉innodb參數確認mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1 |
+----------------------+-------+
1 row in set (0.00 sec)確保數據都刷到硬盤上,更改成0
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.01 sec)
mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)
*進行備份。2)用mysql8.0.19客戶端直接啟動
啟動mysql服務
[root@ss30 bin]# /opt/mysql8.0.19/bin/mysqld_safe --defaults-file=/etc/f --user=mysql &
[1] 15400
[root@ss30 bin]# 2020-04-25T13:07:16.591560Z mysqld_safe Logging to '/opt/data3400/logs/error.log'.
2020-04-25T13:07:16.636879Z mysqld_safe Starting mysqld daemon with databases from /opt/data3400/mysql
##打開另一個窗口查看error日志
[root@ss30 ~]# tail -f /opt/data3400/logs/mysql_error.log登錄服務器確認
[root@ss30 ~]# mysql -uroot -p -S /opt/data3400/mysql/mysql.sockEnter
password:
Welcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 10Server version: 8.0.19 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '/h' for help. Type '/c' to clear the current input statement.
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19 |
+-----------+
1 row in set (0.01 sec)無myisam引擎
mysql> SELECT table_schema,table_name,engine
FROM information_schema.tables
where engine!='InnoDB';剩下的就是驗證 和 業務確認否應用正常。
總結
整個從升級準備開始 到結束,中間包含很多細致的工作。比如版本確認,功能確認,測試,準備,備份,驗證,高可用切換等等。前期需要投入很多精力進行準備,這樣才能做到一步到位。
升級完,下一步踏上8.0的使用旅程。
最后給大家分享我寫的SQL兩件套:《SQL基礎知識第二版》和《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。 有需要的讀者可以下載學習,在下面的公眾號「數據前線」(非本號)后臺回復關鍵字:SQL,就行 數據前線 后臺回復關鍵字:1024,獲取一份精心整理的技術干貨后臺回復關鍵字:進群,帶你進入高手如云的。