亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

從MySQL5.7平滑升級(jí)到MySQL8.0數(shù)據(jù)庫的最佳實(shí)踐教程

 更新時(shí)間:2024年07月02日 09:04:12   作者:only°夏至besos  
這篇文章主要給大家介紹了關(guān)于從MySQL5.7平滑升級(jí)到MySQL8.0數(shù)據(jù)庫的最佳實(shí)踐,升級(jí)MySQL版本需要進(jìn)行一系列操作,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下

一、前言

升級(jí)需求:將5.7.35升級(jí)到8.0.27, 升級(jí)方式 in-place升級(jí)【關(guān)閉現(xiàn)有版本MySQL,將二進(jìn)制或包替換成新版本并在現(xiàn)有數(shù)據(jù)目錄上啟動(dòng)MySQL并執(zhí)行升級(jí)任務(wù)的方式,稱為in-place升級(jí)】

原版本 5.7.35 CentOS Linux release 7.9.2009

新版本 8.0.27 CentOS Linux release 7.9.2009

二、Mysql 生命周期

以下Mysql 生命周期-內(nèi)容來自于互聯(lián)網(wǎng)

關(guān)于數(shù)據(jù)庫版本升級(jí),一直都是熱議話題,對(duì)于升級(jí)的緣由各家也有所不同,有業(yè)務(wù)驅(qū)動(dòng)的,有DBA自發(fā)驅(qū)動(dòng)的,有規(guī)劃導(dǎo)向也有方向指引的……拋開各種原因,當(dāng)升級(jí)這個(gè)決定落下來的時(shí)候,對(duì)于DBA手頭的幾百幾千套數(shù)據(jù)庫來說,就好比是一場動(dòng)物大遷徙,滿滿的畫面感。

從Oracle發(fā)布的版本生命周期規(guī)劃可以看到,Mysql5.7已經(jīng)走到了生命周期的終點(diǎn),意味著后續(xù)將不再為Mysql5.7提供官方更新、錯(cuò)誤修復(fù)或安全補(bǔ)丁。

阿里云和AWS都在官方公布了版本支持計(jì)劃,Mysql5.7版本已經(jīng)開始了倒計(jì)時(shí)。

圖片

三、MySQL8.0的新特性

圖片

默認(rèn)字符集由latin1變?yōu)閡tf8mb4。

MyISAM系統(tǒng)表全部換成InnoDB表。

JSON特性增強(qiáng)。

支持不可見索引,支持直方圖。

sql_mode參數(shù)默認(rèn)值變化。

默認(rèn)密碼策略變更。

新增角色管理。

支持窗口函數(shù),支持Hash join。

四、升級(jí)建議

支持從MySQL5.7升級(jí)到MySQL8.0,注意僅支持GA版本之間的升級(jí)。

不支持跨大版本的升級(jí),如從5.6升級(jí)到8.0是不支持的。

建議升級(jí)大版本前先升級(jí)到當(dāng)前版本的最近小版本,如5.7先升級(jí)到5.7.35后再升級(jí)到8.0。

做好充足的備份!數(shù)據(jù)無價(jià)!!!

五、升級(jí)前準(zhǔn)備

5.1 Mysql-shell 檢查工具兼容性

在執(zhí)行升級(jí)操作前需要做一些檢查工作,確認(rèn)準(zhǔn)備工作是否就緒,避免升級(jí)過程中出現(xiàn)異常??梢允褂肕ySQL Shell使用util.checkForServerUpgrade進(jìn)行檢查,返回內(nèi)容包括不符合遷移要求的問題,error的問題需要遷移前修改。

Mysql-shell 下載地址:https://dev.mysql.com/downloads/shell/

這里我們選擇8027版本

圖片

然后上傳文件至5.7.35的機(jī)器/root目錄下

[root@localhost ~]# tar -xf mysql-shell-8.0.27-linux-glibc2.12-x86-64bit.tar.gz
[root@localhost ~]# cd mysql-shell-8.0.27-linux-glibc2.12-x86-64bit/bin/
[root@localhost bin]# ./mysqlsh -uroot -p -S /tmp/mysql.sock -e "util.checkForServerUpgrade()" > util.checkForServerUpgrade.log

