-- Copyright (C) 2003, 2013 Oracle and/or its affiliates. -- Copyright (C) 2010, 2023, MariaDB Corporation -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; version 2 of the License. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
# This part converts any old privilege tables to privilege tables suitable
# for current version of MariaDB
# You can safely ignoreall'Duplicate column'and'Unknown column' errors
# because these just mean that your tables are already up to date.
# This script is safe to run even if your tables are already up to date!
# Warning message(s) produced for a statement can be printed by explicitly
# adding a 'SHOW WARNINGS' after the statement.
set sql_mode=''; set sql_safe_updates='OFF'; set default_storage_engine=Aria; set enforce_storage_engine=NULL; set alter_algorithm='DEFAULT'; set use_stat_tables='NEVER'; set path 'CURRENT_SCHEMA';
-- -- Upgrade mysql.column_stats table early because its quite noisy otherwise --
set @have_innodb= (select count(engine) from information_schema.engines where engine='INNODB'and support != 'NO');
# MDEV-21873: 10.2to10.3upgrade doesn't remove semi-sync reference from
# mysql.plugin table.
# As per suggested fix, check INFORMATION_SCHEMA.PLUGINS
# andif semisync plugins aren't there, delete them from mysql.plugin. DELETEFROM mysql.plugin WHERE name="rpl_semi_sync_master"ANDNOTEXISTS (SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME="rpl_semi_sync_master"); DELETEFROM mysql.plugin WHERE name="rpl_semi_sync_slave"ANDNOTEXISTS (SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME="rpl_semi_sync_slave");
-- -- Ensure that all tables are of type Aria and transactional --
# Fix privileges for old tables UPDATE user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0; UPDATE db SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
#
# The second alter changes ssl_type to new 4.0.2 format
# Adding columns needed byGRANT .. REQUIRE (openssl)
#
# columns_priv
#
#
# Name change of Type -> Column_priv from MySQL 3.22.12
# ALTERTABLE columns_priv CHANGE Type Column_priv set('Select','Insert','Update','References') COLLATE utf8mb3_general_ci DEFAULT''NOTNULL;
ALTERTABLE func add type enum ('function','aggregate') COLLATE utf8mb3_general_ci NOTNULL;
#
# Change the user,db and host tables to current format
#
# Detect whether we had Show_db_priv SET @hadShowDbPriv:=0; SELECT @hadShowDbPriv:=1FROM user WHERE Show_db_priv ISNOTNULL;
ALTERTABLE user ADD Show_db_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Alter_priv, ADD Super_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Show_db_priv, ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Super_priv, ADD Lock_tables_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_tmp_table_priv, ADD Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Lock_tables_priv, ADD Repl_slave_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Execute_priv, ADD Repl_client_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Repl_slave_priv;
# Convert privileges so that users have similar privileges asbefore
UPDATE user SET Show_db_priv= Select_priv, Super_priv=Process_priv, Execute_priv=Process_priv, Create_tmp_table_priv='Y', Lock_tables_priv='Y', Repl_slave_priv=file_priv, Repl_client_priv=File_priv where user<>""AND @hadShowDbPriv = 0;
# Add fields that can be used tolimit number of questions and connections
# for some users.
ALTERTABLE user ADD max_questions int(11) NOTNULLDEFAULT0 AFTER x509_subject, ADD max_updates int(11) unsignedNOTNULLDEFAULT0 AFTER max_questions, ADD max_connections int(11) unsignedNOTNULLDEFAULT0 AFTER max_updates;
#
# Add Create_tmp_table_priv and Lock_tables_priv to db and host
#
# In MySQL 5.7.6 the Password columnis removed. Recreate it to preserve the number
# of columns MariaDB expects in the user table. ALTERTABLE user ADD Password char(41) characterset latin1 collate latin1_bin NOTNULLdefault'' AFTER User;
# In MySQL the Unix socket authentication plugin has a different name. Thus the
# referencesto it need to be renamed in the user table. Thanks to the WHERE
# clauses this applies only to MySQL->MariaDB upgrades and nothing else. UPDATE user SET plugin='unix_socket'WHERE plugin='auth_socket'; DELETEFROM plugin WHERE name='auth_socket';
# Delete plugins that are now inbuilt but might not have been before (MDEV-32043) DELETE plugin FROM information_schema.PLUGINS is_p JOIN plugin ON plugin.name = is_p.PLUGIN_NAME WHERE is_p.PLUGIN_LIBRARY ISNULL;
SET @old_log_state = @@global.general_log; SET GLOBAL general_log = 'OFF'; ALTERTABLE general_log
MODIFY event_time TIMESTAMP(6) NOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
MODIFY user_host MEDIUMTEXTNOTNULL,
MODIFY server_id INTEGERUNSIGNEDNOTNULL,
MODIFY command_type VARCHAR(64) NOTNULL,
MODIFY argument MEDIUMTEXTNOTNULL,
MODIFY thread_id BIGINT(21) UNSIGNEDNOTNULL; SET GLOBAL general_log = @old_log_state;
SET @old_log_state = @@global.log_slow_query; SET GLOBAL log_slow_query = 'OFF'; ALTERTABLE slow_log ADDCOLUMN thread_id BIGINT(21) UNSIGNEDNOTNULL AFTER sql_text; ALTERTABLE slow_log ADDCOLUMN rows_affected BIGINTUNSIGNEDNOTNULL AFTER thread_id; ALTERTABLE slow_log
MODIFY start_time TIMESTAMP(6) NOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
MODIFY user_host MEDIUMTEXTNOTNULL,
MODIFY query_time TIME(6) NOTNULL,
MODIFY lock_time TIME(6) NOTNULL,
MODIFY rows_sent BIGINTUNSIGNEDNOTNULL,
MODIFY rows_examined BIGINTUNSIGNEDNOTNULL,
MODIFY db VARCHAR(512) NOTNULL,
MODIFY last_insert_id INTEGERNOTNULL,
MODIFY insert_id INTEGERNOTNULL,
MODIFY server_id INTEGERUNSIGNEDNOTNULL,
MODIFY sql_text MEDIUMTEXTNOTNULL,
MODIFY thread_id BIGINT(21) UNSIGNEDNOTNULL; SET GLOBAL log_slow_query = @old_log_state;
#
# Detect whether we had Create_view_priv
# SET @hadCreateViewPriv:=0; SELECT @hadCreateViewPriv:=1FROM user WHERE Create_view_priv ISNOTNULL;
#
# Create VIEWs privileges (v5.0)
# ALTERTABLE db ADD Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Lock_tables_priv; ALTERTABLE db MODIFY Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Lock_tables_priv;
ALTERTABLE user ADD Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Repl_client_priv; ALTERTABLE user MODIFY Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Repl_client_priv;
#
# Show VIEWs privileges (v5.0)
# ALTERTABLE db ADD Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_view_priv; ALTERTABLE db MODIFY Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_view_priv;
ALTERTABLE user ADD Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_view_priv; ALTERTABLE user MODIFY Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_view_priv;
#
# Assign create/show view privileges to people who have create provileges
# UPDATE user SET Create_view_priv=Create_priv, Show_view_priv=Create_priv where user<>""AND @hadCreateViewPriv = 0;
#
#
# SET @hadCreateRoutinePriv:=0; SELECT @hadCreateRoutinePriv:=1FROM user WHERE Create_routine_priv ISNOTNULL;
#
# Create PROCEDUREs privileges (v5.0)
# ALTERTABLE db ADD Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Show_view_priv; ALTERTABLE db MODIFY Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Show_view_priv;
ALTERTABLE user ADD Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Show_view_priv; ALTERTABLE user MODIFY Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Show_view_priv;
#
# Alter PROCEDUREs privileges (v5.0)
# ALTERTABLE db ADD Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_routine_priv; ALTERTABLE db MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_routine_priv;
ALTERTABLE user ADD Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_routine_priv; ALTERTABLE user MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_routine_priv;
ALTERTABLE db ADD Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Alter_routine_priv; ALTERTABLE db MODIFY Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Alter_routine_priv;
#
# Assign create/alter routine privileges to people who have create privileges
# UPDATE user SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv where user<>""AND @hadCreateRoutinePriv = 0; UPDATE db SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where user<>""AND @hadCreateRoutinePriv = 0;
#
# Add max_user_connections resource limit
# this is signed in MariaDB so that if one sets it's to -1 then the user
# can't connect anymore.
# ALTERTABLE user ADD max_user_connections int(11) DEFAULT'0'NOTNULL AFTER max_connections; ALTERTABLE user MODIFY max_user_connections int(11) DEFAULT'0'NOTNULL AFTER max_connections;
#
# user.Create_user_priv
#
SET @hadCreateUserPriv:=0; SELECT @hadCreateUserPriv:=1FROM user WHERE Create_user_priv ISNOTNULL;
ALTERTABLE user ADD Create_user_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Alter_routine_priv; ALTERTABLE user MODIFY Create_user_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Alter_routine_priv; UPDATE user LEFTJOIN db USING (Host,User) SET Create_user_priv='Y' WHERE @hadCreateUserPriv = 0AND
(user.Grant_priv = 'Y'OR db.Grant_priv = 'Y');
# Correct the charactersetand collation
# Reset some fields after the conversion ALTERTABLE proc CONVERTTOCHARACTERSET utf8mb3 COLLATE utf8mb3_general_ci,
MODIFY db char(64) binaryDEFAULT''NOTNULL,
MODIFY definer varchar(384) binaryDEFAULT''NOTNULL,
MODIFY comment text binaryNOTNULL;
SELECTCASEWHEN COUNT(*) > 0THEN
CONCAT ("WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (", @@character_set_client, "). Please verify if necessary.") ELSENULL
END AS value FROM proc WHERE character_set_client ISNULL;
UPDATE proc SET character_set_client = @@character_set_client WHERE character_set_client ISNULL;
SELECTCASEWHEN COUNT(*) > 0THEN
CONCAT ("WARNING: NULL values of the 'collation_connection' column ('mysql.proc' table) have been updated with a default value (", @@collation_connection, "). Please verify if necessary.") ELSENULL
END AS value FROM proc WHERE collation_connection ISNULL;
UPDATE proc SET collation_connection = @@collation_connection WHERE collation_connection ISNULL;
SELECTCASEWHEN COUNT(*) > 0THEN
CONCAT ("WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.") ELSENULL
END AS value FROM proc WHERE db_collation ISNULL;
UPDATE proc AS p SET db_collation =
( SELECT DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = p.db) WHERE db_collation ISNULL;
ALTERTABLE proc ADD path text COLLATE utf8mb3_bin DEFAULT'CURRENT_SCHEMA'NOTNULL
AFTER aggregate;
ALTERTABLE proc MODIFY path TEXT COLLATE utf8mb3_bin DEFAULT'CURRENT_SCHEMA'NOTNULL;
# Update definer of Add/DropGeometryColumn procedures to'mariadb.sys'
# To consider the scenarios in MDEV-23102, only update the definer when it's 'root' UPDATE proc SET Definer = 'mariadb.sys@localhost'WHERE Definer = 'root@localhost'AND Name = 'AddGeometryColumn'; UPDATE proc SET Definer = 'mariadb.sys@localhost'WHERE Definer = 'root@localhost'AND Name = 'DropGeometryColumn';
#
# EVENT privilege
# SET @hadEventPriv := 0; SELECT @hadEventPriv :=1FROM user WHERE Event_priv ISNOTNULL;
ALTERTABLE user ADD Event_priv enum('N','Y') characterset utf8mb3 COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_user_priv; ALTERTABLE user MODIFY Event_priv enum('N','Y') characterset utf8mb3 COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Create_user_priv;
UPDATE user SET Event_priv=Super_priv WHERE @hadEventPriv = 0;
ALTERTABLE db ADD Event_priv enum('N','Y') characterset utf8mb3 COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL; ALTERTABLE db MODIFY Event_priv enum('N','Y') characterset utf8mb3 COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL;
# Enable event scheduler if the event table was not up to date before. set global event_scheduler=original;
#
# TRIGGER privilege
#
SET @hadTriggerPriv := 0; SELECT @hadTriggerPriv :=1FROM user WHERE Trigger_priv ISNOTNULL;
ALTERTABLE user ADD Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Event_priv; ALTERTABLE user MODIFY Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Event_priv;
ALTERTABLE db ADD Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL; ALTERTABLE db MODIFY Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL;
UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
#
# user.Create_tablespace_priv
#
SET @hadCreateTablespacePriv := 0; SELECT @hadCreateTablespacePriv :=1FROM user WHERE Create_tablespace_priv ISNOTNULL;
ALTERTABLE user ADD Create_tablespace_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Trigger_priv; ALTERTABLE user MODIFY Create_tablespace_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER Trigger_priv;
UPDATE user SET Create_tablespace_priv = Super_priv WHERE @hadCreateTablespacePriv = 0;
#
# System versioning
#
ALTERTABLE user change Truncate_versioning_priv Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N'; ALTERTABLE db change Truncate_versioning_priv Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N';
SET @had_user_delete_history_priv := 0; SELECT @had_user_delete_history_priv :=1FROM user WHERE Delete_history_priv ISNOTNULL;
SET @had_show_create_routine := 0; SELECT @had_show_create_routine:=1FROM db WHERE Show_create_routine_priv ISNOTNULL;
ALTERTABLE user add Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N' after Create_tablespace_priv; ALTERTABLE user modify Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N'; ALTERTABLE db add Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N' after Trigger_priv; ALTERTABLE db modify Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N';
UPDATE user SET Delete_history_priv = Super_priv WHERE @had_user_delete_history_priv = 0;
ALTERTABLE db ADD Show_create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N' AFTER Delete_history_priv; ALTERTABLE db MODIFY Show_create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci NOTNULLDEFAULT'N';
UPDATE db SET Show_create_routine_priv='Y'WHERE @had_show_create_routine=0 AND Drop_priv='Y'AND Index_priv='Y'AND Alter_priv='Y' AND Event_priv='Y'AND Select_priv='Y'AND Insert_priv='Y' AND Update_priv='Y'AND Delete_priv='Y'AND Create_priv='Y' AND Execute_priv='Y'AND Trigger_priv='Y'AND Show_view_priv='Y' AND References_priv='Y'AND Lock_tables_priv='Y'AND Create_view_priv='Y' AND Alter_routine_priv='Y'AND Create_routine_priv='Y' AND Delete_history_priv='Y'AND Create_tmp_table_priv='Y';
ALTERTABLE user ADD plugin char(64) CHARACTERSET latin1 DEFAULT''NOTNULL AFTER max_user_connections, ADD authentication_string TEXT NOTNULL AFTER plugin; ALTERTABLE user CHANGE auth_string authentication_string TEXT NOTNULL;
ALTERTABLE user ADD password_expired ENUM('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER authentication_string; ALTERTABLE user ADD password_last_changed timestamp NOTNULLDEFAULTCURRENT_TIMESTAMP after password_expired; ALTERTABLE user ADD password_lifetime smallintunsignedDEFAULTNULL after password_last_changed; ALTERTABLE user ADD account_locked enum('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL after password_lifetime; ALTERTABLE user ADD is_role enum('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER account_locked; ALTERTABLE user ADD default_role char(128) binaryDEFAULT''NOTNULL AFTER is_role; ALTERTABLE user ADD max_statement_time decimal(12,6) DEFAULT0NOTNULL AFTER default_role;
-- Somewhere above, we ran ALTER TABLE user .... CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin. -- we want password_expired column to have collation utf8mb3_general_ci. -- Order columns correctly that were not ordered until MDEV-23201 (ff8ffef3e1915d7a9caa07d9461cd8d47c4baf98)
ALTERTABLE user MODIFY plugin char(64) CHARACTERSET latin1 DEFAULT''NOTNULL AFTER max_user_connections,
MODIFY authentication_string TEXT NOTNULL AFTER plugin,
MODIFY password_expired ENUM('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER authentication_string,
MODIFY is_role enum('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT'N'NOTNULL AFTER password_expired,
MODIFY default_role char(80) binaryDEFAULT''NOTNULL AFTER is_role,
MODIFY max_statement_time decimal(12,6) DEFAULT0NOTNULL AFTER default_role, -- MDEV-24122 formerly mysql5.7 users may have the following columns password_last_changed, -- password_lifetime and account_locked. Ensure they are beyond the end of the user columns -- used by MariaDB. MariaDB-10.4 will use these in the creation of mysql.global_priv. -- password_last_changed has a DEFAULT/ON UPDATE of CURRENT_TIMESTAMP to keep track of -- time until 10.4 added.
MODIFY IFEXISTS password_last_changed timestamp NOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP AFTER max_statement_time,
MODIFY IFEXISTS password_lifetime smallintunsignedDEFAULTNULL AFTER password_last_changed,
MODIFY IFEXISTS account_locked enum('N', 'Y') CHARACTERSET utf8mb3 DEFAULT'N'NOTNULL after password_lifetime;
-- Checking for any duplicate hostname and username combination are exists. -- If exits we will throw error.
DELIMITER //
BEGIN NOT ATOMIC SET @duplicate_hosts=(SELECT count(*) FROM mysql.user GROUPBY user, lower(host) HAVING count(*) > 1LIMIT1); IF @duplicate_hosts > 1THEN
SIGNAL SQLSTATE'45000'SET MESSAGE_TEXT = 'Multiple accounts exist for @user_name, @host_name that differ only in Host lettercase; remove all except one of them';
END IF;
END //
DELIMITER ; -- Get warnings (if any) SHOW WARNINGS;
# Converting the host name to lower casefor existing users UPDATE user SET host=LOWER( host ) WHERE LOWER( host ) <> host;
DELIMITER // if @have_innodb then
# fix bad data when upgrading from unfixed InnoDB (MDEV-13360) deletefrom innodb_index_stats where length(table_name) > 64; deletefrom innodb_table_stats where length(table_name) > 64;
# update table_name and timestamp fields in the innodb stat tables altertable innodb_index_stats modify last_update timestamp notnulldefaultcurrent_timestamponupdatecurrent_timestamp, modify table_name varchar(199); altertable innodb_table_stats modify last_update timestamp notnulldefaultcurrent_timestamponupdatecurrent_timestamp, modify table_name varchar(199);
altertable innodb_index_stats dropforeignkeyifexists innodb_index_stats_ibfk_1;
end if //
DELIMITER ;
# MDEV-4332 longer user names, extended by MDEV-24312to longer again. altertable user modify User char(128) binarynotnulldefault''; altertable db modify User char(128) binarynotnulldefault''; altertable tables_priv modify User char(128) binarynotnulldefault''; altertable columns_priv modify User char(128) binarynotnulldefault''; altertable procs_priv modify User char(128) binarynotnulldefault'', modify Host char(255) binaryDEFAULT''; altertable proc modify definer varchar(384) collate utf8mb3_bin notnulldefault''; altertable proxies_priv modify User char(128) COLLATE utf8mb3_bin notnulldefault'', modify Host char(255) binaryDEFAULT''; altertable proxies_priv modify Proxied_user char(128) COLLATE utf8mb3_bin notnulldefault''; altertable proxies_priv modify Grantor varchar(384) COLLATE utf8mb3_bin notnulldefault''; altertable servers modify Username char(128) notnulldefault''; altertable procs_priv modify Grantor varchar(384) COLLATE utf8mb3_bin notnulldefault''; altertable tables_priv modify Grantor varchar(384) COLLATE utf8mb3_bin notnulldefault'';
# MDEV-33726 longer names from MDEV-24312 extension altertableifexists global_priv modify Host char(255) binaryDEFAULT'', modify User char(128) binarynotnulldefault''; altertableifexists roles_mapping modify Host char(255) binarynotnullDEFAULT'', modify User char(128) binarynotnulldefault'';
# Activate the new, possible modified privilege tables
# This should not be needed, but gives us some extra testing that the above
# changes was correct
flush privileges;
-- -- Upgrade help tables --
ALTERTABLE help_category MODIFY url TEXT NOTNULL; ALTERTABLE help_topic MODIFY url TEXT NOTNULL;
IF1 = (SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' AND TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user' AND (DEFINER = 'root@localhost' OR (DEFINER = 'mariadb.sys@localhost' AND (VIEW_DEFINITION LIKE"%'N' AS `password_expired`%" OR CHARACTER_SET_CLIENT <> 'latin1' OR COLLATION_CONNECTION <> 'latin1_swedish_ci'
)
)
)
) THEN DROP VIEW IFEXISTS mysql.user;
END IF//
DELIMITER ;
# MDEV-22683 - upgrade Host and Owner of servers ALTERTABLE servers
MODIFY Host varchar(2048) NOTNULLDEFAULT'',
MODIFY Owner varchar(512) NOTNULLDEFAULT'';
# MDEV-34716 Fix mysql.servers socket max length too short ALTERTABLE servers
MODIFY Socket char(108) NOTNULLDEFAULT'';
# MDEV-34716 Allow arbitrary options inCREATE SERVER
# Check existence of the Options column SET @hadOptions:=0; SELECT @hadOptions:=1FROM servers WHERE options ISNOTNULL; ALTERTABLE servers ADD Options JSON NOTNULLDEFAULT'{}'CHECK(JSON_VALID(Options));
# Ensure the collation is utf8mb4_bin (defaultfor JSON) ALTERTABLE servers
MODIFY Options JSON NOTNULLDEFAULT'{}'CHECK(JSON_VALID(Options));
# If the Options column did not exist, convertto the Options UPDATE servers SET Options = JSON_INSERT(Options, '$.host', Host) WHERE Host <> ''AND @hadOptions = 0; UPDATE servers SET Options = JSON_INSERT(Options, '$.database', Db) WHERE Db <> ''AND @hadOptions = 0; UPDATE servers SET Options = JSON_INSERT(Options, '$.username', Username) WHERE Username <> ''AND @hadOptions = 0; UPDATE servers SET Options = JSON_INSERT(Options, '$.port', CAST(Port ASVARCHAR(5))) WHERE @hadOptions = 0; UPDATE servers SET Options = JSON_INSERT(Options, '$.socket', Socket) WHERE Socket <> ''AND @hadOptions = 0; UPDATE servers SET Options = JSON_INSERT(Options, '$.owner', Owner) WHERE Owner <> ''AND @hadOptions = 0;
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.23 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.