MySQL8.0就地升級到MySQL8.4.0的方法
MySQL8.0就地升級到MySQL8.4.0
升級需求:將8.0.35升級到8.4.0,以In-Place方式直接升級到MySQL8.4.0。
數(shù)據(jù)庫版本 | 操作系統(tǒng)版本 | |
原版本 | 8.0.35 | Centos7.9 x86_64 |
新版本 | 8.4.0 | Centos7.9 x86_64 |
關(guān)閉現(xiàn)有版本MySQL,將二進制或包替換成新版本并在現(xiàn)有數(shù)據(jù)目錄上啟動MySQL并執(zhí)行升級任務(wù)的方式,稱為in-place升級。升級過程分為以下幾步:
- 完成升級前檢查,并處理不合規(guī)問題。
- 如果使用了XA事務(wù),升級前通過命令xa recover未提交XA事務(wù),并使用xa commit或xa rollback命令提交或回滾。
- 將innodb_fast_shutdown改為0或1。
- 關(guān)閉現(xiàn)版本MySQL。
- 升級MySQL二進制文件或軟件包。
- 在現(xiàn)有數(shù)據(jù)目錄上啟動新版本MySQL。
MySQL8.4.0特性說明
以下整理了常用的功能變化,詳細內(nèi)容查閱官方文檔,官方文檔位置:MySQL :: MySQL 8.4 Reference Manual :: 1.4 What Is New in MySQL 8.4 since MySQL 8.0
新增功能
MySQL本地密碼驗證更改
從MySQL 8.4.0開始,默認情況下不再啟用已棄用的 mysql_native_password 身份驗證插件。要啟用它,請使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)啟動服務(wù)器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。
InnoDB系統(tǒng)變量默認值更改
InnoDB系統(tǒng)變量默認值更改。在MySQL 8.4.0中,與 InnoDB 存儲引擎相關(guān)的多個服務(wù)器系統(tǒng)變量的默認值發(fā)生了更改,如下表所示:
InnoDB System Variable NameInnoDB系統(tǒng)變量名 | New Default Value (MySQL 8.4)新默認值(MySQL 8.4) | Previous Default Value (MySQL 8.0)默認值(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 |
克隆插件
克隆插件??寺〔寮姹究刂埔蟊环艑?,允許在同一系列的不同版本之間進行克隆。換句話說,只有主版本號和次版本號必須匹配,而以前點版本號也必須匹配
例如,克隆功能現(xiàn)在允許將8.4.0克隆到8.4.14,反之亦然。
MySQL復(fù)制
SOURCE_RETRY_COUNT變化
MySQL復(fù)制:SOURCE_RETRY_COUNT更改。 CHANGE REPLICATION SOURCE TO 語句的 SOURCE_RETRY_COUNT 選項的默認值已更改為10。這意味著,如果使用此選項和 SOURCE_CONNECT_RETRY 的默認值(60),復(fù)制副本將在兩次重新連接嘗試之間等待60秒,并在超時和故障切換之前以此速率繼續(xù)嘗試重新連接10分鐘。
此更改也適用于已棄用的 --master-retry-count 服務(wù)器選項的默認值。(You應(yīng)該使用 SOURCE_RETRY_COUNT 代替。)
標記的GTID
MySQL復(fù)制:標記的GTID。MySQL復(fù)制和組復(fù)制中使用的全局事務(wù)標識符(GID)的格式已經(jīng)擴展,可以識別事務(wù)組,從而可以為屬于特定事務(wù)組的GTID分配唯一的名稱。例如,包含數(shù)據(jù)操作的事務(wù)可以通過比較它們的GTID容易地與由管理操作產(chǎn)生的事務(wù)區(qū)分開。
新的GTID格式是 UUID:TAG:NUMBER ,其中 TAG 是最多8個字符的字符串,通過將 gtid_next 系統(tǒng)變量的值設(shè)置為 AUTOMATIC:TAG (在此版本中添加)來啟用(有關(guān)標記格式和其他信息,請參見變量的描述)。此標記對于當前會話中發(fā)起的所有事務(wù)都保持不變(除非使用 SET gtid_next 進行了更改),并在此類事務(wù)的提交時應(yīng)用,或者在使用組復(fù)制時在認證時應(yīng)用。也可以將 gtid_next 設(shè)置為 UUID:TAG:NUMBER ,以將單個事務(wù)的UUID設(shè)置為任意值,同時沿著為其分配自定義標記。 UUID 和 NUMBER 的分配與以前的MySQL版本相比沒有變化。在任何一種情況下,用戶都有責(zé)任確保標記對于給定的復(fù)制拓撲是唯一的。
將 gtid_next 設(shè)置為 AUTOMATIC:TAG 或 UUID:TAG:NUMBER 需要一個新的 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)的用戶才能提交具有分配的標記的新事務(wù)。
從MySQL的早期版本升級到MySQL 8.4時,任何已經(jīng)擁有 BINLOG_ADMIN 權(quán)限的用戶帳戶或角色都會自動獲得 TRANSACTION_GTID_TAG 權(quán)限。
棄用的功能
expire_logs_days
expire_logs_days系統(tǒng)變量。MySQL 8.0中不推薦使用的 expire_logs_days server系統(tǒng)變量已被刪除。嘗試在運行時獲取或設(shè)置此變量,或使用等效選項( --expire-logs-days )啟動mysqld,現(xiàn)在會導(dǎo)致錯誤。
使用 binlog_expire_logs_seconds 來代替 expire_logs_days ,它允許您指定(僅)整數(shù)天以外的到期期限。
刪除的功能
Replication SQL syntax
復(fù)制SQL語法。MySQL復(fù)制中使用的一些SQL語句在MySQL的早期版本中被棄用,在MySQL 8.4中不再支持?,F(xiàn)在,嘗試使用這些語句中的任何一個都會產(chǎn)生語法錯誤。這些語句可以分為兩組:與源服務(wù)器相關(guān)的語句和與副本相關(guān)的語句,如下所示:
作為這項工作的一部分, CREATE EVENT 和 ALTER EVENT 的 DISABLE ON SLAVE 選項現(xiàn)在已被棄用,并被 DISABLE ON REPLICA 取代。相應(yīng)的術(shù)語 SLAVESIDE_DISABLED 現(xiàn)在也被棄用,并且不再用于事件描述中,例如在信息架構(gòu) EVENTS 表中;現(xiàn)在顯示的是 REPLICA_SIDE_DISABLED 。
下面列出了已刪除的與復(fù)制源服務(wù)器相關(guān)的語句:
- 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語句:
- 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 中刪除的選項: - 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 語句中刪除的選項:
- MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
- MASTER_LOG_POS: Use SOURCE_LOG_POS.
mysql_upgrade
mysql_upgrade實用程序,在MySQL 8.0.16中被棄用,已被刪除。
mysqlpump
mysqlpump實用程序。mysqlpump實用程序沿著及其輔助實用程序lz4_blog和zlib_blog,在MySQL 8.0.34中已被刪除。相反,使用mysqldump或MySQL Shell的轉(zhuǎn)儲實用程序。
一.升級前準備
1.1.查看支持的平臺
MySQL8.4.0已不支持Linux7以下的操作系統(tǒng)。支持的平臺可查看官方文檔,官方文檔位置:
https://www.mysql.com/support/supportedplatforms/database.html
1.2.停止業(yè)務(wù)
確保業(yè)務(wù)已停止,保證數(shù)據(jù)一致性
--查詢數(shù)據(jù)庫中哪些線程正在執(zhí)行 show processlist;
1.3.查看源數(shù)據(jù)庫信息
#查版本 mysql -V 或 mysql> select version(); +------------+ | version() | +------------+ | 8.0.35 | +------------+ 1 row in set (0.00 sec)
場景1:查詢所有數(shù)據(jù)庫的總大小
--查詢所有數(shù)據(jù)庫的總大小 use information_schema; select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES; --統(tǒng)計一下所有庫數(shù)據(jù)量 SELECT SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb FROM information_schema.TABLES; --統(tǒng)計每個庫大小 SELECT table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb FROM information_schema.TABLES group by table_schema;
場景2:查看指定數(shù)據(jù)庫的大小
use information_schema; select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='pijiake';
場景3:記錄數(shù)
--查看所有數(shù)據(jù)庫各容量大小 select table_schema as '數(shù)據(jù)庫', 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ù)庫各表容量大小 select table_schema as '數(shù)據(jù)庫', 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ù)庫容量大小(例:查看mysql庫容量大小) select table_schema as '數(shù)據(jù)庫', 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ù)庫各表容量大小(例:查看mysql庫各表容量大小) select table_schema as '數(shù)據(jù)庫', 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 一起使用,請在升級之前運行 XA RECOVER 以檢查未提交的XA事務(wù)。如果返回結(jié)果,則通過發(fā)出 XA COMMIT 或 XA ROLLBACK 語句提交或回滾XA事務(wù)。
#檢查沒有未提交的xa事務(wù) mysql> xa recover; Empty set (0.00 sec)
1.5.確保數(shù)據(jù)都刷到硬盤上
如果您正常運行MySQL服務(wù)器,并將 innodb_fast_shutdown 設(shè)置為 2 (冷關(guān)閉),請通過執(zhí)行以下語句之一來配置它以執(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 | +----------------------+-------+
補充說明:
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
1.6.升級前的初步檢查
mysqlcheck -u root -p --all-databases --check-upgrade
1.6.1.初步檢查的內(nèi)容有
1.6.1.1.不得存在以下問題
- 不能有使用過時數(shù)據(jù)類型或函數(shù)的表。
- 不能有孤立的 .frm 文件。
- 觸發(fā)器不能有缺失的或空的定義符或無效的創(chuàng)建上下文
1.6.1.2.不能不具有本機分區(qū)支持存儲引擎的分區(qū)表
不能有使用不具有本機分區(qū)支持的存儲引擎的分區(qū)表。要識別此類表,請執(zhí)行以下查詢:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';
查詢報告的任何表都必須更改為使用 InnoDB 或不分區(qū)。要將表存儲引擎更改為 InnoDB ,請執(zhí)行以下語句:
ALTER TABLE table_name ENGINE = INNODB;
要使已分區(qū)表成為非分區(qū)表,請執(zhí)行以下語句:
ALTER TABLE table_name REMOVE PARTITIONING;
1.6.1.3.關(guān)鍵字
MySQL 8.4中可能保留了一些以前沒有保留的關(guān)鍵字。參見第11.3節(jié)“關(guān)鍵字和保留字”。這可能會導(dǎo)致以前用作標識符的單詞變?yōu)榉欠?。若要修?fù)受影響的語句,請使用標識符引號。
1.6.1.4.數(shù)據(jù)字典使用的表同名的表檢查
MySQL系統(tǒng)數(shù)據(jù)庫中不能有與MySQL 8.4數(shù)據(jù)字典使用的表同名的表。要標識具有這些名稱的表,請執(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' );
必須刪除或重命名查詢報告的任何表(使用 RENAME TABLE )。這還可能需要對使用受影響表的應(yīng)用程序進行更改。
1.6.1.5.外鍵約束名稱檢查
不能有外鍵約束名稱超過64個字符的表。使用此查詢可標識約束名稱過長的表:
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);
對于約束名稱超過64個字符的表,請刪除該約束,然后使用不超過64個字符的約束名稱將其添加回來(使用 ALTER TABLE )。
1.6.1.6.sql_mode檢查
必須沒有由 sql_mode 系統(tǒng)變量定義的過時SQL模式。嘗試使用過時的SQL模式會阻止MySQL 8.4啟動。應(yīng)該修改使用過時SQL模式的應(yīng)用程序以避免使用它們。
1.6.1.7.視圖檢查
不能有顯式定義的列名超過64個字符的視圖(在MySQL 5.7中允許列名超過255個字符的視圖)。為避免升級錯誤,應(yīng)在升級前更改此類視圖。目前,識別列名超過64個字符的視圖的唯一方法是使用 SHOW CREATE VIEW 檢查視圖定義。您還可以通過查詢InformationSchema VIEWS 表來檢查視圖定義。
1.6.1.8.ENUM 或 SET 列元素長度檢查
表或存儲過程中的單個 ENUM 或 SET 列元素的長度不得超過255個字符或1020個字節(jié)。在MySQL 8.4之前, ENUM 或 SET 列元素的最大組合長度為64K。在MySQL 8.4中,單個 ENUM 或 SET 列元素的最大字符長度為255個字符,最大字節(jié)長度為1020個字節(jié)。(The 1020字節(jié)限制支持多字節(jié)字符集)。在升級到MySQL 8.0之前,請修改任何超過新限制的 ENUM 或 SET 列元素。否則將導(dǎo)致升級失敗并出現(xiàn)錯誤。
1.6.1.9.lower_case_table_names 參數(shù)設(shè)置
如果您打算在升級時將 lower_case_table_names 設(shè)置更改為1,請確保在升級之前將架構(gòu)和表名重新命名。否則,可能會由于架構(gòu)或表名大小寫不匹配而導(dǎo)致失敗。您可以使用以下查詢來檢查是否有包含Unicode字符的架構(gòu)和表名:
mysql> select TABLE_NAME, if(sha(TABLE_NAME) !=sha(lower(TABLE_NAME)),'Yes','No') as UpperCase from information_schema.tables;
注意:
如果升級到MySQL 8.4由于上述任何問題而失敗,服務(wù)器會將所有更改恢復(fù)到數(shù)據(jù)目錄。在這種情況下,刪除所有重做日志文件,并在現(xiàn)有數(shù)據(jù)目錄上重新啟動MySQL 8.3服務(wù)器以解決錯誤。重做日志文件( ib_logfile* )默認位于MySQL數(shù)據(jù)目錄中。修復(fù)錯誤后,在再次嘗試升級之前執(zhí)行緩慢關(guān)機(通過設(shè)置 innodb_fast_shutdown=0 )。
1.7.備份數(shù)據(jù)庫
為了更快的回退,文檔采用目錄備份的方式。
1.7.1邏輯備份
--多個數(shù)據(jù)庫備份成1個文件 mysqldump -uroot -p --databases xiaomiaoao pijiake > /root/all-databases2213.sql --備份test數(shù)據(jù)庫 mysqldump -uroot -p test > /data/mysqldb/tmp/test_exp_$(date +%F).sql
1.7.2.目錄備份
如果升級失敗能更快的回退
--查看進程 確定使用的配置文件 安裝目錄 [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ù)庫 systemctl stop mysqld 或 mysql -uroot -p shutdown; 或 mysqladmin -u root -p shutdown [root@localhost ~]# ps -ef | grep mysql 無輸出 --安裝目錄備份 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開始,默認情況下不再啟用已棄用的 mysql_native_password 身份驗證插件。要啟用它,請使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)啟動服務(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 #認證策略解決登錄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平滑升級到8.0.27_linux mysql 5.7.6 平滑升級-CSDN博客
二.開始升級
2.1.關(guān)閉數(shù)據(jù)庫
--1.進入原5.7 mysql命令行 正確關(guān)閉數(shù)據(jù)庫 法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"}) 檢查升級到目標版本8.0.26,確認沒有error級別的問題 Errors: 0 Warnings: 17 Notices: 0 #檢查沒有未提交的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 #查看進程和端口后,已無輸出記錄,確保已停止 [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客戶端直接啟動數(shù)據(jù)庫
因目標版本8.4.0,直接在現(xiàn)有數(shù)據(jù)目錄上啟動新版本MySQL。
cd /data/mysqldb840/mysql840 bin/mysqld_safe --user=mysql --datadir=/mysqldb/data8 &
升級過程中日志內(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.重新啟動數(shù)據(jù)庫
--關(guān)閉數(shù)據(jù)庫 mysql -uroot -p shutdown; --通過系統(tǒng)服務(wù)重啟數(shù)據(jù)庫 systemctl start mysqld systemctl status mysqld
三.升級過程中所做內(nèi)容
安裝新版本的MySQL可能需要升級現(xiàn)有安裝的以下部分:
- mysql 系統(tǒng)架構(gòu),其中包含存儲MySQL服務(wù)器運行時所需信息的表。mysql 模式表分為兩大類:
(1).數(shù)據(jù)字典表,用于存儲數(shù)據(jù)庫對象元數(shù)據(jù)。
(2).系統(tǒng)表(即剩余的非數(shù)據(jù)字典表),用于其他操作目的。
- 其他架構(gòu),其中一些是內(nèi)置的,可以被認為是由服務(wù)器“擁有”的,而其他則不是:
(1).performance_schema 、 INFORMATION_SCHEMA 、 ndbinfo 和 sys 架構(gòu)。
(2).User schemas. 用戶架構(gòu)
到此這篇關(guān)于MySQL8.0就地升級到MySQL8.4.0的方法的文章就介紹到這了,更多相關(guān)MySQL8.0升級到8.4.0內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql從5.7平滑升級到8.0.27的實現(xiàn)
- MySQL 8.0.26版本升級32版本查詢數(shù)據(jù)為空的解決方案
- MySQL本地版本升級超詳細教程(從5.5.20升到8.0.21)
- MySQL5.7升級MySQL8.0的完整卸載與安裝及連接Navicat的步驟
- MySQL如何從5.5升級到8.0(使用命令行升級)
- MySQL和MySQL驅(qū)動mysql-connector-java升級到8.0.X版本問題
- 升級到mysql-connector-java8.0.27的注意事項
- MySQL8.0升級的踩坑歷險記
- Docker版的MySQL5.7升級到MySQL8.0.13,數(shù)據(jù)遷移
- win2008下mysql8.0.11升級mysql8.0.17版本詳細步驟
相關(guān)文章
Centos中徹底刪除Mysql(rpm、yum安裝的情況)
這篇文章主要介紹了Centos中徹底刪除Mysql(rpm、yum安裝的情況),本文直接給出操作代碼,需要的朋友可以參考下2015-02-02詳解MySQL插入和查詢數(shù)據(jù)的相關(guān)命令及語句使用
這篇文章主要介紹了MySQL插入和查詢數(shù)據(jù)的相關(guān)命令及語句使用,包括相關(guān)的PHP腳本操作方法講解也很詳細,需要的朋友可以參考下2015-11-11mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決
這篇文章主要介紹了mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08MySql用DATE_FORMAT截取DateTime字段的日期值
MySql截取DateTime字段的日期值可以使用DATE_FORMAT來格式化,使用方法如下2014-08-08如何使用mysqladmin獲取一個mysql實例當前的TPS和QPS
這篇文章主要介紹了如何使用mysqladmin這個工具來獲取一個mysql實例當前的TPS和QPS,幫助大家更好的管理數(shù)據(jù)庫,感興趣的朋友可以了解下2020-11-11