從輸出報(bào)告可以看出,升級(jí)檢查器在23個(gè)方面進(jìn)行了檢查,最終得出4個(gè)警告信息和1個(gè)提示。

消除警告:

Usage of utf8mb3 charset 在MySQL 8.0版本之前,默認(rèn)字符集為latin1 ,utf8字符集指向的是utf8mb3 。從MySQL8.0開始,數(shù)據(jù)庫的默認(rèn)編碼將改為utf8mb4 ;為了避免新舊對(duì)象字符集不一致的情況,可以在配置文件將字符集和校驗(yàn)規(guī)則設(shè)置為舊版本的字符集和比較規(guī)則。

New default authentication plugin considerations,密碼認(rèn)證插件變更。為了避免連接問題,可以仍采用5.7的mysql_native_password認(rèn)證插件。

消除提示:

Usage of obsolete sql_mode flags:Mysq8.0 版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中帶有NO_AUTO_CREATE_USER。

通過以上的例子,可以發(fā)現(xiàn),MySQL Shell提供的升級(jí)檢查工具能夠幫助我們檢測版本兼容性,減輕升級(jí)工作負(fù)擔(dān)。

5.2 邏輯備份Mysql數(shù)據(jù)

[root@localhost opt]#which mysqldump
[root@localhost opt]#/usr/local/mysql/bin/mysqldump
# --routines 備份存儲(chǔ)過程和函數(shù);--set-gtid-purged=OFF: 禁用GTID(全局事務(wù)標(biāo)識(shí));xxx1,XXX2 表示庫名,備份多個(gè)庫 用空格做為間隔
[root@localhost opt]#/usr/local/mysql/bin/mysqldump -uroot -p --routines --set-gtid-purged=OFF -A > /root/all-database-20231115.sql

5.3 優(yōu)雅的停止數(shù)據(jù)庫

select version();
show variables like 'innodb_fast_shutdown';

# 確保數(shù)據(jù)都刷到硬盤上,更改成0InnoDB關(guān)閉模式。如果值為0,InnoDB會(huì)在關(guān)閉前進(jìn)行緩慢關(guān)閉、完全清除和更改緩沖區(qū)合并。如果值為1(默認(rèn)值),InnoDB會(huì)在關(guān)閉時(shí)跳過這些操作,這個(gè)過程稱為快速關(guān)閉。如果值為2,InnoDB刷新其日志并冷關(guān)機(jī),就好像MySQL崩潰了;沒有提交的事務(wù)丟失,但崩潰恢復(fù)操作使下一次啟動(dòng)需要更長的時(shí)間。在仍然緩沖大量數(shù)據(jù)的極端情況下,緩慢關(guān)閉可能需要幾分鐘甚至幾小時(shí)。

set global innodb_fast_shutdown=0;
shut down;
exit
[root@localhost opt]# ps -ef|grep mysql

圖片

5.4 備份Mysql 數(shù)據(jù)目錄,安裝目錄 和配置文件

--確認(rèn)數(shù)據(jù)庫狀態(tài)為關(guān)閉狀態(tài)
[root@localhost opt]# service mysql status
--數(shù)據(jù)目錄備份
[root@localhost opt]# cp -r /data/mysql /data/mysql_bak_`date +%F`
--安裝目錄備份
[root@localhost opt]# cp -r /usr/local/mysql/ /usr/local/mysql_bak_`date +%F`
--配置文件備份
[root@localhost local]# cp /etc/my.cnf /etc/my.cnf_`date +%F`

圖片

5.5 下載并解壓MySQL8

安裝包上傳至原安裝包目錄下 我的是/usr/local/mysql

[root@localhost local]# tar -xf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
# 文件夾重命名為mysql8
[root@localhost local]# mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql8
# 更改文件夾所屬
[root@localhost local]# chown -Rf mysql:mysql /usr/local/mysql8
# 刪除安裝包
[root@localhost local]# rm -rf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

六、升級(jí)

6.1 修改my.cnf 配置文件

