MySQL8 軟體公升級

2022-07-12 06:24:06 字數 4802 閱讀 1256

不支援跳過大版本的公升級。例如,不支援直接從mysql 5.6公升級到8.0

不支援非ga版本軟體公升級

更新其它模式中內建物件

更新資料字典

伺服器公升級

此步驟包括所有其他公升級任務。如果現有mysql安裝的伺服器版本低於新安裝的mysql版本的伺服器版本,則其他所有內容都必須公升級

從 mysql 8.0.16 開始,此步驟的職責的變更

mysql_upgrade 選項和mysqld 選項 類似等效命令

mysql_upgrade選項

mysqld 選項

--skip-sys-schema

--upgrade=none 或者 --upgrade=minimal

--upgrade-system-tables

--upgrade=none 或者 --upgrade=minimal

--force

--upgrade=force

檢查命令

$/bin/mysqlcheck -u root -p --all-databases --check-upgrade
select table_schema, table_name

from information_schema.tables

where engine not in ('innodb', 'ndbcluster')

and create_options like '%partitioned%';

查詢結果的任何表都必須更改為使用innodb或不分割槽。

要將表儲存引擎更改為innodb

alter table table_name engine = innodb;
要使分割槽表成為非分割槽表
alter table table_name remove partitioning;
myisam表轉換為的資訊innodb
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'

);

查詢結果中任何表都必須刪除或重新命名

查詢標識約束名稱太長的表

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個字元的約束名稱

-- 檢查檢視定義

select view_definition from information_schema.views;

通過查詢來標識共享表空間中的表分割槽information_schema
select distinct name, space, space_type from information_schema.innodb_sys_tables

where name like '%#p#%' and space_type not like 'single';

select distinct name, space, space_type from information_schema.innodb_tables

where name like '%#p#%' and space_type not like 'single';

使用以下命令將表分割槽從共享表空間移動到每個表檔案表空間
alter table table_name reorganize partition partition_name

into (partition_definition tablespace=innodb_file_per_table);

檢查包含大寫字元的架構和表名稱

select table_name from information_schema.tables where table_name != lower(table_name) and table_type = 'base table';

select schema_name from information_schema.schemata where schema_name != lower(schema_name);

不建議公升級中修改 lower_case_table_names 的設定

從mysql 8.0.19開始,如果lower_case_table_names=1,公升級過程會檢查表名和模式名,以確保所有字元均為小寫。如果發現表或架構名稱包含大寫字元,則公升級過程將失敗並顯示錯誤。

如果由於上述任何問題公升級到mysql 8.0失敗,則伺服器會將所有更改都還原到資料目錄。在這種情況下,請刪除所有重做日誌檔案,然後在現有資料目錄上重新啟動mysql 5.7伺服器以解決錯誤。重做日誌檔案(ib_logfile*)預設位於mysql資料目錄中。修復錯誤之後,請執行緩慢關機(通過設定innodb_fast_shutdown=0),然後再次嘗試公升級。

就地公升級方式

檢查未提交的xa事務

xa recover;
從mysql 5.7.11或更早版本公升級到mysql 8.0,並且有加密的innodb表空間

通過執行以下語句來旋轉金鑰環主金鑰

alter instance rotate innodb master key;
快速或慢速關閉服務

通過快速關閉或緩慢關閉,可以innodb將其撤消日誌和資料檔案保持在可以處理的狀態,以防兩個版本之間的檔案格式不同。

set global innodb_fast_shutdown = 1; -- fast shutdown

set global innodb_fast_shutdown = 0; -- slow shutdown

mysqladmin -uroot -p --innodb_fast_shutdown=0 shutdown
公升級mysql二進位制檔案或軟體包
# 1. 刪除軟連線

unlink mysql

# 2. 解壓二進位製包新版本軟體

tar -xf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz -c /usr/local

# 3. 建立軟鏈結

ln -s /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64 mysql

# 4. 修改軟體目錄使用者及使用者組

chow -r mysql:mysql /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64

使用現有資料目錄啟動mysql 8.0服務
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
如果存在加密的innodb表空間

使用 mysqld --early-plugin-load="myplug1=myplug1.so;myplug2=myplug2.so" 選項載入金鑰環外掛程式

mysql8問題 mysql8中的問題

only full group by 對於group by聚合操作,如果在 select 中的列,沒有在 group by 現,那麼這個sql是不合法的,因為列不在group by從句中。no auto value on zero 該值影響自增長列的插入。預設設定下,插入0或null代表生成下乙個自...

mysql8建立不了使用者 mysql8建立使用者

假如是mysql8版本的話,使用 grant all privileges to 使用者 localhost identified by 自定義密碼 會報錯,因為要先建立使用者再進行賦權,不能同時進行 建立使用者 create user 使用者名稱 localhost identified by 密...

mysql 8 命令 Mysql8常用命令

1 安裝 移除原來的mysql服務 mysqld remove mysql mysqld install 2 初始化 mysqld initialize 3 啟動 net start mysql 4 登陸 mysql u root p 5 修改密碼 mysqld shared memory skip...