MySQL8.0就地升級(jí)到MySQL8.4.0的方法
MySQL8.0就地升級(jí)到MySQL8.4.0
升級(jí)需求:將8.0.35升級(jí)到8.4.0,以In-Place方式直接升級(jí)到MySQL8.4.0。
數(shù)據(jù)庫(kù)版本 | 操作系統(tǒng)版本 | |
原版本 | 8.0.35 | Centos7.9 x86_64 |
新版本 | 8.4.0 | Centos7.9 x86_64 |
關(guān)閉現(xiàn)有版本MySQL,將二進(jìn)制或包替換成新版本并在現(xiàn)有數(shù)據(jù)目錄上啟動(dòng)MySQL并執(zhí)行升級(jí)任務(wù)的方式,稱為in-place升級(jí)。升級(jí)過(guò)程分為以下幾步:
- 完成升級(jí)前檢查,并處理不合規(guī)問(wèn)題。
- 如果使用了XA事務(wù),升級(jí)前通過(guò)命令xa recover未提交XA事務(wù),并使用xa commit或xa rollback命令提交或回滾。
- 將innodb_fast_shutdown改為0或1。
- 關(guān)閉現(xiàn)版本MySQL。
- 升級(jí)MySQL二進(jìn)制文件或軟件包。
- 在現(xiàn)有數(shù)據(jù)目錄上啟動(dòng)新版本MySQL。
MySQL8.4.0特性說(shuō)明
以下整理了常用的功能變化,詳細(xì)內(nèi)容查閱官方文檔,官方文檔位置:MySQL :: MySQL 8.4 Reference Manual :: 1.4 What Is New in MySQL 8.4 since MySQL 8.0
新增功能
MySQL本地密碼驗(yàn)證更改
從MySQL 8.4.0開始,默認(rèn)情況下不再啟用已棄用的 mysql_native_password 身份驗(yàn)證插件。要啟用它,請(qǐng)使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)啟動(dòng)服務(wù)器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。
InnoDB系統(tǒng)變量默認(rèn)值更改
InnoDB系統(tǒng)變量默認(rèn)值更改。在MySQL 8.4.0中,與 InnoDB 存儲(chǔ)引擎相關(guān)的多個(gè)服務(wù)器系統(tǒng)變量的默認(rèn)值發(fā)生了更改,如下表所示:
InnoDB System Variable NameInnoDB系統(tǒng)變量名 | New Default Value (MySQL 8.4)新默認(rèn)值(MySQL 8.4) | Previous Default Value (MySQL 8.0)默認(rèn)值(MySQL 8.0) |
OFF if MADV_DONTDUMP is supported, otherwise ON | ON | |
If innodb_buffer_pool_size <= 1 GiB, then innodb_buffer_pool_instances=1如果 innodb_buffer_pool_size <= 1 GiB,則 innodb_buffer_pool_instances=1 If innodb_buffer_pool_size > 1 GiB, then this is the minimum value from the following two calculated hints in the range of 1-64:
| 8 (or 1 if innodb_buffer_pool_size < 1 GiB) | |
none | all | |
If ON[a] , the value of innodb_flush_method is no longer changed as in MySQL 8.0, but the calculation of innodb_redo_log_capacity is changed from memory-based to CPU-based. For more information, see Section 17.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server” . | OFF | |
OFF | ON | |
2 |
* 2 | |
128 |
, which meant a default of 4 | |
on Linux innodb_flush_method 在Linux上 | O_DIRECT if supported, otherwise fsync | fsync |
10000 | 200 | |
, with a minimum default value of 2000 | ||
67108864 (64 MiB) 67108864(64 MiB) | 16777216 (16 MiB) 16777216(16 MiB) | |
ON | OFF | |
4 | ||
available logical processors / 8, with a minimum default value of 4 | 4 | |
1 if available logical processors is <= 16, otherwise 4 | 4 | |
available logical processors / 2, with a minimum default value of 4 | 4 | |
ON | OFF | |
3% of total memory, with a default value within a range of 1-4 GiB | 1073741824 (1 GiB) 1073741824(1 GiB) | |
0, which means OFF 0,表示 OFF | 1073741824 (1 GiB) 1073741824(1 GiB) | |
OFF | ON |
克隆插件
克隆插件。克隆插件版本控制要求被放寬,允許在同一系列的不同版本之間進(jìn)行克隆。換句話說(shuō),只有主版本號(hào)和次版本號(hào)必須匹配,而以前點(diǎn)版本號(hào)也必須匹配
例如,克隆功能現(xiàn)在允許將8.4.0克隆到8.4.14,反之亦然。
MySQL復(fù)制
SOURCE_RETRY_COUNT變化
MySQL復(fù)制:SOURCE_RETRY_COUNT更改。 CHANGE REPLICATION SOURCE TO 語(yǔ)句的 SOURCE_RETRY_COUNT 選項(xiàng)的默認(rèn)值已更改為10。這意味著,如果使用此選項(xiàng)和 SOURCE_CONNECT_RETRY 的默認(rèn)值(60),復(fù)制副本將在兩次重新連接嘗試之間等待60秒,并在超時(shí)和故障切換之前以此速率繼續(xù)嘗試重新連接10分鐘。
此更改也適用于已棄用的 --master-retry-count 服務(wù)器選項(xiàng)的默認(rèn)值。(You應(yīng)該使用 SOURCE_RETRY_COUNT 代替。)
標(biāo)記的GTID
MySQL復(fù)制:標(biāo)記的GTID。MySQL復(fù)制和組復(fù)制中使用的全局事務(wù)標(biāo)識(shí)符(GID)的格式已經(jīng)擴(kuò)展,可以識(shí)別事務(wù)組,從而可以為屬于特定事務(wù)組的GTID分配唯一的名稱。例如,包含數(shù)據(jù)操作的事務(wù)可以通過(guò)比較它們的GTID容易地與由管理操作產(chǎn)生的事務(wù)區(qū)分開。
新的GTID格式是 UUID:TAG:NUMBER ,其中 TAG 是最多8個(gè)字符的字符串,通過(guò)將 gtid_next 系統(tǒng)變量的值設(shè)置為 AUTOMATIC:TAG (在此版本中添加)來(lái)啟用(有關(guān)標(biāo)記格式和其他信息,請(qǐng)參見變量的描述)。此標(biāo)記對(duì)于當(dāng)前會(huì)話中發(fā)起的所有事務(wù)都保持不變(除非使用 SET gtid_next 進(jìn)行了更改),并在此類事務(wù)的提交時(shí)應(yīng)用,或者在使用組復(fù)制時(shí)在認(rèn)證時(shí)應(yīng)用。也可以將 gtid_next 設(shè)置為 UUID:TAG:NUMBER ,以將單個(gè)事務(wù)的UUID設(shè)置為任意值,同時(shí)沿著為其分配自定義標(biāo)記。 UUID 和 NUMBER 的分配與以前的MySQL版本相比沒(méi)有變化。在任何一種情況下,用戶都有責(zé)任確保標(biāo)記對(duì)于給定的復(fù)制拓?fù)涫俏ㄒ坏摹?/p>
將 gtid_next 設(shè)置為 AUTOMATIC:TAG 或 UUID:TAG:NUMBER 需要一個(gè)新的 TRANSACTION_GTID_TAG 權(quán)限,該權(quán)限是在此版本中添加的;在原始服務(wù)器上以及副本應(yīng)用程序線程的 PRIVILEGE_CHECKS_APPLIER 上都是如此。這也意味著管理員現(xiàn)在可以將 SET @gtid_next=AUTOMATIC:TAG 或 UUID:TAG:NUMBER 的使用限制為所需的MySQL用戶或角色集,以便只有與給定數(shù)據(jù)或操作域相關(guān)的用戶才能提交具有分配的標(biāo)記的新事務(wù)。
從MySQL的早期版本升級(jí)到MySQL 8.4時(shí),任何已經(jīng)擁有 BINLOG_ADMIN 權(quán)限的用戶帳戶或角色都會(huì)自動(dòng)獲得 TRANSACTION_GTID_TAG 權(quán)限。
棄用的功能
expire_logs_days
expire_logs_days系統(tǒng)變量。MySQL 8.0中不推薦使用的 expire_logs_days server系統(tǒng)變量已被刪除。嘗試在運(yùn)行時(shí)獲取或設(shè)置此變量,或使用等效選項(xiàng)( --expire-logs-days )啟動(dòng)mysqld,現(xiàn)在會(huì)導(dǎo)致錯(cuò)誤。
使用 binlog_expire_logs_seconds 來(lái)代替 expire_logs_days ,它允許您指定(僅)整數(shù)天以外的到期期限。
刪除的功能
Replication SQL syntax
復(fù)制SQL語(yǔ)法。MySQL復(fù)制中使用的一些SQL語(yǔ)句在MySQL的早期版本中被棄用,在MySQL 8.4中不再支持?,F(xiàn)在,嘗試使用這些語(yǔ)句中的任何一個(gè)都會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤。這些語(yǔ)句可以分為兩組:與源服務(wù)器相關(guān)的語(yǔ)句和與副本相關(guān)的語(yǔ)句,如下所示:
作為這項(xiàng)工作的一部分, CREATE EVENT 和 ALTER EVENT 的 DISABLE ON SLAVE 選項(xiàng)現(xiàn)在已被棄用,并被 DISABLE ON REPLICA 取代。相應(yīng)的術(shù)語(yǔ) SLAVESIDE_DISABLED 現(xiàn)在也被棄用,并且不再用于事件描述中,例如在信息架構(gòu) EVENTS 表中;現(xiàn)在顯示的是 REPLICA_SIDE_DISABLED 。
下面列出了已刪除的與復(fù)制源服務(wù)器相關(guān)的語(yǔ)句:
- CHANGE MASTER TO: Use CHANGE REPLICATION SOURCE TO.
- RESET MASTER: Use RESET BINARY LOGS AND GTIDS.
- SHOW MASTER STATUS: Use SHOW BINARY LOG STATUS.
- PURGE MASTER LOGS: Use PURGE BINARY LOGS.
- SHOW MASTER LOGS: Use SHOW BINARY LOGS.
此處列出了刪除的與復(fù)制副本相關(guān)的SQL語(yǔ)句:
- START SLAVE: Use START REPLICA.
- STOP SLAVE: Use STOP REPLICA.
- SHOW SLAVE STATUS: Use SHOW REPLICA STATUS.
- SHOW SLAVE HOSTS: Use SHOW REPLICAS.
- RESET SLAVE: Use RESET REPLICA.
此處列出了從 CHANGE REPLICATION SOURCE TO 中刪除的選項(xiàng): - MASTER_AUTO_POSITION: Use SOURCE_AUTO_POSITION.
- MASTER_HOST: Use SOURCE_HOST.
- MASTER_BIND: Use SOURCE_BIND.
- MASTER_UseR: Use SOURCE_UseR.
- MASTER_PASSWORD: Use SOURCE_PASSWORD.
- MASTER_PORT: Use SOURCE_PORT.
- MASTER_CONNECT_RETRY: Use SOURCE_CONNECT_RETRY.
- MASTER_RETRY_COUNT: Use SOURCE_RETRY_COUNT.
- MASTER_DELAY: Use SOURCE_DELAY.
- MASTER_SSL: Use SOURCE_SSL.
- MASTER_SSL_CA: Use SOURCE_SSL_CA.
- MASTER_SSL_CAPATH: Use SOURCE_SSL_CAPATH.
- MASTER_SSL_CIPHER: Use SOURCE_SSL_CIPHER.
- MASTER_SSL_CRL: Use SOURCE_SSL_CRL.
- MASTER_SSL_CRLPATH: Use SOURCE_SSL_CRLPATH.
- MASTER_SSL_KEY: Use SOURCE_SSL_KEY.
- MASTER_SSL_VERIFY_SERVER_CERT: Use SOURCE_SSL_VERIFY_SERVER_CERT.
- MASTER_TLS_VERSION: Use SOURCE_TLS_VERSION.
- MASTER_TLS_CIPHERSUITES: Use SOURCE_TLS_CIPHERSUITES.
- MASTER_SSL_CERT: Use SOURCE_SSL_CERT.
- MASTER_PUBLIC_KEY_PATH: Use SOURCE_PUBLIC_KEY_PATH.
- GET_MASTER_PUBLIC_KEY: Use GET_SOURCE_PUBLIC_KEY.
- MASTER_HEARTBEAT_PERIOD: Use SOURCE_HEARTBEAT_PERIOD.
- MASTER_COMPRESSION_ALGORITHMS: Use SOURCE_COMPRESSION_ALGORITHMS.
- MASTER_ZSTD_COMPRESSION_LEVEL: Use SOURCE_ZSTD_COMPRESSION_LEVEL.
- MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
- MASTER_LOG_POS: Use SOURCE_LOG_POS.
此處列出了從 START REPLICA 語(yǔ)句中刪除的選項(xiàng):
- MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
- MASTER_LOG_POS: Use SOURCE_LOG_POS.
mysql_upgrade
mysql_upgrade實(shí)用程序,在MySQL 8.0.16中被棄用,已被刪除。
mysqlpump
mysqlpump實(shí)用程序。mysqlpump實(shí)用程序沿著及其輔助實(shí)用程序lz4_blog和zlib_blog,在MySQL 8.0.34中已被刪除。相反,使用mysqldump或MySQL Shell的轉(zhuǎn)儲(chǔ)實(shí)用程序。
一.升級(jí)前準(zhǔn)備
1.1.查看支持的平臺(tái)
MySQL8.4.0已不支持Linux7以下的操作系統(tǒng)。支持的平臺(tái)可查看官方文檔,官方文檔位置:
https://www.mysql.com/support/supportedplatforms/database.html
1.2.停止業(yè)務(wù)
確保業(yè)務(wù)已停止,保證數(shù)據(jù)一致性
--查詢數(shù)據(jù)庫(kù)中哪些線程正在執(zhí)行 show processlist;
1.3.查看源數(shù)據(jù)庫(kù)信息
#查版本 mysql -V 或 mysql> select version(); +------------+ | version() | +------------+ | 8.0.35 | +------------+ 1 row in set (0.00 sec)
場(chǎng)景1:查詢所有數(shù)據(jù)庫(kù)的總大小
--查詢所有數(shù)據(jù)庫(kù)的總大小 use information_schema; select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES; --統(tǒng)計(jì)一下所有庫(kù)數(shù)據(jù)量 SELECT SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb FROM information_schema.TABLES; --統(tǒng)計(jì)每個(gè)庫(kù)大小 SELECT table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb FROM information_schema.TABLES group by table_schema;
場(chǎng)景2:查看指定數(shù)據(jù)庫(kù)的大小
use information_schema; select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='pijiake';
場(chǎng)景3:記錄數(shù)
--查看所有數(shù)據(jù)庫(kù)各容量大小 select table_schema as '數(shù)據(jù)庫(kù)', sum(table_rows) as '記錄數(shù)', sum(truncate(data_length/1024/1024, 2)) as '數(shù)據(jù)容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc; --查看所有數(shù)據(jù)庫(kù)各表容量大小 select table_schema as '數(shù)據(jù)庫(kù)', table_name as '表名', table_rows as '記錄數(shù)', truncate(data_length/1024/1024, 2) as '數(shù)據(jù)容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables order by data_length desc, index_length desc; --查看指定數(shù)據(jù)庫(kù)容量大小(例:查看mysql庫(kù)容量大小) select table_schema as '數(shù)據(jù)庫(kù)', sum(table_rows) as '記錄數(shù)', sum(truncate(data_length/1024/1024, 2)) as '數(shù)據(jù)容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='test'; --查看指定數(shù)據(jù)庫(kù)各表容量大小(例:查看mysql庫(kù)各表容量大小) select table_schema as '數(shù)據(jù)庫(kù)', table_name as '表名', table_rows as '記錄數(shù)', truncate(data_length/1024/1024, 2) as '數(shù)據(jù)容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables where table_schema='test' order by data_length desc, index_length desc;
1.4.檢查未提交的XA事務(wù)
如果您將XA事務(wù)與 InnoDB 一起使用,請(qǐng)?jiān)谏?jí)之前運(yùn)行 XA RECOVER 以檢查未提交的XA事務(wù)。如果返回結(jié)果,則通過(guò)發(fā)出 XA COMMIT 或 XA ROLLBACK 語(yǔ)句提交或回滾XA事務(wù)。
#檢查沒(méi)有未提交的xa事務(wù) mysql> xa recover; Empty set (0.00 sec)
1.5.確保數(shù)據(jù)都刷到硬盤上
如果您正常運(yùn)行MySQL服務(wù)器,并將 innodb_fast_shutdown 設(shè)置為 2 (冷關(guān)閉),請(qǐng)通過(guò)執(zhí)行以下語(yǔ)句之一來(lái)配置它以執(zhí)行快速或慢速關(guān)閉:
# 確保數(shù)據(jù)都刷到硬盤上,更改成0 mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" 或 mysql> show variables like 'innodb_fast_shutdown'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | innodb_fast_shutdown | 1 | +----------------------+-------+ 1 row in set (0.00 sec) mysql> set global innodb_fast_shutdown=0; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'innodb_fast_shutdown'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | innodb_fast_shutdown | 0 | +----------------------+-------+
補(bǔ)充說(shuō)明:
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
1.6.升級(jí)前的初步檢查
mysqlcheck -u root -p --all-databases --check-upgrade
1.6.1.初步檢查的內(nèi)容有
1.6.1.1.不得存在以下問(wèn)題
- 不能有使用過(guò)時(shí)數(shù)據(jù)類型或函數(shù)的表。
- 不能有孤立的 .frm 文件。
- 觸發(fā)器不能有缺失的或空的定義符或無(wú)效的創(chuàng)建上下文
1.6.1.2.不能不具有本機(jī)分區(qū)支持存儲(chǔ)引擎的分區(qū)表
不能有使用不具有本機(jī)分區(qū)支持的存儲(chǔ)引擎的分區(qū)表。要識(shí)別此類表,請(qǐng)執(zhí)行以下查詢:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';
查詢報(bào)告的任何表都必須更改為使用 InnoDB 或不分區(qū)。要將表存儲(chǔ)引擎更改為 InnoDB ,請(qǐng)執(zhí)行以下語(yǔ)句:
ALTER TABLE table_name ENGINE = INNODB;
要使已分區(qū)表成為非分區(qū)表,請(qǐng)執(zhí)行以下語(yǔ)句:
ALTER TABLE table_name REMOVE PARTITIONING;
1.6.1.3.關(guān)鍵字
MySQL 8.4中可能保留了一些以前沒(méi)有保留的關(guān)鍵字。參見第11.3節(jié)“關(guān)鍵字和保留字”。這可能會(huì)導(dǎo)致以前用作標(biāo)識(shí)符的單詞變?yōu)榉欠?。若要修?fù)受影響的語(yǔ)句,請(qǐng)使用標(biāo)識(shí)符引號(hào)。
1.6.1.4.數(shù)據(jù)字典使用的表同名的表檢查
MySQL系統(tǒng)數(shù)據(jù)庫(kù)中不能有與MySQL 8.4數(shù)據(jù)字典使用的表同名的表。要標(biāo)識(shí)具有這些名稱的表,請(qǐng)執(zhí)行以下查詢:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql' AND LOWER(TABLE_NAME) IN ( 'catalogs', 'character_sets', 'check_constraints', 'collations', 'column_statistics', 'column_type_elements', 'columns', 'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys', 'index_column_usage', 'index_partitions', 'index_stats', 'indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines', 'schemata', 'st_spatial_reference_systems', 'table_partition_values', 'table_partitions', 'table_stats', 'tables', 'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage', 'view_table_usage' );
必須刪除或重命名查詢報(bào)告的任何表(使用 RENAME TABLE )。這還可能需要對(duì)使用受影響表的應(yīng)用程序進(jìn)行更改。
1.6.1.5.外鍵約束名稱檢查
不能有外鍵約束名稱超過(guò)64個(gè)字符的表。使用此查詢可標(biāo)識(shí)約束名稱過(guò)長(zhǎng)的表:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1), INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
對(duì)于約束名稱超過(guò)64個(gè)字符的表,請(qǐng)刪除該約束,然后使用不超過(guò)64個(gè)字符的約束名稱將其添加回來(lái)(使用 ALTER TABLE )。
1.6.1.6.sql_mode檢查
必須沒(méi)有由 sql_mode 系統(tǒng)變量定義的過(guò)時(shí)SQL模式。嘗試使用過(guò)時(shí)的SQL模式會(huì)阻止MySQL 8.4啟動(dòng)。應(yīng)該修改使用過(guò)時(shí)SQL模式的應(yīng)用程序以避免使用它們。
1.6.1.7.視圖檢查
不能有顯式定義的列名超過(guò)64個(gè)字符的視圖(在MySQL 5.7中允許列名超過(guò)255個(gè)字符的視圖)。為避免升級(jí)錯(cuò)誤,應(yīng)在升級(jí)前更改此類視圖。目前,識(shí)別列名超過(guò)64個(gè)字符的視圖的唯一方法是使用 SHOW CREATE VIEW 檢查視圖定義。您還可以通過(guò)查詢InformationSchema VIEWS 表來(lái)檢查視圖定義。
1.6.1.8.ENUM 或 SET 列元素長(zhǎng)度檢查
表或存儲(chǔ)過(guò)程中的單個(gè) ENUM 或 SET 列元素的長(zhǎng)度不得超過(guò)255個(gè)字符或1020個(gè)字節(jié)。在MySQL 8.4之前, ENUM 或 SET 列元素的最大組合長(zhǎng)度為64K。在MySQL 8.4中,單個(gè) ENUM 或 SET 列元素的最大字符長(zhǎng)度為255個(gè)字符,最大字節(jié)長(zhǎng)度為1020個(gè)字節(jié)。(The 1020字節(jié)限制支持多字節(jié)字符集)。在升級(jí)到MySQL 8.0之前,請(qǐng)修改任何超過(guò)新限制的 ENUM 或 SET 列元素。否則將導(dǎo)致升級(jí)失敗并出現(xiàn)錯(cuò)誤。
1.6.1.9.lower_case_table_names 參數(shù)設(shè)置
如果您打算在升級(jí)時(shí)將 lower_case_table_names 設(shè)置更改為1,請(qǐng)確保在升級(jí)之前將架構(gòu)和表名重新命名。否則,可能會(huì)由于架構(gòu)或表名大小寫不匹配而導(dǎo)致失敗。您可以使用以下查詢來(lái)檢查是否有包含Unicode字符的架構(gòu)和表名:
mysql> select TABLE_NAME, if(sha(TABLE_NAME) !=sha(lower(TABLE_NAME)),'Yes','No') as UpperCase from information_schema.tables;
注意:
如果升級(jí)到MySQL 8.4由于上述任何問(wèn)題而失敗,服務(wù)器會(huì)將所有更改恢復(fù)到數(shù)據(jù)目錄。在這種情況下,刪除所有重做日志文件,并在現(xiàn)有數(shù)據(jù)目錄上重新啟動(dòng)MySQL 8.3服務(wù)器以解決錯(cuò)誤。重做日志文件( ib_logfile* )默認(rèn)位于MySQL數(shù)據(jù)目錄中。修復(fù)錯(cuò)誤后,在再次嘗試升級(jí)之前執(zhí)行緩慢關(guān)機(jī)(通過(guò)設(shè)置 innodb_fast_shutdown=0 )。
1.7.備份數(shù)據(jù)庫(kù)
為了更快的回退,文檔采用目錄備份的方式。
1.7.1邏輯備份
--多個(gè)數(shù)據(jù)庫(kù)備份成1個(gè)文件 mysqldump -uroot -p --databases xiaomiaoao pijiake > /root/all-databases2213.sql --備份test數(shù)據(jù)庫(kù) mysqldump -uroot -p test > /data/mysqldb/tmp/test_exp_$(date +%F).sql
1.7.2.目錄備份
如果升級(jí)失敗能更快的回退
--查看進(jìn)程 確定使用的配置文件 安裝目錄 [root@localhost ~]# ps -ef | grep mysql mysql 2232 1 0 13:10 ? 00:00:30 /mysqldb/mysql8/bin/mysqld --defaults-file=/mysqldb/my8.cnf --確定安裝目錄和數(shù)據(jù)目錄 [root@localhost ~]# cat /mysqldb/my8.cnf | grep dir basedir=/mysqldb/mysql8 #mysql安裝根目錄 datadir=/mysqldb/data8 #mysql數(shù)據(jù)文件所在目錄 --停止數(shù)據(jù)庫(kù) systemctl stop mysqld 或 mysql -uroot -p shutdown; 或 mysqladmin -u root -p shutdown [root@localhost ~]# ps -ef | grep mysql 無(wú)輸出 --安裝目錄備份 cp -r /mysqldb/mysql8 /mysqldb/mysql8_bak_`date +%F` --數(shù)據(jù)目錄備份 cp -r /mysqldb/data8 /mysqldb/data8_bak_`date +%F` --配置文件備份 cp /mysqldb/my8.cnf /mysqldb/my8.cnf_bak_`date +%F`
1.8.下載并安裝新版本MySQL軟件
#1.安裝介質(zhì)上傳至/opt/下 #2.創(chuàng)建目錄 mkdir -p /data/mysqldb840 #3.解壓安裝包 cd /opt tar -xvf mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz -C /data/mysqldb840 #4.文件夾重命名為mysql8 mv /data/mysqldb840/mysql* /data/mysqldb840/mysql840 #5.更改文件夾所屬 chown -R mysql.mysql /data/mysqldb840/mysql840
1.9.更改配置文件
從MySQL 8.4.0開始,默認(rèn)情況下不再啟用已棄用的 mysql_native_password 身份驗(yàn)證插件。要啟用它,請(qǐng)使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)啟動(dòng)服務(wù)器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。
需注釋掉配置文件中default_authentication_plugin參數(shù),替換為mysql_native_password=ON。
更改/etc/my.conf配置
vi /mysqldb/my8.cnf #認(rèn)證策略解決登錄ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded# #default_authentication_plugin = mysql_native_password #add by MySQL8.4.0 mysql_native_password=ON
mysql從5.7平滑升級(jí)到8.0.27_linux mysql 5.7.6 平滑升級(jí)-CSDN博客
二.開始升級(jí)
2.1.關(guān)閉數(shù)據(jù)庫(kù)
--1.進(jìn)入原5.7 mysql命令行 正確關(guān)閉數(shù)據(jù)庫(kù) 法1: mysqladmin -uroot -p shutdown [root@mysql]# mysql -uroot -p Enter password: #使用mysql shell 命令util.checkForServerUpgrade('root@127.0.0.1:3307', {"password":"XXXXX", "targetVersion":"8.0.26", "configPath":"/etc/my3307.cnf"}) 檢查升級(jí)到目標(biāo)版本8.0.26,確認(rèn)沒(méi)有error級(jí)別的問(wèn)題 Errors: 0 Warnings: 17 Notices: 0 #檢查沒(méi)有未提交的xa事務(wù) mysql> xa recover; Empty set (0.00 sec) # 確保數(shù)據(jù)都刷到硬盤上,更改成0 mysql> show variables like 'innodb_fast_shutdown'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | innodb_fast_shutdown | 1 | +----------------------+-------+ 1 row in set (0.00 sec) mysql> set global innodb_fast_shutdown=0; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'innodb_fast_shutdown'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | innodb_fast_shutdown | 0 | +----------------------+-------+ mysql> shutdown; Query OK, 0 rows affected (0.00 sec) mysql> exit #查看進(jìn)程和端口后,已無(wú)輸出記錄,確保已停止 [root@localhost mysqldb8]# ps -ef | grep mysql root 6330 6202 0 07:35 pts/0 00:00:00 mysql -uroot -p -P2213 test root 6466 6202 0 09:18 pts/0 00:00:00 mysql -uroot -p root 6522 6293 0 09:58 pts/1 00:00:00 mysql -uroot -p root 6603 6551 0 10:14 pts/3 00:00:00 grep --color=auto mysql [root@localhost mysqldb8]# ss -ntl | grep 2213
2.2.用mysql8.4.0客戶端直接啟動(dòng)數(shù)據(jù)庫(kù)
因目標(biāo)版本8.4.0,直接在現(xiàn)有數(shù)據(jù)目錄上啟動(dòng)新版本MySQL。
cd /data/mysqldb840/mysql840 bin/mysqld_safe --user=mysql --datadir=/mysqldb/data8 &
升級(jí)過(guò)程中日志內(nèi)容:
[root@localhost opt]# tail -300f /mysqldb/log8/mysqld_error.log ...... 2024-05-08T16:35:02.692061+08:00 0 [Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=536870912. Please use innodb_redo_log_capacity instead. 2024-05-08T16:35:02.695130+08:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2024-05-08T16:35:03.457545+08:00 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2024-05-08T16:35:03.477878+08:00 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80023' to '80300'. 2024-05-08T16:35:04.004278+08:00 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80023' to '80300' completed. 2024-05-08T16:35:05.563366+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80035' to '80400' started. 2024-05-08T16:35:09.055973+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80035' to '80400' completed. 2024-05-08T16:35:09.194856+08:00 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 2024-05-08T16:35:09.194920+08:00 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. 2024-05-08T16:35:09.221684+08:00 0 [System] [MY-010931] [Server] /data/mysqldb840/mysql840/bin/mysqld: ready for connections. Version: '8.4.0' socket: '/mysqldb/mysql.sock' port: 3306 MySQL Community Server - GPL. 2024-05-08T16:35:09.228009+08:00 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock .......
2.3..更改環(huán)境變量
因basedir由/mysqldb/mysql8 變成了/data/mysqldb840/mysql840,故相關(guān)環(huán)境變量修改如下
#更改環(huán)境變量 [root@localhost ~]# vi .bash_profile ... MYSQL_DATA=/data/mysqldb/data #mysql8.0棄用 #export PATH=$PATH://mysqldb/mysql8/bin #export MYSQL_HOME=/mysqldb/mysql8 #add for mysql8.4.0 export MYSQL_HOME=/data/mysqldb840/mysql840 export PATH=$PATH:/data/mysqldb840/mysql840/bin #生效環(huán)境變量 [root@localhost ~]# source .bash_profile #查看版本 [root@localhost ~]# mysql -V mysql Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL) 或 [root@localhost ~]# mysql -uroot -p root@localhost :(none) 10:40:24>select version(); +-----------+ | version() | +-----------+ | 8.4.0 | +-----------+ 1 row in set (0.00 sec) root@localhost :(none) 10:40:30>exit
2.4.更改配置文件
vi /mysqldb/my8.cnf basedir=/mysqldb/mysql8 #mysql安裝根目錄 替換為 basedir=/data/mysqldb840/mysql840 #mysql安裝根目錄 可用下面的批量替換 :%s#/mysqldb/mysql8#/data/mysqldb840/mysql840#g
2.5.配置系統(tǒng)服務(wù)
--配置mysql8系統(tǒng)服務(wù) cp /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service_bak_20240508 [root@localhost ~]# cat /usr/lib/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/data/mysqldb840/mysql840/bin/mysqld --defaults-file=/data/mysqldb/my.cnf LimitNOFILE=65536 LimitNPROC=65536
2.6.重新啟動(dòng)數(shù)據(jù)庫(kù)
--關(guān)閉數(shù)據(jù)庫(kù) mysql -uroot -p shutdown; --通過(guò)系統(tǒng)服務(wù)重啟數(shù)據(jù)庫(kù) systemctl start mysqld systemctl status mysqld
三.升級(jí)過(guò)程中所做內(nèi)容
安裝新版本的MySQL可能需要升級(jí)現(xiàn)有安裝的以下部分:
- mysql 系統(tǒng)架構(gòu),其中包含存儲(chǔ)MySQL服務(wù)器運(yùn)行時(shí)所需信息的表。mysql 模式表分為兩大類:
(1).數(shù)據(jù)字典表,用于存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象元數(shù)據(jù)。
(2).系統(tǒng)表(即剩余的非數(shù)據(jù)字典表),用于其他操作目的。
- 其他架構(gòu),其中一些是內(nèi)置的,可以被認(rèn)為是由服務(wù)器“擁有”的,而其他則不是:
(1).performance_schema 、 INFORMATION_SCHEMA 、 ndbinfo 和 sys 架構(gòu)。
(2).User schemas. 用戶架構(gòu)
到此這篇關(guān)于MySQL8.0就地升級(jí)到MySQL8.4.0的方法的文章就介紹到這了,更多相關(guān)MySQL8.0升級(jí)到8.4.0內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql從5.7平滑升級(jí)到8.0.27的實(shí)現(xiàn)
- MySQL 8.0.26版本升級(jí)32版本查詢數(shù)據(jù)為空的解決方案
- MySQL本地版本升級(jí)超詳細(xì)教程(從5.5.20升到8.0.21)
- MySQL5.7升級(jí)MySQL8.0的完整卸載與安裝及連接Navicat的步驟
- MySQL如何從5.5升級(jí)到8.0(使用命令行升級(jí))
- MySQL和MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題
- 升級(jí)到mysql-connector-java8.0.27的注意事項(xiàng)
- MySQL8.0升級(jí)的踩坑歷險(xiǎn)記
- Docker版的MySQL5.7升級(jí)到MySQL8.0.13,數(shù)據(jù)遷移
- win2008下mysql8.0.11升級(jí)mysql8.0.17版本詳細(xì)步驟
相關(guān)文章
Centos中徹底刪除Mysql(rpm、yum安裝的情況)
這篇文章主要介紹了Centos中徹底刪除Mysql(rpm、yum安裝的情況),本文直接給出操作代碼,需要的朋友可以參考下2015-02-02詳解MySQL插入和查詢數(shù)據(jù)的相關(guān)命令及語(yǔ)句使用
這篇文章主要介紹了MySQL插入和查詢數(shù)據(jù)的相關(guān)命令及語(yǔ)句使用,包括相關(guān)的PHP腳本操作方法講解也很詳細(xì),需要的朋友可以參考下2015-11-11mysql通過(guò)INSERT IGNORE INTO插入拼音字符無(wú)效問(wèn)題及解決
這篇文章主要介紹了mysql通過(guò)INSERT IGNORE INTO插入拼音字符無(wú)效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MySql用DATE_FORMAT截取DateTime字段的日期值
MySql截取DateTime字段的日期值可以使用DATE_FORMAT來(lái)格式化,使用方法如下2014-08-08如何使用mysqladmin獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS
這篇文章主要介紹了如何使用mysqladmin這個(gè)工具來(lái)獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS,幫助大家更好的管理數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-11-11