因5.7版本與8.0版本參數(shù)有所不同,為了能順利升級(jí),我們需要更改部分配置參數(shù)。主要注意sql_mode、basedir、密碼認(rèn)證插件及字符集設(shè)置,其他參數(shù)最好還是按照原5.7的來,不需要做調(diào)整。下面展示5.7和8.0的配置文件,注意備份原來配置文件。

6.1.1 Mysql5.7_my.cnf 配置文件

相比5.7,8多了以下配置

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
basedir=/home/application/mysql/mysql8
datadir=/home/application/mysql/data
character_set_server=utf8
collation-server=utf8_general_ci
# 默認(rèn)使用"mysql_native_password"插件認(rèn)證
default_authentication_plugin=mysql_native_password
# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎
default-storage-engine=INNODB

6.2 執(zhí)行升級(jí)程序

在mysql5.7升級(jí)的時(shí)候,MySQL啟動(dòng)后還需執(zhí)行mysql_upgrade后重啟MySQL。MySQL8.0.16開始,MySQL 不推薦使用mysql_upgrade;直接使用 mysqld_safe 直接啟動(dòng)。關(guān)于--upgrade=的一些參數(shù)。

--upgrade=AUTO MySQL升級(jí)所有過時(shí)的內(nèi)容

  • --upgrade=NONE MySQL跳過升級(jí)步驟,可能會(huì)導(dǎo)致報(bào)錯(cuò)
  • --upgrade=MINIMAL MySQL在必要時(shí)升級(jí)數(shù)據(jù)字典表,information_schema和information_schema。這可能會(huì)導(dǎo)致部分功能不能正常使用,例如MGR
  • --upgrade=FORCE MySQL會(huì)升級(jí)所有的內(nèi)容,這會(huì)檢查所有schema的所有對(duì)象,導(dǎo)致MySQL需要更長的時(shí)間啟動(dòng)。此模式下MySQL會(huì)重新創(chuàng)建系統(tǒng)表if they are missing。
[root@localhost local]# /usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --upgrade=FORCE

圖片

新開一個(gè)窗口,可觀察下錯(cuò)誤日志看是否報(bào)錯(cuò)

tailf /data/mysql/mysql-error.log 然后登錄數(shù)據(jù)庫測試

圖片

重新登錄
[root@localhost bin]# mysql -uroot -proot
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.00 sec)

圖片

6.3 修改Mysql環(huán)境變量

由于basedir 從/usr/local/mysql 變成了 /usr/local/mysql8,需要修改下環(huán)境變量信息:

[root@localhost bin]# vi /etc/profile
export PATH=$PATH:/usr/local/mysql8/bin:/usr/local/mysql8/lib
[root@localhost bin]# source /etc/profile
[root@localhost ~]# which mysql
/usr/local/mysql8/bin/mysql
[root@localhost ~]# mysql -V
mysql  Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)

圖片

6.4驗(yàn)證恢復(fù)過來的數(shù)據(jù)是否正常

圖片

七、問題及經(jīng)驗(yàn)總結(jié)

7.1 問題一

在升級(jí)Mysql8.0后,關(guān)于JDBC中SSL連接的一些報(bào)錯(cuò)信息,如下圖:

圖片

經(jīng)排查發(fā)現(xiàn),Mysql8.0 數(shù)據(jù)庫默認(rèn)開啟了SSL認(rèn)證,且之前Mysql5.7.39 也是默認(rèn)開啟了SSL認(rèn)證,代碼和JDBC驅(qū)動(dòng)版本都沒有變化,那很有可能就是Mysql8.0 中對(duì)于SSL的一個(gè)變化,咨詢了DBA 朋友,專業(yè)的解釋是,在5.7.31的時(shí)候SSL在源碼中貌似沒有真正的起作用,后面版本完善了這塊的內(nèi)容。倘若,不使用SSL去連接,就 需要按照如下的方法去處理:

方法一:從數(shù)據(jù)庫成面,直接在my.cnf 中 添加skip_ssl 參數(shù),從源頭上關(guān)閉SSL 認(rèn)證的方式

方法二:從代碼層面,在JDBC 連接中,使用 &useSSL=false 參數(shù),表示不使用SSL 認(rèn)證

