一、前言
時間很快,到2023年10月底,MySQL 5.7就到了它的EOL(End of Life),屆時將不會提供任何補丁,無法應對潛在的安全風險;是時候和 MySQL 5.7 說再見了?。。?!回顧自Mysql5.7 版本2015年10月發(fā)布,它帶來很多新的特性,比如:默認引擎改成了InnoDB,更新了安全策略,性能方面的提升,新增JSON數(shù)據(jù)類型,增強了sql模式及用戶權限等等強大的功能。因此,這個版本自從發(fā)布之后一直受到業(yè)界的歡迎,也成為了眾多開發(fā)者的首選數(shù)據(jù)庫版本,至今仍被廣泛使用于很多中小生產(chǎn)環(huán)境。各個MySQL發(fā)行版本官方提供5年的支持期限,MySQL和Percona還提供額外的3年補丁更新期限,總計提供8年的服務支持。2018年4月,MySQL 8.0 正式發(fā)布。
相關資源:Mysql 5.7.43發(fā)布說明、Mysql版本差異說明、Mysql平臺兼容性、Mysql文檔中心、Mysql5.7升級說明、升級Mysql8.0官網(wǎng)說明、Mysql EOL、Oracle lifetime-support、MariaDB、brary-mariadb、percona生命周期說明、版本對比、postgresql、Mysql8 LTS
二、Mysql生命周期
Mysql產(chǎn)品的生命周期分為三個支持階段,標準支持服務、延伸支持服務和持續(xù)支持服務,一旦進入延伸支持階段,MySQL僅在認為有必要升級的時候才會提供補丁,通常是為了解決安全性問題。對應這三個階段的時間分別是產(chǎn)品從GA(正式發(fā)布)開始1-5年、6-8年及9年以上。
如下圖所示,今年的10月份,5.7版本會停止延伸階段支持,即2023年10月以后,停止發(fā)布補丁,Oracle 將不再為 MySQL 5.7 提供官方更新、錯誤修復或安全補丁。
Release | Release Date | End of life |
---|---|---|
MySQL 8.0 | April 19, 2018 | |
MySQL 8.0 | April 19, 2018 | |
MySQL 5.7 | October 21, 2015 | October 21, 2023 |
MySQL 5.6 | February 5, 2013 | February 5, 2021 |
MySQL 5.5 | December 3, 2010 | December 3, 2018 |
MySQL 5.1 | November 14, 2008 | December 31, 2013 |
MySQL 5.0 | January 9, 2012 |
Mysql 8.0x版本的長期穩(wěn)定版(LTS)生命周期圖,途中藍色部分。
2.1、Mysql 5.7和8.0特性
1)MySQL 8.0 的新特性
-
原子 DDL
一種原子數(shù)據(jù)定義語言 (DDL) 語句,用于組合對數(shù)據(jù)字典、存儲引擎操作等所做的更新。 -
加密默認值
已為表加密全局定義和實施加密默認值。 “default_table_encryption”變量用于為新創(chuàng)建的模式定義加密默認值。在創(chuàng)建模式時,可以借助“DEFAULT ENCRYPTION”子句定義模式的默認加密。默認密碼策略變更。 -
資源組
可以創(chuàng)建和管理資源組,并且服務器能夠?qū)⒕€程分配給在服務器內(nèi)運行的特定組的資源。組屬性可用于控制資源、限制或授予線程使用資源的權限等。支持窗口函數(shù),支持Hash join。 -
默認字符集
版本更新后,默認字符集由‘latin1’改為‘utf8mb4’。新字符集“utf8mb4”有多個排序規(guī)則,其中包括“utf8mb4_ja_0900_as_cs”,這是 MySQL 中第一個可用于 Unicode 的日語特定排序規(guī)則。MyISAM系統(tǒng)表全部換成InnoDB表。支持不可見索引,支持直方圖。sql_mode參數(shù)默認值變化。 -
JSON 增強
對 MySQL 的 JSON 功能進行了 JSON 增強,其中添加了“->>”,即內(nèi)聯(lián)路徑運算符。這相當于對調(diào)用‘JSON_EXTRACT()’函數(shù)后得到的結(jié)果調(diào)用‘JSON_UNQUOTE()’函數(shù)。 -
對 DBA 的控制
新增角色管理,DBA 已被授予根據(jù)工作負載修改屬性的控制權。服務器確定虛擬 CPU 是否可用,具有所需權限的 DBA 可以使用這些 CPU 并將它們分配給某些資源組和線程。
2.2、MySQL5.7 vs 8.0
據(jù)相關經(jīng)驗表明,性能上測試如下,僅供參考:
1、讀寫模式下,mysql5.7.22和mysql8.0.15tps、qps性能差不多,mysql8.0.15在120線程并發(fā)時,性能出現(xiàn)了下降抖動:
2、只讀模式下,mysql5.7.22的tps、qps比mysql8.0.15好1/3左右;并發(fā)線程數(shù)增加后,tps、qps并沒有隨著增加,反而出現(xiàn)了下降的趨勢:
3、只寫模式下,隨著并發(fā)數(shù)的上升,mysql5.7.22的性能比mysql8.0.15好1/4左右。
4、讀寫模式下,并發(fā)數(shù)低時,mysql5.7.22性能好于mysql8.0.15;并發(fā)數(shù)比較高時,mysql8.0.15性能好于mysql5.7.22;在80線程的并發(fā)以上時,性能開始下降。
5、只讀模式下,mysql5.7.22性能比mysql8.0.15好1/3左右;隨著并發(fā)數(shù)的上升,性能也沒有上升,反而有下降的趨勢。
6、只寫模式下,mysql5.7.22的tps抖動比較大;mysql5.7.22的qps比mysql8.0.15好1/3左右。
2.3、Mysql 5.7和8.0 INFORMATION_SCHEMA表對比
2.4、Mysql 5.7和8.0/8.1/8.2 Performance Schema 表對比
2.5、Mysql 5.7和8.0,/8.1/8.2 sys Schema表對比
三、升級Mysql到8.0
3.1、升級前準備:
根據(jù)MySQL8.0官方升級教程,列舉出以下幾點注意事項:
1、注意字符集設置。為了避免新舊對象字符集不一致的情況,可以在配置文件將字符集和校驗規(guī)則設置為舊版本的字符集和比較規(guī)則。
2、密碼認證插件變更。為了避免連接問題,可以仍采用5.7的mysql_native_password認證插件。
3、sql_mode支持問題。8.0 版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中帶有NO_AUTO_CREATE_USER。
4、是否需要手動升級系統(tǒng)表。在MySQL 8.0.16版本之前,需要手動的執(zhí)行mysql_upgrade來完成該步驟的升級,在MySQL 8.0.16版本及之后是由mysqld來完成該步驟的升級。
5、mysql 5.7升級到MySQL8,官方強烈建議先將當前的mysql5.7升級到最新的GA版本的5.7.x,然后再升級mysql8.0;但是不支持跨大版本升級,比如 從MySQL 5.6 直接升級到 8.0;現(xiàn)場版本:5.7.31
6、對于同一GA系列版本,升級時支持的,比如MySQL 8.0.x升級 到 8.0.y;不支持涉及開發(fā)狀態(tài)非GA版本的升級,跨小版本也可以,比如從8.0.x 升級到 8.0.z;. MySQL 8.0.11是第一個GA版本;
升級前檢查工具,更多參看升級檢查
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar #解壓文件
tar zxvf mysql-8.0.34-el7-x86_64.tar.gz -C /usr/local/mysql8.0/
#更改目錄屬性
chown -R mysql.mysql /usr/local/mysql8.0/
#MySQL提供mysql-shell驗證方式,可以下載后進行驗證,沒有0.34:
wget https://cdn.mysql.com/archives/mysql-shell/mysql-shell-8.0.33-linux-glibc2.12-x86-64bit.tar.gz
tar -xf mysql-shell-8.0.33-linux-glibc2.12-x86-64bit.tar.gz
cd mysql-shell-8.0.33-linux-glibc2.12-x86-64bit/bin
./mysqlsh -uroot -p'123456' -S /tmp/mysql.sock -e "util.checkForServerUpgrade()"
#全備份
mysqldump -uroot -p'123456' --all-databases --lock-tables=0 > all.sql.bak.20231012
或
mysqldump -uroot -p'123456' --all-databases --single-transaction > all.sql.bak.20231012
3.2、mysql 升級影響
1)會更新mysql的system schema庫,詳見System Schema說明,該庫存儲了mysql數(shù)據(jù)庫運行時所需信息的表,數(shù)據(jù)庫對象元數(shù)據(jù)的數(shù)據(jù)字典表,以及用于其他操作目的的系統(tǒng)表;
2)其他schema:Performance Schema, INFORMATION_SCHEMA, ndbinfo, and sys schema、User schemas;
3)數(shù)據(jù)字典版本,需要與新的主版本適應;新版本會創(chuàng)建具有更新定義的數(shù)據(jù)字典表,將持久化元數(shù)據(jù)復制到新表,用新表原子替換舊表,并重新初始化數(shù)據(jù)字典,更新Performance Schema, INFORMATION_SCHEMA, and ndbinfo;MySQL 8.0.16之前版本, 手動執(zhí)行mysql_upgrade腳本會更新相關如Performance Schema、INFORMATION_SCHEMA等;該版本之后增加了更多其他升級方式;
4)與當前版本關聯(lián)的安裝文件和組件版本的更新;mysql schem種的系統(tǒng)表的更新,sys schema和User schemas更新;
注意:MySQL 5.7種配置選項和變量的變化、
3.3、升級到5.7最新版,即5.7.44
注:命名規(guī)則:packagename-version-distribution-arch.rpm,我們只需下載RPM bundle tar包就好,里面已經(jīng)處理了包之間的依賴;
1)升級步驟
第一種方式:rpm包安裝(需將所有同一版本的上述rpm包全部下載下來,放在同一個目錄)
mysql-5.7.31-1.el7.x86_64.rpm-bundle.zip
mysql-community-client-5.7.31-1.el7.x86_64.rpm
mysql-community-common-5.7.31-1.el7.x86_64.rpm
mysql-community-devel-5.7.31-1.el7.x86_64.rpm
mysql-community-libs-5.7.31-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm
mysql-community-server-5.7.31-1.el7.x86_64.rpm
#查看rpm內(nèi)文件
rpm -qpl mysql-community-server-version-distribution-arch.rpm
#安裝
yum install mysql-community-{server,client,common,libs}-*
或
yum install mysql-community-{server,client,common,libs}-* mysql-5.*-
#啟動,在使用RPM和DEB包進行升級安裝的過程中,如果升級時MySQL服務器正在運行,則MySQL服務器將停止、升級并重新啟動
service mysqld start
#刪除舊的數(shù)據(jù)包
rpm --oldpackage -ivh mysql-community-libs-5.5.50-2.el6.x86_64.rpm
第二種方式:MySQL Binary包升級替換
#配置優(yōu)雅關停,這樣的話,InnoDB在關閉之前執(zhí)行完全pruge清除和更改緩沖區(qū)合并,以確保準備數(shù)據(jù)文件適應不同版本之間存在文件格式差異
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
#關閉舊版
mysqladmin -u root -p shutdown
#啟動mysql 5.7.44 新版本
mysqld_safe --user=mysql --datadir=/usr/local/existing-datadir &
#導入數(shù)據(jù)
#更新系統(tǒng)表,默認下面會檢查所有數(shù)據(jù)庫中的所有表是否與當前版本的MySQL不兼容,并修復相關問題
mysql_upgrade -u root -p -s #其中-s表:--upgrade-system-tables
注:如果轉(zhuǎn)儲文件dump中包含系統(tǒng)表,則不建議在服務器上啟用gtid(gtid_mode=on)時加載轉(zhuǎn)儲文件。mysqldump為使用非事務性MyISAM存儲引擎的系統(tǒng)表發(fā)出DML指令,并且在啟用GTID時不允許這種組合。還要注意,將轉(zhuǎn)儲文件從啟用了GTID的服務器加載到另一個啟用了GTIDs的服務器會導致生成不同的事務標識符。
2)導入數(shù)據(jù)后,進行系統(tǒng)表更新
該過程中,運行mysql_upgrade腳本,它會檢查并解決舊版本數(shù)據(jù)和升級后新版本之間的任何可能的不兼容問題。mysql_upgrade會更新mysql schema下的系統(tǒng)表,更新 Performance Schema 、 sys schema,以讓我們可以充分利用可能已添加的新權限或功能。另還執(zhí)行其他功能,更多參見:mysql_upgrade說明;
mysql_upgrade默認會處理user schema下的所有表,除非執(zhí)行時追加 --upgrade-system-tables選項,執(zhí)行過程中相關表會被鎖定,導致無法訪問,請等待檢查完成;
3.4、配置部署
vim /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
log-bin=mysql-bin
server-id=100
character_set_server=utf8
init_connect='SET NAMES utf8'
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/run/mysqld/mysqld.pid
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=1572864000
innodb_page_size=16384
innodb_undo_directory=./
innodb_undo_tablespaces=0
#不區(qū)分大小寫
lower_case_table_names=1
#sql_mode要注意,8.0中有變化,不支持NO_AUTO_CREATE_USER,新增sql_mode中的NO_ENGINE_SUBSTITUTION
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = '+8:00'
max_allowed_packet = 32M
collation-server = utf8_general_ci
basedir=/usr/local/mysql8.0
datadir=/usr/local/mysql/data
skip_ssl
default_authentication_plugin=mysql_native_password
登錄舊版本的數(shù)據(jù)庫
mysql -uroot -p'123456'
#查看mysql版本
mysql> select version();
mysql> show variables like 'innodb_fast_shutdown';
#確保數(shù)據(jù)都刷到硬盤上,更改成0
mysql> set global innodb_fast_shutdown=0;
mysql> shutdown;
mysql> exit;Bye
使用安全模式啟動MySQL 8.0:文章來源:http://www.zghlxwxcb.cn/news/detail-812347.html
/usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
#登錄新版本數(shù)據(jù)庫
mysql -uroot -p'123456'
mysql> select version();
mysql> exit;
#配置環(huán)境變量
vim /etc/profile #增加下面的內(nèi)寫
export PATH=$PATH:/usr/local/mysql8/bin
source /etc/profile
#客戶端驗證
which mysql
mysql -V
#導入數(shù)據(jù)
待補充
#修改密碼
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'xxxxx';
#配置啟動項
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
# 修改啟動項目
vim /etc/init.d/mysqld # 修改目錄位置
basedir=/usr/local/mysql8
datadir=/usr/local/mysql/data
# 添加到啟動列表
chkconfig --add mysqld
# 刷新啟動信息
systemctl daemon-reload
# 查看啟動項列表
chkconfig --list
#啟動找不到pid
mkdir /var/tmp/mysql
touch /var/tmp/mysqlmysqld.pid
chown -R mysql.mysql /var/tmp/mysqlmysqld.pid
更多參見官網(wǎng)升級說明:跳轉(zhuǎn)進入文章來源地址http://www.zghlxwxcb.cn/news/detail-812347.html
到了這里,關于Mysql5.7大限將至升級Mysql 8.0過程記錄(未完)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!