7.2 問題二

Mysql 報(bào)錯(cuò)unblock with ‘mysqladmin flush-hosts’,報(bào)錯(cuò)如下:

JDBC連接報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容 ERROR 1129 (HY000): Host ‘192.168.59.202’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

原因:同一個(gè)ip在短時(shí)間內(nèi)產(chǎn)生太多,中斷的數(shù)據(jù)庫連接而導(dǎo)致的阻塞;而中斷的因?yàn)橛行I(yè)務(wù)使用SSL去連接數(shù)據(jù)庫,導(dǎo)致登錄失敗,登錄被鎖;

臨時(shí)解決方法,使用mysqladmin flush-hosts 命令清理一下hosts文件,mysqladmin -u xxx -p flush-hosts,根本上去解決,就需要排查什么異常的連接導(dǎo)致阻塞,登錄被鎖,比如上面提到的SSL認(rèn)證的問題。

7.1 問題三

MySQL--使用innodb_force_recovery修復(fù)數(shù)據(jù)庫異常

當(dāng)MySQL服務(wù)異常重啟失敗后,可以通過配置參數(shù)innodb_force_recovery來對(duì)MySQL服務(wù)進(jìn)行修復(fù)啟動(dòng)。

參數(shù)innodb_force_recovery選項(xiàng):

1 (SRV_FORCE_IGNORE_CORRUPT): 忽略檢查到的 corrupt 頁。盡管檢測到了損壞的 page 仍強(qiáng)制服務(wù)運(yùn)行。一般設(shè)置為該值即可,然后 dump 出庫表進(jìn)行重建。

2 (SRV_FORCE_NO_BACKGROUND): 阻止主線程的運(yùn)行,如主線程需要執(zhí)行 full purge 操作,會(huì)導(dǎo)致 crash。阻止 master thread 和任何 purge thread 運(yùn)行。若 crash 發(fā)生在 purge 環(huán)節(jié)則使用該值。

3 (SRV_FORCE_NO_TRX_UNDO): 不執(zhí)行事務(wù)回滾操作。

4 (SRV_FORCE_NO_IBUF_MERGE): 不執(zhí)行插入緩沖的合并操作。如果可能導(dǎo)致崩潰則不要做這些操作。不要進(jìn)行統(tǒng)計(jì)操作。該值可能永久損壞數(shù)據(jù)文件。若使用了該值,則將來要?jiǎng)h除和重建輔助索引。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB 存儲(chǔ)引擎會(huì)將未提交的事務(wù)視為已提交。此時(shí) InnoDB 甚至把未完成的事務(wù)按照提交處理。該值可能永久性的損壞數(shù)據(jù)文件。

6 (SRV_FORCE_NO_LOG_REDO): 不執(zhí)行前滾的操作。恢復(fù)時(shí)不做 redo log roll-forward。使數(shù)據(jù)庫頁處于廢止?fàn)顟B(tài),繼而可能引起 B 樹或者其他數(shù)據(jù)庫結(jié)構(gòu)更多的損壞。

參數(shù)innodb_force_recovery設(shè)置:

在配置文件中的mysqld模塊添加參數(shù)innodb_force_recovery。

[mysqld]
innodb_force_recovery    =    N

相同參數(shù)innodb_force_recovery在不同MySQL版本允許的操作可能不同,所有版本中innodb_force_recovery>0時(shí)都允許對(duì)表進(jìn)行SELECT操作。

使用參數(shù)innodb_force_recovery建議:

1、如果MySQL服務(wù)故障重啟后,因?yàn)槭聞?wù)回滾導(dǎo)致異常,可以將參數(shù)innodb_force_recovery設(shè)置為3跳過回滾階段

2、如果因?yàn)镸ySQL數(shù)據(jù)頁損壞導(dǎo)致異常,可以使用SELECT+WHERE查找出未損壞數(shù)據(jù)并將其通過mysqldump導(dǎo)出。

3、將innodb_force_recovery參數(shù)設(shè)置大于0啟動(dòng)服務(wù)后,應(yīng)通過修改端口或域名(VIP)指向來屏蔽應(yīng)用訪問。

4、將innodb_force_recovery參數(shù)設(shè)置大于0啟動(dòng)服務(wù)后,可以通過mysqlcheck命令來對(duì)表進(jìn)行檢查/分析/優(yōu)化/修復(fù)。

5、使用force_recovery重啟服務(wù)前,建議對(duì)數(shù)據(jù)庫所有文件進(jìn)行備份,避免修復(fù)過程中對(duì)數(shù)據(jù)進(jìn)行二次損害。

在日常運(yùn)維中,應(yīng)將使用innodb_force_recovery參數(shù)進(jìn)行數(shù)據(jù)恢復(fù)作為最后手段,做好完善的備份恢復(fù)機(jī)制,避免對(duì)數(shù)據(jù)庫做高危操作。

總結(jié)

到此這篇關(guān)于從MySQL5.7平滑升級(jí)到MySQL8.0數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)MySQL5.7平滑升級(jí)到MySQL8.0內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 有關(guān)mysql中ROW_COUNT()的小例子

    有關(guān)mysql中ROW_COUNT()的小例子

    mysql中的ROW_COUNT()可以返回前一個(gè)SQL進(jìn)行UPDATE,DELETE,INSERT操作所影響的行數(shù)
    2013-02-02
  • 教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    Binlog日志是二進(jìn)制日志文件,有兩個(gè)作用,一個(gè)是增量備份,另一個(gè)是主從復(fù)制,即主節(jié)點(diǎn)維護(hù)一個(gè)binlog日志文件,從節(jié)點(diǎn)從binlog中同步數(shù)據(jù),也可以通過binlog日志來恢復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于如何通過日志文件恢復(fù)MySQL數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 搭建Mysql視圖可視化操作(保姆級(jí))

    搭建Mysql視圖可視化操作(保姆級(jí))

    本文主要介紹了搭建Mysql視圖可視化操作,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • linux下改良版本mysqldump來備份MYSQL數(shù)據(jù)庫

    linux下改良版本mysqldump來備份MYSQL數(shù)據(jù)庫

    我的備份腳本都是在凌晨執(zhí)行的,經(jīng)常在慢查詢?nèi)罩纠锩婵吹竭@樣的信息:select * from table1; 之前一直很納悶,最后才了解到原來是MYSQLDUMP搞的鬼。
    2008-07-07
  • PHP版Mysql爆破小腳本

    PHP版Mysql爆破小腳本

    本文給大家分享的是使用php實(shí)現(xiàn)暴力破解mysql的小腳本代碼,非常的好用,有需要的小伙伴可以參考下
    2016-10-10
  • mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份

    mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份

    今天小編就為大家分享一篇關(guān)于mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 詳解記錄MySQL中l(wèi)ower_case_table_names的坑

    詳解記錄MySQL中l(wèi)ower_case_table_names的坑

    這篇文章主要介紹了詳解記錄MySQL中l(wèi)ower_case_table_names的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 不使用MySQL數(shù)據(jù)庫的五個(gè)給力理由解析

    不使用MySQL數(shù)據(jù)庫的五個(gè)給力理由解析

    眾所周知,MySQL數(shù)據(jù)庫雖然功能未必很強(qiáng)大,但因?yàn)樗拈_源、廣泛傳播,導(dǎo)致很多人都了解到這個(gè)數(shù)據(jù)庫。
    2011-03-03
  • 一次SQL如何查重及去重的實(shí)戰(zhàn)記錄

    一次SQL如何查重及去重的實(shí)戰(zhàn)記錄

    sql去重這可以說算是比較經(jīng)典的面試題了,這篇文章主要給大家介紹了一次SQL如何查重及去重的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • MySql 8.0.11 安裝過程及 Navicat 鏈接時(shí)遇到的問題小結(jié)

    MySql 8.0.11 安裝過程及 Navicat 鏈接時(shí)遇到的問題小結(jié)

    這篇文章主要介紹了MySql 8.0.11 安裝過程及 Navicat 鏈接時(shí)遇到的問題,需要的朋友可以參考下
    2018-06-06

最新評(píng)論