1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

Merge 10.6 into 10.9

This commit is contained in:
Marko Mäkelä
2023-06-27 13:48:46 +03:00
61 changed files with 1718 additions and 1047 deletions

View File

@@ -22,7 +22,7 @@
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ #include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
#define VER "2.0" #define VER "2.1"
#ifdef HAVE_SYS_WAIT_H #ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h> #include <sys/wait.h>
@@ -38,7 +38,7 @@
static int phase = 0; static int phase = 0;
static int info_file= -1; static int info_file= -1;
static const int phases_total = 7; static const int phases_total = 8;
static char mysql_path[FN_REFLEN]; static char mysql_path[FN_REFLEN];
static char mysqlcheck_path[FN_REFLEN]; static char mysqlcheck_path[FN_REFLEN];
@@ -982,7 +982,7 @@ static my_bool is_mysql()
static int run_mysqlcheck_views(void) static int run_mysqlcheck_views(void)
{ {
const char *upgrade_views="--process-views=YES"; const char *upgrade_views="--process-views=UPGRADE";
if (upgrade_from_mysql) if (upgrade_from_mysql)
{ {
/* /*
@@ -1122,8 +1122,9 @@ static my_bool from_before_10_1()
} }
static void uninstall_plugins(void) static int uninstall_plugins(void)
{ {
verbose("Phase %d/%d: uninstalling plugins", ++phase, phases_total);
if (ds_plugin_data_types.length) if (ds_plugin_data_types.length)
{ {
char *plugins= ds_plugin_data_types.str; char *plugins= ds_plugin_data_types.str;
@@ -1140,7 +1141,10 @@ static void uninstall_plugins(void)
next= get_line(next); next= get_line(next);
} }
} }
return 0;
} }
/** /**
@brief Install plugins for missing data types @brief Install plugins for missing data types
@details Check for entries with "Unknown data type" in I_S.TABLES, @details Check for entries with "Unknown data type" in I_S.TABLES,
@@ -1189,6 +1193,8 @@ static int install_used_plugin_data_types(void)
dynstr_free(&ds_result); dynstr_free(&ds_result);
return 0; return 0;
} }
/* /*
Check for entries with "Unknown storage engine" in I_S.TABLES, Check for entries with "Unknown storage engine" in I_S.TABLES,
try to load plugins for these tables if available (MDEV-11942) try to load plugins for these tables if available (MDEV-11942)
@@ -1239,6 +1245,7 @@ static int install_used_engines(void)
return 0; return 0;
} }
static int check_slave_repositories(void) static int check_slave_repositories(void)
{ {
DYNAMIC_STRING ds_result; DYNAMIC_STRING ds_result;
@@ -1366,6 +1373,13 @@ static int run_sql_fix_privilege_tables(void)
} }
static int flush_privileges(void)
{
verbose("Phase %d/%d: Running 'FLUSH PRIVILEGES'", ++phase, phases_total);
return run_query("FLUSH PRIVILEGES", NULL, TRUE);
}
/** /**
Check if the server version matches with the server version mysql_upgrade Check if the server version matches with the server version mysql_upgrade
was compiled with. was compiled with.
@@ -1395,10 +1409,11 @@ static int check_version_match(void)
if (calc_server_version((char *) version_str) != MYSQL_VERSION_ID) if (calc_server_version((char *) version_str) != MYSQL_VERSION_ID)
{ {
fprintf(stderr, "Error: Server version (%s) does not match with the " fprintf(stderr, "Error: Server version (%s)\n"
"version of\nthe server (%s) with which this program was built/" "does not match the version of the server (%s)\n"
"distributed. You can\nuse --skip-version-check to skip this " "with which this program was built/distributed. You can\n"
"check.\n", version_str, MYSQL_SERVER_VERSION); "use --skip-version-check to skip this check.\n",
version_str, MYSQL_SERVER_VERSION);
return 1; return 1;
} }
return 0; return 0;
@@ -1486,18 +1501,14 @@ int main(int argc, char **argv)
if (run_mysqlcheck_upgrade(TRUE) || if (run_mysqlcheck_upgrade(TRUE) ||
install_used_engines() || install_used_engines() ||
install_used_plugin_data_types() || install_used_plugin_data_types() ||
run_mysqlcheck_views() ||
run_sql_fix_privilege_tables() || run_sql_fix_privilege_tables() ||
run_mysqlcheck_views() ||
run_mysqlcheck_fixnames() || run_mysqlcheck_fixnames() ||
run_mysqlcheck_upgrade(FALSE) || run_mysqlcheck_upgrade(FALSE) ||
check_slave_repositories()) check_slave_repositories() ||
uninstall_plugins() ||
flush_privileges())
die("Upgrade failed" ); die("Upgrade failed" );
uninstall_plugins();
verbose("Phase %d/%d: Running 'FLUSH PRIVILEGES'", ++phase, phases_total);
if (run_query("FLUSH PRIVILEGES", NULL, TRUE))
die("Upgrade failed" );
verbose("OK"); verbose("OK");
/* Finish writing indicating upgrade has been performed */ /* Finish writing indicating upgrade has been performed */

View File

@@ -63,8 +63,9 @@ const char *operation_name[]=
"???", "check", "repair", "analyze", "optimize", "fix names" "???", "check", "repair", "analyze", "optimize", "fix names"
}; };
typedef enum { DO_VIEWS_NO, DO_VIEWS_YES, DO_VIEWS_FROM_MYSQL } enum_do_views; typedef enum { DO_VIEWS_NO, DO_VIEWS_YES, DO_UPGRADE, DO_VIEWS_FROM_MYSQL } enum_do_views;
const char *do_views_opts[]= {"NO", "YES", "UPGRADE_FROM_MYSQL", NullS}; const char *do_views_opts[]= {"NO", "YES", "UPGRADE", "UPGRADE_FROM_MYSQL",
NullS};
TYPELIB do_views_typelib= { array_elements(do_views_opts) - 1, "", TYPELIB do_views_typelib= { array_elements(do_views_opts) - 1, "",
do_views_opts, NULL }; do_views_opts, NULL };
static ulong opt_do_views= DO_VIEWS_NO; static ulong opt_do_views= DO_VIEWS_NO;
@@ -213,8 +214,9 @@ static struct my_option my_long_options[] =
{"process-views", 0, {"process-views", 0,
"Perform the requested operation (check or repair) on views. " "Perform the requested operation (check or repair) on views. "
"One of: NO, YES (correct the checksum, if necessary, add the " "One of: NO, YES (correct the checksum, if necessary, add the "
"mariadb-version field), UPGRADE_FROM_MYSQL (same as YES and toggle " "mariadb-version field), UPGRADE (run from mariadb-upgrade), "
"the algorithm MERGE<->TEMPTABLE.", &opt_do_views, &opt_do_views, "UPGRADE_FROM_MYSQL (same as YES and toggle the algorithm "
"MERGE<->TEMPTABLE.", &opt_do_views, &opt_do_views,
&do_views_typelib, GET_ENUM, OPT_ARG, 0, 0, 0, 0, 0, 0}, &do_views_typelib, GET_ENUM, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"process-tables", 0, "Perform the requested operation on tables.", {"process-tables", 0, "Perform the requested operation on tables.",
&opt_do_tables, &opt_do_tables, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, &opt_do_tables, &opt_do_tables, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
@@ -923,7 +925,10 @@ static int handle_request_for_tables(char *tables, size_t length,
op= opt_write_binlog ? "REPAIR" : "REPAIR NO_WRITE_TO_BINLOG"; op= opt_write_binlog ? "REPAIR" : "REPAIR NO_WRITE_TO_BINLOG";
if (view) if (view)
{ {
if (opt_do_views == DO_VIEWS_FROM_MYSQL) end = strmov(end, " FROM MYSQL"); if (opt_do_views == DO_VIEWS_FROM_MYSQL)
end = strmov(end, " FROM MYSQL");
else if (opt_do_views == DO_UPGRADE)
end = strmov(end, " FOR UPGRADE");
} }
else else
{ {

View File

@@ -84,6 +84,24 @@ sanity_checks() {
# check for diskspace shortage # check for diskspace shortage
datadir=`mariadbd_get_param datadir` datadir=`mariadbd_get_param datadir`
# If datadir location is not changed int configuration
# then it's not printed with /usr/sbin/mariadbd --print-defaults
# then we use 'sane' default.
if [ -z "$datadir"]
then
datadir="/var/lib/mysql"
fi
# Check if there datadir location is available and
# fail if it's not
if [ ! -d "$datadir" ]
then
log_failure_msg "$0: ERROR: Can't locate MariaDB installation location $datadir"
echo "ERROR: Can't locate MariaDB installation location $datadir" | $ERR_LOGGER
exit 1
fi
# As preset blocksize of GNU df is 1024 then available bytes is $df_available_blocks * 1024 # As preset blocksize of GNU df is 1024 then available bytes is $df_available_blocks * 1024
# 4096 blocks is then lower than 4 MB # 4096 blocks is then lower than 4 MB
df_available_blocks="$(LC_ALL=C BLOCKSIZE='' df --output=avail "$datadir" | tail -n 1)" df_available_blocks="$(LC_ALL=C BLOCKSIZE='' df --output=avail "$datadir" | tail -n 1)"

View File

@@ -227,7 +227,7 @@ DROP TABLE mysql050614_xxx_croatian_ci;
# Checking mysql_upgrade # Checking mysql_upgrade
# #
# Running mysql_upgrade # Running mysql_upgrade
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -258,8 +258,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -361,9 +362,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -384,11 +384,12 @@ test.maria050313_ucs2_croatian_ci_def OK
test.maria050313_utf8_croatian_ci OK test.maria050313_utf8_croatian_ci OK
test.maria050533_xxx_croatian_ci OK test.maria050533_xxx_croatian_ci OK
test.maria100004_xxx_croatian_ci OK test.maria100004_xxx_croatian_ci OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# Running mysql_upgrade for the second time # Running mysql_upgrade for the second time
# This should report OK for all tables # This should report OK for all tables
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -419,8 +420,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -522,9 +524,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -539,7 +540,8 @@ test.maria050313_utf8_croatian_ci OK
test.maria050533_xxx_croatian_ci OK test.maria050533_xxx_croatian_ci OK
test.maria100004_xxx_croatian_ci OK test.maria100004_xxx_croatian_ci OK
test.mysql050614_xxx_croatian_ci OK test.mysql050614_xxx_croatian_ci OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def;
Table Create Table Table Create Table

View File

@@ -4205,30 +4205,6 @@ a b s1
3 3 t2:1;min_t3_b:3 3 3 t2:1;min_t3_b:3
drop table t1,t2,t3; drop table t1,t2,t3;
# #
# MDEV-31380: Assertion `s->table->opt_range_condition_rows <= s->found_records' failed
# (assertion in 10.6+, DBL_MAX costs in 10.5)
#
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a), KEY(b)) ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100;
SET
@tmp=@@optimizer_use_condition_selectivity,
optimizer_use_condition_selectivity = 1,
@tmp2=@@optimizer_trace,
optimizer_trace=1;
SELECT DISTINCT * FROM t1 WHERE a IN (1, 2);
a b
1 1
2 2
select
CAST(json_value(json_extract(trace, '$**.chosen_access_method.cost'), '$[0]')
as DOUBLE) < 1.0e100
from information_schema.optimizer_trace;
CAST(json_value(json_extract(trace, '$**.chosen_access_method.cost'), '$[0]')
as DOUBLE) < 1.0e100
1
set optimizer_use_condition_selectivity = @tmp, optimizer_trace=@tmp2;
drop table t1;
#
# End of 10.5 tests # End of 10.5 tests
# #
# #

View File

@@ -1860,30 +1860,6 @@ from t1;
drop table t1,t2,t3; drop table t1,t2,t3;
--echo #
--echo # MDEV-31380: Assertion `s->table->opt_range_condition_rows <= s->found_records' failed
--echo # (assertion in 10.6+, DBL_MAX costs in 10.5)
--echo #
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a), KEY(b)) ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100;
SET
@tmp=@@optimizer_use_condition_selectivity,
optimizer_use_condition_selectivity = 1,
@tmp2=@@optimizer_trace,
optimizer_trace=1;
SELECT DISTINCT * FROM t1 WHERE a IN (1, 2);
select
CAST(json_value(json_extract(trace, '$**.chosen_access_method.cost'), '$[0]')
as DOUBLE) < 1.0e100
from information_schema.optimizer_trace;
set optimizer_use_condition_selectivity = @tmp, optimizer_trace=@tmp2;
drop table t1;
--echo # --echo #
--echo # End of 10.5 tests --echo # End of 10.5 tests
--echo # --echo #

View File

@@ -0,0 +1,26 @@
#
# MDEV-31380: Assertion `s->table->opt_range_condition_rows <= s->found_records' failed
# (assertion in 10.6+, DBL_MAX costs in 10.5)
#
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a), KEY(b)) ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100;
SET
@tmp=@@optimizer_use_condition_selectivity,
optimizer_use_condition_selectivity = 1,
@tmp2=@@optimizer_trace,
optimizer_trace=1;
SELECT DISTINCT * FROM t1 WHERE a IN (1, 2);
a b
1 1
2 2
select
CAST(json_value(json_extract(trace, '$**.chosen_access_method.cost'), '$[0]')
as DOUBLE) < 1.0e100 as ACCESS_METHOD_COST_IS_FINITE
from information_schema.optimizer_trace;
ACCESS_METHOD_COST_IS_FINITE
1
set optimizer_use_condition_selectivity = @tmp, optimizer_trace=@tmp2;
drop table t1;
#
# End of 10.5 tests
#

View File

@@ -0,0 +1,37 @@
#
# Tests for group-min-max optimization that require optimizer trace
# and so need not-embedded.
#
--source include/default_optimizer_switch.inc
--source include/have_innodb.inc
--source include/have_sequence.inc
--source include/not_embedded.inc
--echo #
--echo # MDEV-31380: Assertion `s->table->opt_range_condition_rows <= s->found_records' failed
--echo # (assertion in 10.6+, DBL_MAX costs in 10.5)
--echo #
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(a), KEY(b)) ENGINE=InnoDB;
INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100;
SET
@tmp=@@optimizer_use_condition_selectivity,
optimizer_use_condition_selectivity = 1,
@tmp2=@@optimizer_trace,
optimizer_trace=1;
SELECT DISTINCT * FROM t1 WHERE a IN (1, 2);
select
CAST(json_value(json_extract(trace, '$**.chosen_access_method.cost'), '$[0]')
as DOUBLE) < 1.0e100 as ACCESS_METHOD_COST_IS_FINITE
from information_schema.optimizer_trace;
set optimizer_use_condition_selectivity = @tmp, optimizer_trace=@tmp2;
drop table t1;
--echo #
--echo # End of 10.5 tests
--echo #

View File

@@ -3424,3 +3424,18 @@ COUNT(*)
2 2
DROP TABLE t1, t2, t3; DROP TABLE t1, t2, t3;
# End of 10.5 tests # End of 10.5 tests
#
# MDEV-31449: Assertion s->table->opt_range_condition_rows <= s->found_records
#
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2),(3,4);
CREATE TABLE t2 (c INT);
INSERT INTO t2 VALUES (5),(6);
SET @tmp=@@OPTIMIZER_USE_CONDITION_SELECTIVITY, OPTIMIZER_USE_CONDITION_SELECTIVITY = 1;
SELECT * FROM
(SELECT t1.* FROM t1 WHERE t1.a IN (SELECT MAX(t2.c) FROM t2 JOIN t1)) AS sq1,
(SELECT t2.* FROM t2 JOIN t1 ON (t1.b IN (SELECT t1.b FROM t2 STRAIGHT_JOIN t1))) AS sq2;
a b c
SET OPTIMIZER_USE_CONDITION_SELECTIVITY=@tmp;
DROP TABLE t1,t2;
# End of 10.6 tests

View File

@@ -1835,3 +1835,22 @@ SELECT COUNT(*) FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t2.b = t3.c) ON t1.a = t2.
DROP TABLE t1, t2, t3; DROP TABLE t1, t2, t3;
--echo # End of 10.5 tests --echo # End of 10.5 tests
--echo #
--echo # MDEV-31449: Assertion s->table->opt_range_condition_rows <= s->found_records
--echo #
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2),(3,4);
CREATE TABLE t2 (c INT);
INSERT INTO t2 VALUES (5),(6);
SET @tmp=@@OPTIMIZER_USE_CONDITION_SELECTIVITY, OPTIMIZER_USE_CONDITION_SELECTIVITY = 1;
SELECT * FROM
(SELECT t1.* FROM t1 WHERE t1.a IN (SELECT MAX(t2.c) FROM t2 JOIN t1)) AS sq1,
(SELECT t2.* FROM t2 JOIN t1 ON (t1.b IN (SELECT t1.b FROM t2 STRAIGHT_JOIN t1))) AS sq2;
SET OPTIMIZER_USE_CONDITION_SELECTIVITY=@tmp;
DROP TABLE t1,t2;
--echo # End of 10.6 tests

View File

@@ -11,7 +11,7 @@ Table Op Msg_type Msg_text
test.bug49823 repair status OK test.bug49823 repair status OK
RENAME TABLE general_log TO renamed_general_log; RENAME TABLE general_log TO renamed_general_log;
RENAME TABLE test.bug49823 TO general_log; RENAME TABLE test.bug49823 TO general_log;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -43,8 +43,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -146,9 +147,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -158,7 +158,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
DROP TABLE general_log; DROP TABLE general_log;
RENAME TABLE renamed_general_log TO general_log; RENAME TABLE renamed_general_log TO general_log;

View File

@@ -86,7 +86,7 @@ DROP TABLE t1;
create database TEST; create database TEST;
create procedure TEST.pr() begin end; create procedure TEST.pr() begin end;
create procedure test.pr() begin end; create procedure test.pr() begin end;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -134,8 +134,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -237,9 +238,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
TEST TEST
information_schema information_schema
@@ -250,7 +250,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
drop procedure test.pr; drop procedure test.pr;
drop database TEST; drop database TEST;

View File

@@ -5,7 +5,7 @@
SET NAMES utf8; SET NAMES utf8;
show create table mysql_json_test; show create table mysql_json_test;
ERROR HY000: Unknown data type: 'MYSQL_JSON' ERROR HY000: Unknown data type: 'MYSQL_JSON'
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -53,9 +53,10 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
installing plugin for MYSQL_JSON data type installing plugin for MYSQL_JSON data type
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -157,9 +158,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -175,8 +175,9 @@ test.mysql_json_test_big Needs upgrade
Repairing tables Repairing tables
test.mysql_json_test OK test.mysql_json_test OK
test.mysql_json_test_big OK test.mysql_json_test_big OK
Phase 7/8: uninstalling plugins
uninstalling plugin for 'type_mysql_json' data type uninstalling plugin for 'type_mysql_json' data type
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
show create table mysql_json_test; show create table mysql_json_test;
Table Create Table Table Create Table

View File

@@ -6,7 +6,7 @@ SET NAMES utf8;
call mtr.add_suppression("Table rebuild required"); call mtr.add_suppression("Table rebuild required");
show create table mysql_json_test; show create table mysql_json_test;
ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.mysql_json_test` FORCE" or dump/reload to fix it! ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.mysql_json_test` FORCE" or dump/reload to fix it!
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -54,8 +54,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -157,9 +158,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -175,7 +175,8 @@ test.mysql_json_test_big Needs upgrade
Repairing tables Repairing tables
test.mysql_json_test OK test.mysql_json_test OK
test.mysql_json_test_big OK test.mysql_json_test_big OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
show create table mysql_json_test; show create table mysql_json_test;
Table Create Table Table Create Table

View File

@@ -16,7 +16,7 @@ WHERE TABLE_SCHEMA='mysql' AND TABLE_NAME='user';
CHARACTER_SET_CLIENT COLLATION_CONNECTION CHARACTER_SET_CLIENT COLLATION_CONNECTION
utf8mb4 utf8mb4_unicode_ci utf8mb4 utf8mb4_unicode_ci
# Running mysql_upgrade # Running mysql_upgrade
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -47,8 +47,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -150,9 +151,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -162,7 +162,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# #
# Restoring character_set_client and collation_connection back # Restoring character_set_client and collation_connection back

View File

@@ -0,0 +1,2 @@
--old-mode=
--innodb-page-size=4k

View File

@@ -0,0 +1,548 @@
#
# Beginning of 10.6 test
#
# MDEV-28915: mysql_upgrade fails due to old_mode="", with "Cannot load
# from mysql.proc. The table is probably corrupted"
# Show that tables are created with utf8mb3 even without UTF8_IS_UTF8MB3 (see the .opt file)
SHOW CREATE TABLE mysql.proc;
Table Create Table
proc CREATE TABLE `proc` (
`db` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`type` enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL,
`specific_name` char(64) NOT NULL DEFAULT '',
`language` enum('SQL') NOT NULL DEFAULT 'SQL',
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL DEFAULT 'CONTAINS_SQL',
`is_deterministic` enum('YES','NO') NOT NULL DEFAULT 'NO',
`security_type` enum('INVOKER','DEFINER') NOT NULL DEFAULT 'DEFINER',
`param_list` blob NOT NULL,
`returns` longblob NOT NULL,
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Stored Procedures'
SHOW CREATE TABLE mysql.event;
Table Create Table
event CREATE TABLE `event` (
`db` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`execute_at` datetime DEFAULT NULL,
`interval_value` int(11) DEFAULT NULL,
`interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`last_executed` datetime DEFAULT NULL,
`starts` datetime DEFAULT NULL,
`ends` datetime DEFAULT NULL,
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
Phase 1/8: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.global_priv OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.index_stats OK
mysql.innodb_index_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.innodb_table_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.transaction_registry
Error : Unknown storage engine 'InnoDB'
error : Corrupt
Repairing tables
mysql.innodb_index_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.innodb_table_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.transaction_registry
Error : Unknown storage engine 'InnoDB'
error : Corrupt
Phase 2/8: Installing used storage engines... Skipped
Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK
sys.host_summary OK
sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK
sys.host_summary_by_stages OK
sys.host_summary_by_statement_latency OK
sys.host_summary_by_statement_type OK
sys.innodb_buffer_stats_by_schema OK
sys.innodb_buffer_stats_by_table OK
sys.innodb_lock_waits OK
sys.io_by_thread_by_latency OK
sys.io_global_by_file_by_bytes OK
sys.io_global_by_file_by_latency OK
sys.io_global_by_wait_by_bytes OK
sys.io_global_by_wait_by_latency OK
sys.latest_file_io OK
sys.memory_by_host_by_current_bytes OK
sys.memory_by_thread_by_current_bytes OK
sys.memory_by_user_by_current_bytes OK
sys.memory_global_by_current_bytes OK
sys.memory_global_total OK
sys.metrics OK
sys.processlist OK
sys.ps_check_lost_instrumentation OK
sys.schema_auto_increment_columns OK
sys.schema_index_statistics OK
sys.schema_object_overview OK
sys.schema_redundant_indexes OK
sys.schema_table_lock_waits OK
sys.schema_table_statistics OK
sys.schema_table_statistics_with_buffer OK
sys.schema_tables_with_full_table_scans OK
sys.schema_unused_indexes OK
sys.session OK
sys.session_ssl_status OK
sys.statement_analysis OK
sys.statements_with_errors_or_warnings OK
sys.statements_with_full_table_scans OK
sys.statements_with_runtimes_in_95th_percentile OK
sys.statements_with_sorting OK
sys.statements_with_temp_tables OK
sys.user_summary OK
sys.user_summary_by_file_io OK
sys.user_summary_by_file_io_type OK
sys.user_summary_by_stages OK
sys.user_summary_by_statement_latency OK
sys.user_summary_by_statement_type OK
sys.version OK
sys.wait_classes_global_by_avg_latency OK
sys.wait_classes_global_by_latency OK
sys.waits_by_host_by_latency OK
sys.waits_by_user_by_latency OK
sys.waits_global_by_latency OK
sys.x$host_summary OK
sys.x$host_summary_by_file_io OK
sys.x$host_summary_by_file_io_type OK
sys.x$host_summary_by_stages OK
sys.x$host_summary_by_statement_latency OK
sys.x$host_summary_by_statement_type OK
sys.x$innodb_buffer_stats_by_schema OK
sys.x$innodb_buffer_stats_by_table OK
sys.x$innodb_lock_waits OK
sys.x$io_by_thread_by_latency OK
sys.x$io_global_by_file_by_bytes OK
sys.x$io_global_by_file_by_latency OK
sys.x$io_global_by_wait_by_bytes OK
sys.x$io_global_by_wait_by_latency OK
sys.x$latest_file_io OK
sys.x$memory_by_host_by_current_bytes OK
sys.x$memory_by_thread_by_current_bytes OK
sys.x$memory_by_user_by_current_bytes OK
sys.x$memory_global_by_current_bytes OK
sys.x$memory_global_total OK
sys.x$processlist OK
sys.x$ps_digest_95th_percentile_by_avg_us OK
sys.x$ps_digest_avg_latency_distribution OK
sys.x$ps_schema_table_statistics_io OK
sys.x$schema_flattened_keys OK
sys.x$schema_index_statistics OK
sys.x$schema_table_lock_waits OK
sys.x$schema_table_statistics OK
sys.x$schema_table_statistics_with_buffer OK
sys.x$schema_tables_with_full_table_scans OK
sys.x$session OK
sys.x$statement_analysis OK
sys.x$statements_with_errors_or_warnings OK
sys.x$statements_with_full_table_scans OK
sys.x$statements_with_runtimes_in_95th_percentile OK
sys.x$statements_with_sorting OK
sys.x$statements_with_temp_tables OK
sys.x$user_summary OK
sys.x$user_summary_by_file_io OK
sys.x$user_summary_by_file_io_type OK
sys.x$user_summary_by_stages OK
sys.x$user_summary_by_statement_latency OK
sys.x$user_summary_by_statement_type OK
sys.x$wait_classes_global_by_avg_latency OK
sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK
Phase 5/8: Fixing table and database names
Phase 6/8: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
sys
sys.sys_config OK
test
Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK
SHOW CREATE TABLE mysql.proc;
Table Create Table
proc CREATE TABLE `proc` (
`db` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`type` enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL,
`specific_name` char(64) NOT NULL DEFAULT '',
`language` enum('SQL') NOT NULL DEFAULT 'SQL',
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL DEFAULT 'CONTAINS_SQL',
`is_deterministic` enum('YES','NO') NOT NULL DEFAULT 'NO',
`security_type` enum('INVOKER','DEFINER') NOT NULL DEFAULT 'DEFINER',
`param_list` blob NOT NULL,
`returns` longblob NOT NULL,
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Stored Procedures'
SHOW CREATE TABLE mysql.event;
Table Create Table
event CREATE TABLE `event` (
`db` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`execute_at` datetime DEFAULT NULL,
`interval_value` int(11) DEFAULT NULL,
`interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`last_executed` datetime DEFAULT NULL,
`starts` datetime DEFAULT NULL,
`ends` datetime DEFAULT NULL,
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
# Emulate that tables were created with utf8mb4 by an older version
ALTER TABLE mysql.proc MODIFY db CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY name CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY specific_name CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY definer VARCHAR(384) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
MODIFY comment TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY character_set_client CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY collation_connection CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY db_collation CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL;
ALTER TABLE mysql.event MODIFY db CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
MODIFY name CHAR(64) CHARACTER SET utf8mb4 NOT NULL DEFAULT '',
MODIFY definer VARCHAR(384) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
MODIFY comment CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
MODIFY character_set_client CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
MODIFY collation_connection CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
MODIFY db_collation CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
CREATE TABLE t1 (id1 INT, val1 VARCHAR(5));
CREATE PROCEDURE sp1 ()
BEGIN
SELECT val1 FROM t1;
END|
SELECT name, body_utf8, body FROM mysql.proc WHERE name like 'sp1';
name body_utf8 body
sp1 BEGIN
SELECT val1 FROM t1;
END BEGIN
SELECT val1 FROM t1;
END
CALL sp1();
val1
SELECT name, body_utf8, body FROM mysql.proc WHERE name like 'sp1';
name body_utf8 body
sp1 BEGIN
SELECT val1 FROM t1;
END BEGIN
SELECT val1 FROM t1;
END
SET GLOBAL event_scheduler=ON;
SELECT name, body_utf8, body FROM mysql.event;
name body_utf8 body
CREATE EVENT ev1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO t1 VALUES (1, 'abc');
SELECT name, body_utf8, body FROM mysql.event;
name body_utf8 body
ev1 INSERT INTO t1 VALUES (1, 'abc') INSERT INTO t1 VALUES (1, 'abc')
# mysql_upgrade changes columns from utf8mb4 to utf8mb3
Phase 1/8: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.global_priv OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.index_stats OK
mysql.innodb_index_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.innodb_table_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.transaction_registry
Error : Unknown storage engine 'InnoDB'
error : Corrupt
Repairing tables
mysql.innodb_index_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.innodb_table_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
mysql.transaction_registry
Error : Unknown storage engine 'InnoDB'
error : Corrupt
Phase 2/8: Installing used storage engines... Skipped
Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK
sys.host_summary OK
sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK
sys.host_summary_by_stages OK
sys.host_summary_by_statement_latency OK
sys.host_summary_by_statement_type OK
sys.innodb_buffer_stats_by_schema OK
sys.innodb_buffer_stats_by_table OK
sys.innodb_lock_waits OK
sys.io_by_thread_by_latency OK
sys.io_global_by_file_by_bytes OK
sys.io_global_by_file_by_latency OK
sys.io_global_by_wait_by_bytes OK
sys.io_global_by_wait_by_latency OK
sys.latest_file_io OK
sys.memory_by_host_by_current_bytes OK
sys.memory_by_thread_by_current_bytes OK
sys.memory_by_user_by_current_bytes OK
sys.memory_global_by_current_bytes OK
sys.memory_global_total OK
sys.metrics OK
sys.processlist OK
sys.ps_check_lost_instrumentation OK
sys.schema_auto_increment_columns OK
sys.schema_index_statistics OK
sys.schema_object_overview OK
sys.schema_redundant_indexes OK
sys.schema_table_lock_waits OK
sys.schema_table_statistics OK
sys.schema_table_statistics_with_buffer OK
sys.schema_tables_with_full_table_scans OK
sys.schema_unused_indexes OK
sys.session OK
sys.session_ssl_status OK
sys.statement_analysis OK
sys.statements_with_errors_or_warnings OK
sys.statements_with_full_table_scans OK
sys.statements_with_runtimes_in_95th_percentile OK
sys.statements_with_sorting OK
sys.statements_with_temp_tables OK
sys.user_summary OK
sys.user_summary_by_file_io OK
sys.user_summary_by_file_io_type OK
sys.user_summary_by_stages OK
sys.user_summary_by_statement_latency OK
sys.user_summary_by_statement_type OK
sys.version OK
sys.wait_classes_global_by_avg_latency OK
sys.wait_classes_global_by_latency OK
sys.waits_by_host_by_latency OK
sys.waits_by_user_by_latency OK
sys.waits_global_by_latency OK
sys.x$host_summary OK
sys.x$host_summary_by_file_io OK
sys.x$host_summary_by_file_io_type OK
sys.x$host_summary_by_stages OK
sys.x$host_summary_by_statement_latency OK
sys.x$host_summary_by_statement_type OK
sys.x$innodb_buffer_stats_by_schema OK
sys.x$innodb_buffer_stats_by_table OK
sys.x$innodb_lock_waits OK
sys.x$io_by_thread_by_latency OK
sys.x$io_global_by_file_by_bytes OK
sys.x$io_global_by_file_by_latency OK
sys.x$io_global_by_wait_by_bytes OK
sys.x$io_global_by_wait_by_latency OK
sys.x$latest_file_io OK
sys.x$memory_by_host_by_current_bytes OK
sys.x$memory_by_thread_by_current_bytes OK
sys.x$memory_by_user_by_current_bytes OK
sys.x$memory_global_by_current_bytes OK
sys.x$memory_global_total OK
sys.x$processlist OK
sys.x$ps_digest_95th_percentile_by_avg_us OK
sys.x$ps_digest_avg_latency_distribution OK
sys.x$ps_schema_table_statistics_io OK
sys.x$schema_flattened_keys OK
sys.x$schema_index_statistics OK
sys.x$schema_table_lock_waits OK
sys.x$schema_table_statistics OK
sys.x$schema_table_statistics_with_buffer OK
sys.x$schema_tables_with_full_table_scans OK
sys.x$session OK
sys.x$statement_analysis OK
sys.x$statements_with_errors_or_warnings OK
sys.x$statements_with_full_table_scans OK
sys.x$statements_with_runtimes_in_95th_percentile OK
sys.x$statements_with_sorting OK
sys.x$statements_with_temp_tables OK
sys.x$user_summary OK
sys.x$user_summary_by_file_io OK
sys.x$user_summary_by_file_io_type OK
sys.x$user_summary_by_stages OK
sys.x$user_summary_by_statement_latency OK
sys.x$user_summary_by_statement_type OK
sys.x$wait_classes_global_by_avg_latency OK
sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK
Phase 5/8: Fixing table and database names
Phase 6/8: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
sys
sys.sys_config OK
test
test.t1 OK
Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK
SHOW CREATE TABLE mysql.proc;
Table proc
Create Table CREATE TABLE `proc` (
`db` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`type` enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL,
`specific_name` char(64) NOT NULL DEFAULT '',
`language` enum('SQL') NOT NULL DEFAULT 'SQL',
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL DEFAULT 'CONTAINS_SQL',
`is_deterministic` enum('YES','NO') NOT NULL DEFAULT 'NO',
`security_type` enum('INVOKER','DEFINER') NOT NULL DEFAULT 'DEFINER',
`param_list` blob NOT NULL,
`returns` longblob NOT NULL,
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Stored Procedures'
SHOW CREATE TABLE mysql.event;
Table event
Create Table CREATE TABLE `event` (
`db` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`execute_at` datetime DEFAULT NULL,
`interval_value` int(11) DEFAULT NULL,
`interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`last_executed` datetime DEFAULT NULL,
`starts` datetime DEFAULT NULL,
`ends` datetime DEFAULT NULL,
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
SET GLOBAL event_scheduler=OFF;
DROP EVENT ev1;
DROP PROCEDURE sp1;
DROP TABLE t1;
# end of 10.6 test

View File

@@ -0,0 +1,79 @@
--source include/mysql_upgrade_preparation.inc
let $MYSQLD_DATADIR= `select @@datadir`;
--echo #
--echo # Beginning of 10.6 test
--echo #
--echo # MDEV-28915: mysql_upgrade fails due to old_mode="", with "Cannot load
--echo # from mysql.proc. The table is probably corrupted"
--echo # Show that tables are created with utf8mb3 even without UTF8_IS_UTF8MB3 (see the .opt file)
SHOW CREATE TABLE mysql.proc;
SHOW CREATE TABLE mysql.event;
--exec $MYSQL_UPGRADE --force 2>&1
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
SHOW CREATE TABLE mysql.proc;
SHOW CREATE TABLE mysql.event;
--echo # Emulate that tables were created with utf8mb4 by an older version
ALTER TABLE mysql.proc MODIFY db CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY name CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY specific_name CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY definer VARCHAR(384) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
MODIFY comment TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY character_set_client CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY collation_connection CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
MODIFY db_collation CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL;
ALTER TABLE mysql.event MODIFY db CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
MODIFY name CHAR(64) CHARACTER SET utf8mb4 NOT NULL DEFAULT '',
MODIFY definer VARCHAR(384) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
MODIFY comment CHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
MODIFY character_set_client CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
MODIFY collation_connection CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
MODIFY db_collation CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
CREATE TABLE t1 (id1 INT, val1 VARCHAR(5));
DELIMITER |;
CREATE PROCEDURE sp1 ()
BEGIN
SELECT val1 FROM t1;
END|
DELIMITER ;|
SELECT name, body_utf8, body FROM mysql.proc WHERE name like 'sp1';
CALL sp1();
SELECT name, body_utf8, body FROM mysql.proc WHERE name like 'sp1';
SET GLOBAL event_scheduler=ON;
SELECT name, body_utf8, body FROM mysql.event;
CREATE EVENT ev1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO t1 VALUES (1, 'abc');
SELECT name, body_utf8, body FROM mysql.event;
--echo # mysql_upgrade changes columns from utf8mb4 to utf8mb3
--exec $MYSQL_UPGRADE --force 2>&1
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
--vertical_results
SHOW CREATE TABLE mysql.proc;
SHOW CREATE TABLE mysql.event;
SET GLOBAL event_scheduler=OFF;
DROP EVENT ev1;
DROP PROCEDURE sp1;
DROP TABLE t1;
--echo # end of 10.6 test

View File

@@ -1,5 +1,5 @@
update mysql.global_priv set priv=json_set(priv, '$.plugin', 'mysql_native_password', '$.authentication_string', password('foo')) where user='root'; update mysql.global_priv set priv=json_set(priv, '$.plugin', 'mysql_native_password', '$.authentication_string', password('foo')) where user='root';
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -47,8 +47,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -150,9 +151,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -162,7 +162,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
connect con1,localhost,root,foo,,,; connect con1,localhost,root,foo,,,;
update mysql.global_priv set priv=json_compact(json_remove(priv, '$.plugin', '$.authentication_string')) where user='root'; update mysql.global_priv set priv=json_compact(json_remove(priv, '$.plugin', '$.authentication_string')) where user='root';

View File

@@ -1,7 +1,7 @@
set sql_mode=""; set sql_mode="";
call mtr.add_suppression("Incorrect definition of table mysql.column_stats:.*"); call mtr.add_suppression("Incorrect definition of table mysql.column_stats:.*");
Run mysql_upgrade once Run mysql_upgrade once
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -32,8 +32,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -135,9 +136,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -147,13 +147,14 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
Run it again - should say already completed Run it again - should say already completed
This installation of MariaDB is already upgraded to VERSION.There is no need to run mysql_upgrade again for VERSION. This installation of MariaDB is already upgraded to VERSION.There is no need to run mysql_upgrade again for VERSION.
You can use --force if you still want to run mysql_upgrade You can use --force if you still want to run mysql_upgrade
Force should run it regardless of whether it has been run before Force should run it regardless of whether it has been run before
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -184,8 +185,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -287,9 +289,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -299,12 +300,13 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila'; CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
GRANT ALL ON *.* TO mysqltest1@'%'; GRANT ALL ON *.* TO mysqltest1@'%';
Run mysql_upgrade with password protected account Run mysql_upgrade with password protected account
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -335,8 +337,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -438,9 +441,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -450,7 +452,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
DROP USER mysqltest1@'%'; DROP USER mysqltest1@'%';
Reading datadir from the MariaDB server failed. Got the following error when executing the 'mysql' command line client Reading datadir from the MariaDB server failed. Got the following error when executing the 'mysql' command line client
@@ -461,7 +464,7 @@ Reading datadir from the MariaDB server failed. Got the following error when exe
ERROR 2005 (HY000): Unknown server host 'not_existing_host' (errno) ERROR 2005 (HY000): Unknown server host 'not_existing_host' (errno)
FATAL ERROR: Upgrade failed FATAL ERROR: Upgrade failed
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE'; set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -492,8 +495,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -595,9 +599,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -607,7 +610,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
set GLOBAL sql_mode=default; set GLOBAL sql_mode=default;
# #
@@ -618,7 +622,7 @@ CREATE PROCEDURE testproc() BEGIN END;
UPDATE mysql.proc SET character_set_client = NULL WHERE name LIKE 'testproc'; UPDATE mysql.proc SET character_set_client = NULL WHERE name LIKE 'testproc';
UPDATE mysql.proc SET collation_connection = NULL WHERE name LIKE 'testproc'; UPDATE mysql.proc SET collation_connection = NULL WHERE name LIKE 'testproc';
UPDATE mysql.proc SET db_collation = NULL WHERE name LIKE 'testproc'; UPDATE mysql.proc SET db_collation = NULL WHERE name LIKE 'testproc';
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -649,8 +653,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -752,9 +757,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -764,7 +768,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
CALL testproc(); CALL testproc();
DROP PROCEDURE testproc; DROP PROCEDURE testproc;
@@ -778,7 +783,7 @@ WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been
GRANT USAGE ON *.* TO 'user3'@'%'; GRANT USAGE ON *.* TO 'user3'@'%';
GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%'; GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%';
Run mysql_upgrade with all privileges on a user Run mysql_upgrade with all privileges on a user
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -809,8 +814,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -912,9 +918,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -924,7 +929,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SHOW GRANTS FOR 'user3'@'%'; SHOW GRANTS FOR 'user3'@'%';
Grants for user3@% Grants for user3@%
@@ -933,7 +939,7 @@ GRANT ALL PRIVILEGES ON `roelt`.`test2` TO `user3`@`%`
DROP USER 'user3'@'%'; DROP USER 'user3'@'%';
# End of 5.1 tests # End of 5.1 tests
The --upgrade-system-tables option was used, user tables won't be touched. The --upgrade-system-tables option was used, user tables won't be touched.
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -964,12 +970,13 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views... Skipped Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 4/8: Fixing views... Skipped
Phase 5/7: Fixing table and database names ... Skipped Phase 5/8: Fixing table and database names ... Skipped
Phase 6/7: Checking and upgrading tables... Skipped Phase 6/8: Checking and upgrading tables... Skipped
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# #
# Bug#11827359 60223: MYSQL_UPGRADE PROBLEM WITH OPTION # Bug#11827359 60223: MYSQL_UPGRADE PROBLEM WITH OPTION
@@ -977,7 +984,7 @@ OK
# #
# Droping the previously created mysql_upgrade_info file.. # Droping the previously created mysql_upgrade_info file..
# Running mysql_upgrade with --skip-write-binlog.. # Running mysql_upgrade with --skip-write-binlog..
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -1008,8 +1015,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -1111,9 +1119,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -1123,7 +1130,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# #
# Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR # Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR
@@ -1148,7 +1156,7 @@ GRANT INSERT ON mysql.user TO very_long_user_name_number_2;
GRANT UPDATE (User) ON mysql.db TO very_long_user_name_number_1; GRANT UPDATE (User) ON mysql.db TO very_long_user_name_number_1;
GRANT UPDATE (User) ON mysql.db TO very_long_user_name_number_2; GRANT UPDATE (User) ON mysql.db TO very_long_user_name_number_2;
CREATE PROCEDURE test.pr() BEGIN END; CREATE PROCEDURE test.pr() BEGIN END;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -1179,8 +1187,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -1282,9 +1291,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -1294,7 +1302,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SELECT definer FROM mysql.proc WHERE db = 'test' AND name = 'pr'; SELECT definer FROM mysql.proc WHERE db = 'test' AND name = 'pr';
definer definer
@@ -1327,7 +1336,7 @@ set sql_mode=default;
create table test.t1(a int) engine=MyISAM; create table test.t1(a int) engine=MyISAM;
# Trying to enforce InnoDB for all tables # Trying to enforce InnoDB for all tables
SET GLOBAL enforce_storage_engine=InnoDB; SET GLOBAL enforce_storage_engine=InnoDB;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -1358,8 +1367,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -1461,9 +1471,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -1474,7 +1483,8 @@ sys
sys.sys_config OK sys.sys_config OK
test test
test.t1 OK test.t1 OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# Should return 2 # Should return 2
SELECT count(*) FROM information_schema.tables where ENGINE="InnoDB"; SELECT count(*) FROM information_schema.tables where ENGINE="InnoDB";
@@ -1545,7 +1555,7 @@ user CREATE TABLE `user` (
`account_locked` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N', `account_locked` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
PRIMARY KEY (`Host`,`User`) PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='Users and global privileges' ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='Users and global privileges'
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -1578,9 +1588,11 @@ mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
mysql.user OK mysql.user OK
Upgrading from a version before MariaDB-10.1 Upgrading from a version before MariaDB-10.1
Phase 2/7: Installing used storage engines Phase 2/8: Installing used storage engines
Checking for tables with unknown storage engine Checking for tables with unknown storage engine
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK sys.host_summary_by_file_io_type OK
@@ -1681,9 +1693,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -1693,7 +1704,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SHOW CREATE TABLE mysql.user; SHOW CREATE TABLE mysql.user;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
@@ -1723,7 +1735,7 @@ ALTER TABLE mysql.user ADD is_role enum('N', 'Y') COLLATE utf8_general_ci DEFAUL
ALTER TABLE mysql.user ADD default_role char(80) binary DEFAULT '' NOT NULL; ALTER TABLE mysql.user ADD default_role char(80) binary DEFAULT '' NOT NULL;
ALTER TABLE mysql.user ADD max_statement_time decimal(12,6) DEFAULT 0 NOT NULL; ALTER TABLE mysql.user ADD max_statement_time decimal(12,6) DEFAULT 0 NOT NULL;
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -1755,8 +1767,12 @@ mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
mysql.user OK mysql.user OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user
Warning : The user specified as a definer ('mariadb.sys'@'localhost') does not exist
status : OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK sys.host_summary_by_file_io_type OK
@@ -1857,9 +1873,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -1869,7 +1884,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SHOW CREATE TABLE mysql.user; SHOW CREATE TABLE mysql.user;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
@@ -1954,7 +1970,7 @@ SET GLOBAL alter_algorithm='INPLACE';
SHOW GLOBAL VARIABLES LIKE 'alter_algorithm'; SHOW GLOBAL VARIABLES LIKE 'alter_algorithm';
Variable_name Value Variable_name Value
alter_algorithm INPLACE alter_algorithm INPLACE
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -1985,8 +2001,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -2088,9 +2105,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -2100,7 +2116,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SET GLOBAL alter_algorithm=DEFAULT; SET GLOBAL alter_algorithm=DEFAULT;
SHOW GLOBAL VARIABLES LIKE 'alter_algorithm'; SHOW GLOBAL VARIABLES LIKE 'alter_algorithm';
@@ -2168,7 +2185,7 @@ FLUSH PRIVILEGES;
CREATE USER mariadb_102; CREATE USER mariadb_102;
UPDATE mysql.user SET password_last_changed=0 WHERE user='mariadb_102'; UPDATE mysql.user SET password_last_changed=0 WHERE user='mariadb_102';
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -2201,9 +2218,13 @@ mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
mysql.user OK mysql.user OK
Upgrading from a version before MariaDB-10.1 Upgrading from a version before MariaDB-10.1
Phase 2/7: Installing used storage engines Phase 2/8: Installing used storage engines
Checking for tables with unknown storage engine Checking for tables with unknown storage engine
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user
Warning : The user specified as a definer ('mariadb.sys'@'localhost') does not exist
status : OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK sys.host_summary_by_file_io_type OK
@@ -2304,9 +2325,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -2316,7 +2336,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
SHOW CREATE USER mariadb_102; SHOW CREATE USER mariadb_102;
CREATE USER for mariadb_102@% CREATE USER for mariadb_102@%

View File

@@ -10,7 +10,7 @@ ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.mysql_json_tes
show create table mysql_json_test_big; show create table mysql_json_test_big;
ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.mysql_json_test_big` FORCE" or dump/reload to fix it! ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.mysql_json_test_big` FORCE" or dump/reload to fix it!
# Run mysql_upgrade to fix the tables containing JSON. # Run mysql_upgrade to fix the tables containing JSON.
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -41,8 +41,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -144,9 +145,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -164,7 +164,8 @@ Repairing tables
test.mysql_json_test OK test.mysql_json_test OK
test.mysql_json_test_big OK test.mysql_json_test_big OK
test.tempty OK test.tempty OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# #
# Now check if the table structure is correct and that the data # Now check if the table structure is correct and that the data

View File

@@ -1,5 +1,5 @@
The --upgrade-system-tables option was used, user tables won't be touched. The --upgrade-system-tables option was used, user tables won't be touched.
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -47,10 +47,11 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views... Skipped Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 4/8: Fixing views... Skipped
Phase 5/7: Fixing table and database names ... Skipped Phase 5/8: Fixing table and database names ... Skipped
Phase 6/7: Checking and upgrading tables... Skipped Phase 6/8: Checking and upgrading tables... Skipped
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK

View File

@@ -56,168 +56,18 @@ Level Warning
Code 1286 Code 1286
Message Unknown storage engine 'ARCHIVE' Message Unknown storage engine 'ARCHIVE'
# upgrade from 10.1 - engines aren't enabled # upgrade from 10.1 - engines aren't enabled
Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.global_priv_bak OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.index_stats OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.transaction_registry OK
mysql.user OK
Phase 2/7: Installing used storage engines... Skipped
Phase 3/7: Fixing views
sys.host_summary OK
sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK
sys.host_summary_by_stages OK
sys.host_summary_by_statement_latency OK
sys.host_summary_by_statement_type OK
sys.innodb_buffer_stats_by_schema OK
sys.innodb_buffer_stats_by_table OK
sys.innodb_lock_waits OK
sys.io_by_thread_by_latency OK
sys.io_global_by_file_by_bytes OK
sys.io_global_by_file_by_latency OK
sys.io_global_by_wait_by_bytes OK
sys.io_global_by_wait_by_latency OK
sys.latest_file_io OK
sys.memory_by_host_by_current_bytes OK
sys.memory_by_thread_by_current_bytes OK
sys.memory_by_user_by_current_bytes OK
sys.memory_global_by_current_bytes OK
sys.memory_global_total OK
sys.metrics OK
sys.processlist OK
sys.ps_check_lost_instrumentation OK
sys.schema_auto_increment_columns OK
sys.schema_index_statistics OK
sys.schema_object_overview OK
sys.schema_redundant_indexes OK
sys.schema_table_lock_waits OK
sys.schema_table_statistics OK
sys.schema_table_statistics_with_buffer OK
sys.schema_tables_with_full_table_scans OK
sys.schema_unused_indexes OK
sys.session OK
sys.session_ssl_status OK
sys.statement_analysis OK
sys.statements_with_errors_or_warnings OK
sys.statements_with_full_table_scans OK
sys.statements_with_runtimes_in_95th_percentile OK
sys.statements_with_sorting OK
sys.statements_with_temp_tables OK
sys.user_summary OK
sys.user_summary_by_file_io OK
sys.user_summary_by_file_io_type OK
sys.user_summary_by_stages OK
sys.user_summary_by_statement_latency OK
sys.user_summary_by_statement_type OK
sys.version OK
sys.wait_classes_global_by_avg_latency OK
sys.wait_classes_global_by_latency OK
sys.waits_by_host_by_latency OK
sys.waits_by_user_by_latency OK
sys.waits_global_by_latency OK
sys.x$host_summary OK
sys.x$host_summary_by_file_io OK
sys.x$host_summary_by_file_io_type OK
sys.x$host_summary_by_stages OK
sys.x$host_summary_by_statement_latency OK
sys.x$host_summary_by_statement_type OK
sys.x$innodb_buffer_stats_by_schema OK
sys.x$innodb_buffer_stats_by_table OK
sys.x$innodb_lock_waits OK
sys.x$io_by_thread_by_latency OK
sys.x$io_global_by_file_by_bytes OK
sys.x$io_global_by_file_by_latency OK
sys.x$io_global_by_wait_by_bytes OK
sys.x$io_global_by_wait_by_latency OK
sys.x$latest_file_io OK
sys.x$memory_by_host_by_current_bytes OK
sys.x$memory_by_thread_by_current_bytes OK
sys.x$memory_by_user_by_current_bytes OK
sys.x$memory_global_by_current_bytes OK
sys.x$memory_global_total OK
sys.x$processlist OK
sys.x$ps_digest_95th_percentile_by_avg_us OK
sys.x$ps_digest_avg_latency_distribution OK
sys.x$ps_schema_table_statistics_io OK
sys.x$schema_flattened_keys OK
sys.x$schema_index_statistics OK
sys.x$schema_table_lock_waits OK
sys.x$schema_table_statistics OK
sys.x$schema_table_statistics_with_buffer OK
sys.x$schema_tables_with_full_table_scans OK
sys.x$session OK
sys.x$statement_analysis OK
sys.x$statements_with_errors_or_warnings OK
sys.x$statements_with_full_table_scans OK
sys.x$statements_with_runtimes_in_95th_percentile OK
sys.x$statements_with_sorting OK
sys.x$statements_with_temp_tables OK
sys.x$user_summary OK
sys.x$user_summary_by_file_io OK
sys.x$user_summary_by_file_io_type OK
sys.x$user_summary_by_stages OK
sys.x$user_summary_by_statement_latency OK
sys.x$user_summary_by_statement_type OK
sys.x$wait_classes_global_by_avg_latency OK
sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables'
Phase 5/7: Fixing table and database names
Phase 6/7: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
sys
sys.sys_config OK
test
test.t1 test.t1
Error : Unknown storage engine 'BLACKHOLE' Error : Unknown storage engine 'BLACKHOLE'
error : Corrupt error : Corrupt
test.t2 test.t2
Error : Unknown storage engine 'ARCHIVE' Error : Unknown storage engine 'ARCHIVE'
error : Corrupt error : Corrupt
Repairing tables
test.t1 test.t1
Error : Unknown storage engine 'BLACKHOLE' Error : Unknown storage engine 'BLACKHOLE'
error : Corrupt error : Corrupt
test.t2 test.t2
Error : Unknown storage engine 'ARCHIVE' Error : Unknown storage engine 'ARCHIVE'
error : Corrupt error : Corrupt
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
table_catalog def table_catalog def
table_schema test table_schema test
@@ -252,169 +102,18 @@ rename table mysql.global_priv_bak to mysql.global_priv;
drop view mysql.user_bak; drop view mysql.user_bak;
alter table mysql.user drop column default_role, drop column max_statement_time; alter table mysql.user drop column default_role, drop column max_statement_time;
# still upgrade from 10.1 # still upgrade from 10.1
Major version upgrade detected from MariaDB to MariaDB . Check required!
Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.global_priv_bak OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.index_stats OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.transaction_registry OK
mysql.user OK
Phase 2/7: Installing used storage engines... Skipped
Phase 3/7: Fixing views
sys.host_summary OK
sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK
sys.host_summary_by_stages OK
sys.host_summary_by_statement_latency OK
sys.host_summary_by_statement_type OK
sys.innodb_buffer_stats_by_schema OK
sys.innodb_buffer_stats_by_table OK
sys.innodb_lock_waits OK
sys.io_by_thread_by_latency OK
sys.io_global_by_file_by_bytes OK
sys.io_global_by_file_by_latency OK
sys.io_global_by_wait_by_bytes OK
sys.io_global_by_wait_by_latency OK
sys.latest_file_io OK
sys.memory_by_host_by_current_bytes OK
sys.memory_by_thread_by_current_bytes OK
sys.memory_by_user_by_current_bytes OK
sys.memory_global_by_current_bytes OK
sys.memory_global_total OK
sys.metrics OK
sys.processlist OK
sys.ps_check_lost_instrumentation OK
sys.schema_auto_increment_columns OK
sys.schema_index_statistics OK
sys.schema_object_overview OK
sys.schema_redundant_indexes OK
sys.schema_table_lock_waits OK
sys.schema_table_statistics OK
sys.schema_table_statistics_with_buffer OK
sys.schema_tables_with_full_table_scans OK
sys.schema_unused_indexes OK
sys.session OK
sys.session_ssl_status OK
sys.statement_analysis OK
sys.statements_with_errors_or_warnings OK
sys.statements_with_full_table_scans OK
sys.statements_with_runtimes_in_95th_percentile OK
sys.statements_with_sorting OK
sys.statements_with_temp_tables OK
sys.user_summary OK
sys.user_summary_by_file_io OK
sys.user_summary_by_file_io_type OK
sys.user_summary_by_stages OK
sys.user_summary_by_statement_latency OK
sys.user_summary_by_statement_type OK
sys.version OK
sys.wait_classes_global_by_avg_latency OK
sys.wait_classes_global_by_latency OK
sys.waits_by_host_by_latency OK
sys.waits_by_user_by_latency OK
sys.waits_global_by_latency OK
sys.x$host_summary OK
sys.x$host_summary_by_file_io OK
sys.x$host_summary_by_file_io_type OK
sys.x$host_summary_by_stages OK
sys.x$host_summary_by_statement_latency OK
sys.x$host_summary_by_statement_type OK
sys.x$innodb_buffer_stats_by_schema OK
sys.x$innodb_buffer_stats_by_table OK
sys.x$innodb_lock_waits OK
sys.x$io_by_thread_by_latency OK
sys.x$io_global_by_file_by_bytes OK
sys.x$io_global_by_file_by_latency OK
sys.x$io_global_by_wait_by_bytes OK
sys.x$io_global_by_wait_by_latency OK
sys.x$latest_file_io OK
sys.x$memory_by_host_by_current_bytes OK
sys.x$memory_by_thread_by_current_bytes OK
sys.x$memory_by_user_by_current_bytes OK
sys.x$memory_global_by_current_bytes OK
sys.x$memory_global_total OK
sys.x$processlist OK
sys.x$ps_digest_95th_percentile_by_avg_us OK
sys.x$ps_digest_avg_latency_distribution OK
sys.x$ps_schema_table_statistics_io OK
sys.x$schema_flattened_keys OK
sys.x$schema_index_statistics OK
sys.x$schema_table_lock_waits OK
sys.x$schema_table_statistics OK
sys.x$schema_table_statistics_with_buffer OK
sys.x$schema_tables_with_full_table_scans OK
sys.x$session OK
sys.x$statement_analysis OK
sys.x$statements_with_errors_or_warnings OK
sys.x$statements_with_full_table_scans OK
sys.x$statements_with_runtimes_in_95th_percentile OK
sys.x$statements_with_sorting OK
sys.x$statements_with_temp_tables OK
sys.x$user_summary OK
sys.x$user_summary_by_file_io OK
sys.x$user_summary_by_file_io_type OK
sys.x$user_summary_by_stages OK
sys.x$user_summary_by_statement_latency OK
sys.x$user_summary_by_statement_type OK
sys.x$wait_classes_global_by_avg_latency OK
sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables'
Phase 5/7: Fixing table and database names
Phase 6/7: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
sys
sys.sys_config OK
test
test.t1 test.t1
Error : Unknown storage engine 'BLACKHOLE' Error : Unknown storage engine 'BLACKHOLE'
error : Corrupt error : Corrupt
test.t2 test.t2
Error : Unknown storage engine 'ARCHIVE' Error : Unknown storage engine 'ARCHIVE'
error : Corrupt error : Corrupt
Repairing tables
test.t1 test.t1
Error : Unknown storage engine 'BLACKHOLE' Error : Unknown storage engine 'BLACKHOLE'
error : Corrupt error : Corrupt
test.t2 test.t2
Error : Unknown storage engine 'ARCHIVE' Error : Unknown storage engine 'ARCHIVE'
error : Corrupt error : Corrupt
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
table_catalog def table_catalog def
table_schema test table_schema test
@@ -449,160 +148,6 @@ rename table mysql.global_priv_bak to mysql.global_priv;
drop view mysql.user_bak; drop view mysql.user_bak;
alter table mysql.user drop column default_role, drop column max_statement_time; alter table mysql.user drop column default_role, drop column max_statement_time;
# upgrade from 10.0 - engines are enabled # upgrade from 10.0 - engines are enabled
Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats OK
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.global_priv_bak OK
mysql.gtid_slave_pos OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.index_stats OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.roles_mapping OK
mysql.servers OK
mysql.table_stats OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.transaction_registry OK
mysql.user OK
Upgrading from a version before MariaDB-10.1
Phase 2/7: Installing used storage engines
Checking for tables with unknown storage engine
installing plugin for 'archive' storage engine
installing plugin for 'blackhole' storage engine
Phase 3/7: Fixing views
sys.host_summary OK
sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK
sys.host_summary_by_stages OK
sys.host_summary_by_statement_latency OK
sys.host_summary_by_statement_type OK
sys.innodb_buffer_stats_by_schema OK
sys.innodb_buffer_stats_by_table OK
sys.innodb_lock_waits OK
sys.io_by_thread_by_latency OK
sys.io_global_by_file_by_bytes OK
sys.io_global_by_file_by_latency OK
sys.io_global_by_wait_by_bytes OK
sys.io_global_by_wait_by_latency OK
sys.latest_file_io OK
sys.memory_by_host_by_current_bytes OK
sys.memory_by_thread_by_current_bytes OK
sys.memory_by_user_by_current_bytes OK
sys.memory_global_by_current_bytes OK
sys.memory_global_total OK
sys.metrics OK
sys.processlist OK
sys.ps_check_lost_instrumentation OK
sys.schema_auto_increment_columns OK
sys.schema_index_statistics OK
sys.schema_object_overview OK
sys.schema_redundant_indexes OK
sys.schema_table_lock_waits OK
sys.schema_table_statistics OK
sys.schema_table_statistics_with_buffer OK
sys.schema_tables_with_full_table_scans OK
sys.schema_unused_indexes OK
sys.session OK
sys.session_ssl_status OK
sys.statement_analysis OK
sys.statements_with_errors_or_warnings OK
sys.statements_with_full_table_scans OK
sys.statements_with_runtimes_in_95th_percentile OK
sys.statements_with_sorting OK
sys.statements_with_temp_tables OK
sys.user_summary OK
sys.user_summary_by_file_io OK
sys.user_summary_by_file_io_type OK
sys.user_summary_by_stages OK
sys.user_summary_by_statement_latency OK
sys.user_summary_by_statement_type OK
sys.version OK
sys.wait_classes_global_by_avg_latency OK
sys.wait_classes_global_by_latency OK
sys.waits_by_host_by_latency OK
sys.waits_by_user_by_latency OK
sys.waits_global_by_latency OK
sys.x$host_summary OK
sys.x$host_summary_by_file_io OK
sys.x$host_summary_by_file_io_type OK
sys.x$host_summary_by_stages OK
sys.x$host_summary_by_statement_latency OK
sys.x$host_summary_by_statement_type OK
sys.x$innodb_buffer_stats_by_schema OK
sys.x$innodb_buffer_stats_by_table OK
sys.x$innodb_lock_waits OK
sys.x$io_by_thread_by_latency OK
sys.x$io_global_by_file_by_bytes OK
sys.x$io_global_by_file_by_latency OK
sys.x$io_global_by_wait_by_bytes OK
sys.x$io_global_by_wait_by_latency OK
sys.x$latest_file_io OK
sys.x$memory_by_host_by_current_bytes OK
sys.x$memory_by_thread_by_current_bytes OK
sys.x$memory_by_user_by_current_bytes OK
sys.x$memory_global_by_current_bytes OK
sys.x$memory_global_total OK
sys.x$processlist OK
sys.x$ps_digest_95th_percentile_by_avg_us OK
sys.x$ps_digest_avg_latency_distribution OK
sys.x$ps_schema_table_statistics_io OK
sys.x$schema_flattened_keys OK
sys.x$schema_index_statistics OK
sys.x$schema_table_lock_waits OK
sys.x$schema_table_statistics OK
sys.x$schema_table_statistics_with_buffer OK
sys.x$schema_tables_with_full_table_scans OK
sys.x$session OK
sys.x$statement_analysis OK
sys.x$statements_with_errors_or_warnings OK
sys.x$statements_with_full_table_scans OK
sys.x$statements_with_runtimes_in_95th_percentile OK
sys.x$statements_with_sorting OK
sys.x$statements_with_temp_tables OK
sys.x$user_summary OK
sys.x$user_summary_by_file_io OK
sys.x$user_summary_by_file_io_type OK
sys.x$user_summary_by_stages OK
sys.x$user_summary_by_statement_latency OK
sys.x$user_summary_by_statement_type OK
sys.x$wait_classes_global_by_avg_latency OK
sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables'
Phase 5/7: Fixing table and database names
Phase 6/7: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
sys
sys.sys_config OK
test
test.t1 OK
test.t2 OK
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
table_catalog def table_catalog def
table_schema test table_schema test

View File

@@ -34,7 +34,7 @@ select table_catalog, table_schema, table_name, table_type, engine, row_format,
--echo # upgrade from 10.1 - engines aren't enabled --echo # upgrade from 10.1 - engines aren't enabled
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB / --replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
exec $MYSQL_UPGRADE 2>&1; exec $MYSQL_UPGRADE --silent 2>&1;
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
@@ -54,7 +54,7 @@ EOF
--echo # still upgrade from 10.1 --echo # still upgrade from 10.1
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB / --replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
exec $MYSQL_UPGRADE 2>&1; exec $MYSQL_UPGRADE --silent 2>&1;
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
@@ -68,13 +68,14 @@ remove_file $datadir/mysql_upgrade_info;
--echo # upgrade from 10.0 - engines are enabled --echo # upgrade from 10.0 - engines are enabled
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB / --replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
exec $MYSQL_UPGRADE 2>&1; exec $MYSQL_UPGRADE --silent 2>&1;
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2'; select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
drop table t1, t2; drop table t1, t2;
remove_file $datadir/mysql_upgrade_info; remove_file $datadir/mysql_upgrade_info;
# This is needed as mysql_upgrade can load the plugins
uninstall plugin blackhole; uninstall plugin blackhole;
uninstall plugin archive; uninstall plugin archive;

View File

@@ -1,7 +1,7 @@
# #
# Bug#55672 mysql_upgrade dies with internal error # Bug#55672 mysql_upgrade dies with internal error
# #
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -32,8 +32,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.transaction_registry OK mysql.transaction_registry OK
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -135,9 +136,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -147,5 +147,6 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK

View File

@@ -64,7 +64,7 @@ test.v2 check error Upgrade required. Please do "REPAIR VIEW `v2`" or dump/reloa
check view v3 for upgrade; check view v3 for upgrade;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.v3 check error Upgrade required. Please do "REPAIR VIEW `v3`" or dump/reload to fix it! test.v3 check error Upgrade required. Please do "REPAIR VIEW `v3`" or dump/reload to fix it!
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -112,8 +112,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -219,9 +220,8 @@ test.v1 OK
test.v1badcheck OK test.v1badcheck OK
test.v2 OK test.v2 OK
test.v3 OK test.v3 OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -233,7 +233,8 @@ sys.sys_config OK
test test
test.kv OK test.kv OK
test.t1 OK test.t1 OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
show create view v1; show create view v1;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
@@ -315,7 +316,7 @@ show create view v4;
View Create View character_set_client collation_connection View Create View character_set_client collation_connection
v4 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci v4 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci
MariaDB upgrade detected MariaDB upgrade detected
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -364,8 +365,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views from mysql Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views from mysql
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -471,9 +473,8 @@ test.v1 OK
test.v2 OK test.v2 OK
test.v3 OK test.v3 OK
test.v4 OK test.v4 OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -485,7 +486,8 @@ sys.sys_config OK
test test
test.kv OK test.kv OK
test.t1 OK test.t1 OK
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
flush tables; flush tables;
show create view v1; show create view v1;
@@ -542,7 +544,7 @@ rename table mysql.event to mysql.ev_bk;
flush tables; flush tables;
The --upgrade-system-tables option was used, user tables won't be touched. The --upgrade-system-tables option was used, user tables won't be touched.
MariaDB upgrade detected MariaDB upgrade detected
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -591,8 +593,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views from mysql Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views from mysql
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -697,10 +700,10 @@ sys.x$waits_global_by_latency OK
test.v1 OK test.v1 OK
test.v2 OK test.v2 OK
test.v3 OK test.v3 OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names ... Skipped
Phase 5/7: Fixing table and database names ... Skipped Phase 6/8: Checking and upgrading tables... Skipped
Phase 6/7: Checking and upgrading tables... Skipped Phase 7/8: uninstalling plugins
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
drop table mysql.event; drop table mysql.event;
rename table mysql.ev_bk to mysql.event; rename table mysql.ev_bk to mysql.event;

View File

@@ -84,7 +84,7 @@ GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'"; SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'";
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
# Run mysql_upgrade # Run mysql_upgrade
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -133,9 +133,12 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
mysql.user OK Phase 4/8: Fixing views
mysql.user
Warning : The user specified as a definer ('mariadb.sys'@'localhost') does not exist
status : OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK sys.host_summary_by_file_io_type OK
@@ -236,9 +239,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -252,7 +254,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# check new definitions mysql_upgrade # check new definitions mysql_upgrade
SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' and TABLE_SCHEMA = 'mysql' and TABLE_NAME='user' and DEFINER = 'root@localhost'; SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' and TABLE_SCHEMA = 'mysql' and TABLE_NAME='user' and DEFINER = 'root@localhost';

View File

@@ -104,7 +104,7 @@ GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'"; SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'";
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
# Run mysql_upgrade # Run mysql_upgrade
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -153,8 +153,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -256,9 +257,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -272,7 +272,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# check new definitions mysql_upgrade # check new definitions mysql_upgrade
SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def'
@@ -303,7 +304,7 @@ DROP USER 'superuser'@'localhost';
DROP VIEW mysql.user; DROP VIEW mysql.user;
DROP PROCEDURE AddGeometryColumn; DROP PROCEDURE AddGeometryColumn;
DROP PROCEDURE DropGeometryColumn; DROP PROCEDURE DropGeometryColumn;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -352,8 +353,12 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user
Warning : The user specified as a definer ('mariadb.sys'@'localhost') does not exist
status : OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK sys.host_summary_by_file_io_type OK
@@ -454,9 +459,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -470,7 +474,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
delete from global_priv; delete from global_priv;
delete from tables_priv; delete from tables_priv;

View File

@@ -88,7 +88,7 @@ GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'"; SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'";
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
# Run mysql_upgrade # Run mysql_upgrade
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -137,8 +137,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -240,9 +241,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -256,7 +256,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# check new definitions mysql_upgrade # check new definitions mysql_upgrade
SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def'
@@ -279,7 +280,7 @@ count(*)
# restore environment # restore environment
DROP USER 'superuser'@'localhost'; DROP USER 'superuser'@'localhost';
DROP VIEW mysql.user; DROP VIEW mysql.user;
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -328,8 +329,12 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user
Warning : The user specified as a definer ('mariadb.sys'@'localhost') does not exist
status : OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
sys.host_summary_by_file_io_type OK sys.host_summary_by_file_io_type OK
@@ -430,9 +435,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -446,7 +450,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
delete from global_priv; delete from global_priv;
delete from tables_priv; delete from tables_priv;

View File

@@ -34,7 +34,7 @@ count(*)
# #
# Run mysql_upgrade # Run mysql_upgrade
# #
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -83,8 +83,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -186,9 +187,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -198,7 +198,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
# #
# check new definers of Add/DropGeometryColumn # check new definers of Add/DropGeometryColumn

View File

@@ -49,7 +49,7 @@ password_expired
N N
drop user gigi@localhost; drop user gigi@localhost;
# Run mysql_upgrade # Run mysql_upgrade
Phase 1/7: Checking and upgrading mysql database Phase 1/8: Checking and upgrading mysql database
Processing databases Processing databases
mysql mysql
mysql.column_stats OK mysql.column_stats OK
@@ -97,8 +97,9 @@ error : Corrupt
mysql.transaction_registry mysql.transaction_registry
Error : Unknown storage engine 'InnoDB' Error : Unknown storage engine 'InnoDB'
error : Corrupt error : Corrupt
Phase 2/7: Installing used storage engines... Skipped Phase 2/8: Installing used storage engines... Skipped
Phase 3/7: Fixing views Phase 3/8: Running 'mysql_fix_privilege_tables'
Phase 4/8: Fixing views
mysql.user OK mysql.user OK
sys.host_summary OK sys.host_summary OK
sys.host_summary_by_file_io OK sys.host_summary_by_file_io OK
@@ -200,9 +201,8 @@ sys.x$wait_classes_global_by_latency OK
sys.x$waits_by_host_by_latency OK sys.x$waits_by_host_by_latency OK
sys.x$waits_by_user_by_latency OK sys.x$waits_by_user_by_latency OK
sys.x$waits_global_by_latency OK sys.x$waits_global_by_latency OK
Phase 4/7: Running 'mysql_fix_privilege_tables' Phase 5/8: Fixing table and database names
Phase 5/7: Fixing table and database names Phase 6/8: Checking and upgrading tables
Phase 6/7: Checking and upgrading tables
Processing databases Processing databases
information_schema information_schema
mtr mtr
@@ -212,7 +212,8 @@ performance_schema
sys sys
sys.sys_config OK sys.sys_config OK
test test
Phase 7/7: Running 'FLUSH PRIVILEGES' Phase 7/8: uninstalling plugins
Phase 8/8: Running 'FLUSH PRIVILEGES'
OK OK
create user gigi@localhost; create user gigi@localhost;
show create user gigi@localhost; show create user gigi@localhost;

View File

@@ -1793,7 +1793,7 @@ sub collect_mysqld_features {
sub collect_mysqld_features_from_running_server () sub collect_mysqld_features_from_running_server ()
{ {
my $mysql= mtr_exe_exists("$path_client_bindir/mysql"); my $mysql= mtr_exe_exists("$path_client_bindir/mariadb");
my $args; my $args;
mtr_init_args(\$args); mtr_init_args(\$args);

View File

@@ -134,3 +134,12 @@ t CREATE TABLE `t` (
FULLTEXT KEY `a` (`a`) FULLTEXT KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_520_ci ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_520_ci
DROP TABLE t; DROP TABLE t;
#
# MDEV-31416 ASAN errors in dict_v_col_t::detach upon
# adding key to virtual column
#
CREATE TABLE t (a INT) ENGINE=InnoDB WITH SYSTEM VERSIONING;
SET SYSTEM_VERSIONING_ALTER_HISTORY= KEEP;
ALTER TABLE t ADD COLUMN v VARCHAR(128) GENERATED ALWAYS AS (CRC32('MariaDB'));
ALTER TABLE t ADD INDEX (v);
DROP TABLE t;

View File

@@ -144,4 +144,13 @@ ALTER TABLE t MODIFY COLUMN a VARCHAR(512);
SHOW CREATE TABLE t; SHOW CREATE TABLE t;
DROP TABLE t; DROP TABLE t;
--echo #
--echo # MDEV-31416 ASAN errors in dict_v_col_t::detach upon
--echo # adding key to virtual column
--echo #
CREATE TABLE t (a INT) ENGINE=InnoDB WITH SYSTEM VERSIONING;
SET SYSTEM_VERSIONING_ALTER_HISTORY= KEEP;
ALTER TABLE t ADD COLUMN v VARCHAR(128) GENERATED ALWAYS AS (CRC32('MariaDB'));
ALTER TABLE t ADD INDEX (v);
DROP TABLE t;
--source include/wait_until_count_sessions.inc --source include/wait_until_count_sessions.inc

View File

@@ -0,0 +1,60 @@
include/master-slave.inc
[connection master]
connection slave;
set global slave_run_triggers_for_rbr=1;
connection master;
CREATE TABLE t1 (a int);
connection slave;
connection slave;
CREATE DATABASE db2;
CREATE FUNCTION db2.get_value(a INT) RETURNS int(2) RETURN 0;
#
# Test Insert_rows_log_event
connection slave;
CREATE TRIGGER tr_ins BEFORE INSERT ON t1 FOR EACH ROW BEGIN
DECLARE a INT;
SET a = db2.get_value(1);
END//
connection master;
INSERT INTO t1 VALUES (1);
connection slave;
connection slave;
DROP TRIGGER tr_ins;
#
# Test Update_rows_log_event
connection master;
INSERT INTO t1 VALUES (5);
connection slave;
connection slave;
CREATE TRIGGER tr_upd BEFORE UPDATE ON t1 FOR EACH ROW BEGIN
DECLARE a INT;
SET a = db2.get_value(1);
END//
connection master;
UPDATE t1 SET a=a+1 WHERE a=5;
connection slave;
connection slave;
DROP TRIGGER tr_upd;
#
# Test Delete_rows_log_event
connection master;
INSERT INTO t1 VALUES (7);
connection slave;
connection slave;
CREATE TRIGGER tr_del BEFORE DELETE ON t1 FOR EACH ROW BEGIN
DECLARE a INT;
SET a = db2.get_value(1);
END//
connection master;
DELETE FROM t1 WHERE a=7;
connection slave;
connection slave;
DROP TRIGGER tr_del;
#
# Cleanup
connection slave;
SET GLOBAL slave_run_triggers_for_rbr=NO;
DROP DATABASE db2;
connection master;
DROP TABLE t1;
include/rpl_end.inc

View File

@@ -0,0 +1,98 @@
#
# This test ensures that a table share's database name is not freed when
# using row based replication with triggers that open different databases
#
#
# References:
# MDEV-29894: Calling a function from a different database in a slave side
# trigger crashes
#
--source include/master-slave.inc
--source include/have_binlog_format_row.inc
--connection slave
--let $old_slave_run_triggers= `SELECT @@global.slave_run_triggers_for_rbr`
set global slave_run_triggers_for_rbr=1;
--connection master
CREATE TABLE t1 (a int);
--sync_slave_with_master
--connection slave
CREATE DATABASE db2;
CREATE FUNCTION db2.get_value(a INT) RETURNS int(2) RETURN 0;
--echo #
--echo # Test Insert_rows_log_event
--connection slave
DELIMITER //;
CREATE TRIGGER tr_ins BEFORE INSERT ON t1 FOR EACH ROW BEGIN
DECLARE a INT;
SET a = db2.get_value(1);
END//
DELIMITER ;//
--connection master
INSERT INTO t1 VALUES (1);
--sync_slave_with_master
--connection slave
DROP TRIGGER tr_ins;
--echo #
--echo # Test Update_rows_log_event
--connection master
--let $row_val=5
--eval INSERT INTO t1 VALUES ($row_val)
--sync_slave_with_master
--connection slave
DELIMITER //;
CREATE TRIGGER tr_upd BEFORE UPDATE ON t1 FOR EACH ROW BEGIN
DECLARE a INT;
SET a = db2.get_value(1);
END//
DELIMITER ;//
--connection master
--eval UPDATE t1 SET a=a+1 WHERE a=$row_val
--sync_slave_with_master
--connection slave
DROP TRIGGER tr_upd;
--echo #
--echo # Test Delete_rows_log_event
--connection master
--let $row_val=7
--eval INSERT INTO t1 VALUES ($row_val)
--sync_slave_with_master
--connection slave
DELIMITER //;
CREATE TRIGGER tr_del BEFORE DELETE ON t1 FOR EACH ROW BEGIN
DECLARE a INT;
SET a = db2.get_value(1);
END//
DELIMITER ;//
--connection master
--eval DELETE FROM t1 WHERE a=$row_val
--sync_slave_with_master
--connection slave
DROP TRIGGER tr_del;
--echo #
--echo # Cleanup
--connection slave
--eval SET GLOBAL slave_run_triggers_for_rbr=$old_slave_run_triggers
DROP DATABASE db2;
--connection master
DROP TABLE t1;
--source include/rpl_end.inc

View File

@@ -47,7 +47,7 @@ PREPARE stmt FROM @str;
EXECUTE stmt; EXECUTE stmt;
DROP PREPARE stmt; DROP PREPARE stmt;
SET @cmd= "CREATE DATABASE performance_schema character set utf8"; SET @cmd= "CREATE DATABASE performance_schema character set utf8mb3";
SET @str = IF(@broken_pfs = 0, @cmd, 'SET @dummy = 0'); SET @str = IF(@broken_pfs = 0, @cmd, 'SET @dummy = 0');
PREPARE stmt FROM @str; PREPARE stmt FROM @str;

View File

@@ -28,12 +28,12 @@ set system_versioning_alter_history=keep;
set @have_innodb= (select count(engine) from information_schema.engines where engine='INNODB' and support != 'NO'); set @have_innodb= (select count(engine) from information_schema.engines where engine='INNODB' and support != 'NO');
SET @innodb_or_aria=IF(@have_innodb <> 0, 'InnoDB', 'Aria'); SET @innodb_or_aria=IF(@have_innodb <> 0, 'InnoDB', 'Aria');
CREATE TABLE IF NOT EXISTS db ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Delete_history_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY /*Host */(Host,Db,User), KEY User (User) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges'; CREATE TABLE IF NOT EXISTS db ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, References_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Event_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY /*Host */(Host,Db,User), KEY User (User) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Database privileges';
-- Remember for later if db table already existed -- Remember for later if db table already existed
set @had_db_table= @@warning_count != 0; set @had_db_table= @@warning_count != 0;
CREATE TABLE IF NOT EXISTS global_priv (Host char(255) binary DEFAULT '', User char(128) binary DEFAULT '', Priv JSON NOT NULL DEFAULT '{}' CHECK(JSON_VALID(Priv)), PRIMARY KEY (Host,User)) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Users and global privileges'; CREATE TABLE IF NOT EXISTS global_priv (Host char(255) binary DEFAULT '', User char(128) binary DEFAULT '', Priv JSON NOT NULL DEFAULT '{}' CHECK(JSON_VALID(Priv)), PRIMARY KEY (Host,User)) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Users and global privileges';
set @exists_user_view= EXISTS (SELECT * FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' and TABLE_SCHEMA = 'mysql' and TABLE_NAME='user'); set @exists_user_view= EXISTS (SELECT * FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' and TABLE_SCHEMA = 'mysql' and TABLE_NAME='user');
@@ -46,7 +46,6 @@ INSERT INTO tmp_user_sys (Host,User,Priv) VALUES ('localhost','mariadb.sys','{"a
INSERT IGNORE INTO global_priv SELECT * FROM tmp_user_sys WHERE 0 <> @need_sys_user_creation; INSERT IGNORE INTO global_priv SELECT * FROM tmp_user_sys WHERE 0 <> @need_sys_user_creation;
DROP TABLE tmp_user_sys; DROP TABLE tmp_user_sys;
CREATE DEFINER='mariadb.sys'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS user AS SELECT CREATE DEFINER='mariadb.sys'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS user AS SELECT
Host, Host,
User, User,
@@ -100,61 +99,61 @@ CREATE DEFINER='mariadb.sys'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS
-- Remember for later if user table already existed -- Remember for later if user table already existed
set @had_user_table= @@warning_count != 0; set @had_user_table= @@warning_count != 0;
CREATE TABLE IF NOT EXISTS roles_mapping ( Host char(255) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Role char(128) binary DEFAULT '' NOT NULL, Admin_option enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, UNIQUE (Host, User, Role)) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Granted roles'; CREATE TABLE IF NOT EXISTS roles_mapping ( Host char(255) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Role char(128) binary DEFAULT '' NOT NULL, Admin_option enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, UNIQUE (Host, User, Role)) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Granted roles';
CREATE TABLE IF NOT EXISTS func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (name) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions'; CREATE TABLE IF NOT EXISTS func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8mb3_general_ci NOT NULL, PRIMARY KEY (name) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='User defined functions';
CREATE TABLE IF NOT EXISTS plugin ( name varchar(64) DEFAULT '' NOT NULL, dl varchar(128) DEFAULT '' NOT NULL, PRIMARY KEY (name) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_general_ci comment='MySQL plugins'; CREATE TABLE IF NOT EXISTS plugin ( name varchar(64) DEFAULT '' NOT NULL, dl varchar(128) DEFAULT '' NOT NULL, PRIMARY KEY (name) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci comment='MySQL plugins';
CREATE TABLE IF NOT EXISTS servers ( Server_name char(64) NOT NULL DEFAULT '', Host varchar(2048) NOT NULL DEFAULT '', Db char(64) NOT NULL DEFAULT '', Username char(128) NOT NULL DEFAULT '', Password char(64) NOT NULL DEFAULT '', Port INT(4) NOT NULL DEFAULT '0', Socket char(64) NOT NULL DEFAULT '', Wrapper char(64) NOT NULL DEFAULT '', Owner varchar(512) NOT NULL DEFAULT '', PRIMARY KEY (Server_name)) engine=Aria transactional=1 CHARACTER SET utf8 comment='MySQL Foreign Servers table'; CREATE TABLE IF NOT EXISTS servers ( Server_name char(64) NOT NULL DEFAULT '', Host varchar(2048) NOT NULL DEFAULT '', Db char(64) NOT NULL DEFAULT '', Username char(128) NOT NULL DEFAULT '', Password char(64) NOT NULL DEFAULT '', Port INT(4) NOT NULL DEFAULT '0', Socket char(64) NOT NULL DEFAULT '', Wrapper char(64) NOT NULL DEFAULT '', Owner varchar(512) NOT NULL DEFAULT '', PRIMARY KEY (Server_name)) engine=Aria transactional=1 CHARACTER SET utf8mb3 comment='MySQL Foreign Servers table';
CREATE TABLE IF NOT EXISTS tables_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger','Delete versioning rows') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges'; CREATE TABLE IF NOT EXISTS tables_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger','Delete versioning rows') COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Table privileges';
CREATE TEMPORARY TABLE tmp_user_sys LIKE tables_priv; CREATE TEMPORARY TABLE tmp_user_sys LIKE tables_priv;
INSERT INTO tmp_user_sys (Host,Db,User,Table_name,Grantor,Timestamp,Table_priv) VALUES ('localhost','mysql','mariadb.sys','global_priv','root@localhost','0','Select,Delete'); INSERT INTO tmp_user_sys (Host,Db,User,Table_name,Grantor,Timestamp,Table_priv) VALUES ('localhost','mysql','mariadb.sys','global_priv','root@localhost','0','Select,Delete');
INSERT IGNORE INTO tables_priv SELECT * FROM tmp_user_sys WHERE 0 <> @need_sys_user_creation; INSERT IGNORE INTO tables_priv SELECT * FROM tmp_user_sys WHERE 0 <> @need_sys_user_creation;
DROP TABLE tmp_user_sys; DROP TABLE tmp_user_sys;
CREATE TABLE IF NOT EXISTS columns_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges'; CREATE TABLE IF NOT EXISTS columns_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Column_priv set('Select','Insert','Update','References') COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Column privileges';
CREATE TABLE IF NOT EXISTS help_topic ( help_topic_id int unsigned not null, name char(64) not null, help_category_id smallint unsigned not null, description text not null, example text not null, url text not null, primary key (help_topic_id), unique index (name) ) engine=Aria transactional=0 CHARACTER SET utf8 comment='help topics'; CREATE TABLE IF NOT EXISTS help_topic ( help_topic_id int unsigned not null, name char(64) not null, help_category_id smallint unsigned not null, description text not null, example text not null, url text not null, primary key (help_topic_id), unique index (name) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 comment='help topics';
CREATE TABLE IF NOT EXISTS help_category ( help_category_id smallint unsigned not null, name char(64) not null, parent_category_id smallint unsigned null, url text not null, primary key (help_category_id), unique index (name) ) engine=Aria transactional=0 CHARACTER SET utf8 comment='help categories'; CREATE TABLE IF NOT EXISTS help_category ( help_category_id smallint unsigned not null, name char(64) not null, parent_category_id smallint unsigned null, url text not null, primary key (help_category_id), unique index (name) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 comment='help categories';
CREATE TABLE IF NOT EXISTS help_relation ( help_topic_id int unsigned not null references help_topic, help_keyword_id int unsigned not null references help_keyword, primary key (help_keyword_id, help_topic_id) ) engine=Aria transactional=0 CHARACTER SET utf8 comment='keyword-topic relation'; CREATE TABLE IF NOT EXISTS help_relation ( help_topic_id int unsigned not null references help_topic, help_keyword_id int unsigned not null references help_keyword, primary key (help_keyword_id, help_topic_id) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 comment='keyword-topic relation';
CREATE TABLE IF NOT EXISTS help_keyword ( help_keyword_id int unsigned not null, name char(64) not null, primary key (help_keyword_id), unique index (name) ) engine=Aria transactional=0 CHARACTER SET utf8 comment='help keywords'; CREATE TABLE IF NOT EXISTS help_keyword ( help_keyword_id int unsigned not null, name char(64) not null, primary key (help_keyword_id), unique index (name) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 comment='help keywords';
CREATE TABLE IF NOT EXISTS time_zone_name ( Name char(64) NOT NULL, Time_zone_id int unsigned NOT NULL, PRIMARY KEY /*Name*/ (Name) ) engine=Aria transactional=1 CHARACTER SET utf8 comment='Time zone names'; CREATE TABLE IF NOT EXISTS time_zone_name ( Name char(64) NOT NULL, Time_zone_id int unsigned NOT NULL, PRIMARY KEY /*Name*/ (Name) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 comment='Time zone names';
CREATE TABLE IF NOT EXISTS time_zone ( Time_zone_id int unsigned NOT NULL auto_increment, Use_leap_seconds enum('Y','N') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY /*TzId*/ (Time_zone_id) ) engine=Aria transactional=1 CHARACTER SET utf8 comment='Time zones'; CREATE TABLE IF NOT EXISTS time_zone ( Time_zone_id int unsigned NOT NULL auto_increment, Use_leap_seconds enum('Y','N') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY /*TzId*/ (Time_zone_id) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 comment='Time zones';
CREATE TABLE IF NOT EXISTS time_zone_transition ( Time_zone_id int unsigned NOT NULL, Transition_time bigint signed NOT NULL, Transition_type_id int unsigned NOT NULL, PRIMARY KEY /*TzIdTranTime*/ (Time_zone_id, Transition_time) ) engine=Aria transactional=1 CHARACTER SET utf8 comment='Time zone transitions'; CREATE TABLE IF NOT EXISTS time_zone_transition ( Time_zone_id int unsigned NOT NULL, Transition_time bigint signed NOT NULL, Transition_type_id int unsigned NOT NULL, PRIMARY KEY /*TzIdTranTime*/ (Time_zone_id, Transition_time) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 comment='Time zone transitions';
CREATE TABLE IF NOT EXISTS time_zone_transition_type ( Time_zone_id int unsigned NOT NULL, Transition_type_id int unsigned NOT NULL, `Offset` int signed DEFAULT 0 NOT NULL, Is_DST tinyint unsigned DEFAULT 0 NOT NULL, Abbreviation char(8) DEFAULT '' NOT NULL, PRIMARY KEY /*TzIdTrTId*/ (Time_zone_id, Transition_type_id) ) engine=Aria transactional=1 CHARACTER SET utf8 comment='Time zone transition types'; CREATE TABLE IF NOT EXISTS time_zone_transition_type ( Time_zone_id int unsigned NOT NULL, Transition_type_id int unsigned NOT NULL, `Offset` int signed DEFAULT 0 NOT NULL, Is_DST tinyint unsigned DEFAULT 0 NOT NULL, Abbreviation char(8) DEFAULT '' NOT NULL, PRIMARY KEY /*TzIdTrTId*/ (Time_zone_id, Transition_type_id) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 comment='Time zone transition types';
CREATE TABLE IF NOT EXISTS time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY /*TranTime*/ (Transition_time) ) engine=Aria transactional=1 CHARACTER SET utf8 comment='Leap seconds information for time zones'; CREATE TABLE IF NOT EXISTS time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY /*TranTime*/ (Transition_time) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 comment='Leap seconds information for time zones';
CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob NOT NULL, body longblob NOT NULL, definer varchar(384) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'IGNORE_BAD_TABLE_OPTIONS', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH', 'EMPTY_STRING_IS_NULL', 'SIMULTANEOUS_ASSIGNMENT', 'TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, aggregate enum('NONE', 'GROUP') DEFAULT 'NONE' NOT NULL, PRIMARY KEY (db,name,type)) engine=Aria transactional=1 character set utf8 comment='Stored Procedures'; CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8mb3_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob NOT NULL, body longblob NOT NULL, definer varchar(384) collate utf8mb3_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'IGNORE_BAD_TABLE_OPTIONS', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH', 'EMPTY_STRING_IS_NULL', 'SIMULTANEOUS_ASSIGNMENT', 'TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment text collate utf8mb3_bin NOT NULL, character_set_client char(32) collate utf8mb3_bin, collation_connection char(32) collate utf8mb3_bin, db_collation char(32) collate utf8mb3_bin, body_utf8 longblob, aggregate enum('NONE', 'GROUP') DEFAULT 'NONE' NOT NULL, PRIMARY KEY (db,name,type)) engine=Aria transactional=1 character set utf8mb3 comment='Stored Procedures';
CREATE TABLE IF NOT EXISTS procs_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Routine_name char(64) COLLATE utf8_general_ci DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges'; CREATE TABLE IF NOT EXISTS procs_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Routine_name char(64) COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Procedure privileges';
-- Create general_log if CSV is enabled. -- Create general_log if CSV is enabled.
SET @have_csv = (SELECT support FROM information_schema.engines WHERE engine = 'CSV'); SET @have_csv = (SELECT support FROM information_schema.engines WHERE engine = 'CSV');
SET @str = IF (@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_host MEDIUMTEXT NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL, server_id INTEGER UNSIGNED NOT NULL, command_type VARCHAR(64) NOT NULL, argument MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment="General log"', 'SET @dummy = 0'); SET @str = IF (@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_host MEDIUMTEXT NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL, server_id INTEGER UNSIGNED NOT NULL, command_type VARCHAR(64) NOT NULL, argument MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8mb3 comment="General log"', 'SET @dummy = 0');
PREPARE stmt FROM @str; PREPARE stmt FROM @str;
EXECUTE stmt; EXECUTE stmt;
@@ -162,13 +161,13 @@ DROP PREPARE stmt;
-- Create slow_log if CSV is enabled. -- Create slow_log if CSV is enabled.
SET @str = IF (@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_host MEDIUMTEXT NOT NULL, query_time TIME(6) NOT NULL, lock_time TIME(6) NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMTEXT NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL, rows_affected INTEGER NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0'); SET @str = IF (@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_host MEDIUMTEXT NOT NULL, query_time TIME(6) NOT NULL, lock_time TIME(6) NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMTEXT NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL, rows_affected INTEGER NOT NULL) engine=CSV CHARACTER SET utf8mb3 comment="Slow log"', 'SET @dummy = 0');
PREPARE stmt FROM @str; PREPARE stmt FROM @str;
EXECUTE stmt; EXECUTE stmt;
DROP PREPARE stmt; DROP PREPARE stmt;
CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer varchar(384) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) engine=Aria transactional=1 DEFAULT CHARSET=utf8 COMMENT 'Events'; CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL default '', name char(64) CHARACTER SET utf8mb3 NOT NULL default '', body longblob NOT NULL, definer varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8mb3_bin, collation_connection char(32) collate utf8mb3_bin, db_collation char(32) collate utf8mb3_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) engine=Aria transactional=1 DEFAULT CHARSET=utf8mb3 COMMENT 'Events';
SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats ( SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats (
database_name VARCHAR(64) NOT NULL, database_name VARCHAR(64) NOT NULL,
@@ -178,7 +177,7 @@ SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats (
clustered_index_size BIGINT UNSIGNED NOT NULL, clustered_index_size BIGINT UNSIGNED NOT NULL,
sum_of_other_index_sizes BIGINT UNSIGNED NOT NULL, sum_of_other_index_sizes BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (database_name, table_name) PRIMARY KEY (database_name, table_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"; ) ENGINE=INNODB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0";
SET @create_innodb_index_stats="CREATE TABLE IF NOT EXISTS innodb_index_stats ( SET @create_innodb_index_stats="CREATE TABLE IF NOT EXISTS innodb_index_stats (
database_name VARCHAR(64) NOT NULL, database_name VARCHAR(64) NOT NULL,
@@ -194,7 +193,7 @@ SET @create_innodb_index_stats="CREATE TABLE IF NOT EXISTS innodb_index_stats (
sample_size BIGINT UNSIGNED, sample_size BIGINT UNSIGNED,
stat_description VARCHAR(1024) NOT NULL, stat_description VARCHAR(1024) NOT NULL,
PRIMARY KEY (database_name, table_name, index_name, stat_name) PRIMARY KEY (database_name, table_name, index_name, stat_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"; ) ENGINE=INNODB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0";
SET @create_transaction_registry="CREATE TABLE IF NOT EXISTS transaction_registry ( SET @create_transaction_registry="CREATE TABLE IF NOT EXISTS transaction_registry (
transaction_id BIGINT UNSIGNED NOT NULL, transaction_id BIGINT UNSIGNED NOT NULL,
@@ -207,7 +206,7 @@ SET @create_transaction_registry="CREATE TABLE IF NOT EXISTS transaction_registr
UNIQUE KEY (commit_id), UNIQUE KEY (commit_id),
INDEX (begin_timestamp), INDEX (begin_timestamp),
INDEX (commit_timestamp, transaction_id) INDEX (commit_timestamp, transaction_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0"; ) ENGINE=INNODB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0";
SET @str=IF(@have_innodb <> 0, @create_innodb_table_stats, "SET @dummy = 0"); SET @str=IF(@have_innodb <> 0, @create_innodb_table_stats, "SET @dummy = 0");
PREPARE stmt FROM @str; PREPARE stmt FROM @str;
@@ -226,14 +225,14 @@ DROP PREPARE stmt;
SET @cmd="CREATE TABLE IF NOT EXISTS slave_relay_log_info ( SET @cmd="CREATE TABLE IF NOT EXISTS slave_relay_log_info (
Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.', Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
Relay_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.', Relay_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'The name of the current relay log file.',
Relay_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The relay log position of the last executed event.', Relay_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The relay log position of the last executed event.',
Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.', Master_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
Master_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The master log position of the last executed event.', Master_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The master log position of the last executed event.',
Sql_delay INTEGER NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.', Sql_delay INTEGER NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
Number_of_workers INTEGER UNSIGNED NOT NULL, Number_of_workers INTEGER UNSIGNED NOT NULL,
Id INTEGER UNSIGNED NOT NULL COMMENT 'Internal Id that uniquely identifies this record.', Id INTEGER UNSIGNED NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
PRIMARY KEY(Id)) DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT 'Relay Log Information'"; PRIMARY KEY(Id)) DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 COMMENT 'Relay Log Information'";
SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria); SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria);
-- Don't create the table; MariaDB will have another implementation -- Don't create the table; MariaDB will have another implementation
@@ -243,29 +242,29 @@ SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria);
SET @cmd= "CREATE TABLE IF NOT EXISTS slave_master_info ( SET @cmd= "CREATE TABLE IF NOT EXISTS slave_master_info (
Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file.', Number_of_lines INTEGER UNSIGNED NOT NULL COMMENT 'Number of lines in the file.',
Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.', Master_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
Master_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The master log position of the last read event.', Master_log_pos BIGINT UNSIGNED NOT NULL COMMENT 'The master log position of the last read event.',
Host CHAR(255) CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The host name of the master.', Host CHAR(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The host name of the master.',
User_name TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.', User_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The user name used to connect to the master.',
User_password TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.', User_password TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The password used to connect to the master.',
Port INTEGER UNSIGNED NOT NULL COMMENT 'The network port used to connect to the master.', Port INTEGER UNSIGNED NOT NULL COMMENT 'The network port used to connect to the master.',
Connect_retry INTEGER UNSIGNED NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.', Connect_retry INTEGER UNSIGNED NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
Enabled_ssl BOOLEAN NOT NULL COMMENT 'Indicates whether the server supports SSL connections.', Enabled_ssl BOOLEAN NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
Ssl_ca TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.', Ssl_ca TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
Ssl_capath TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.', Ssl_capath TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
Ssl_cert TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.', Ssl_cert TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The name of the SSL certificate file.',
Ssl_cipher TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.', Ssl_cipher TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The name of the cipher in use for the SSL connection.',
Ssl_key TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.', Ssl_key TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The name of the SSL key file.',
Ssl_verify_server_cert BOOLEAN NOT NULL COMMENT 'Whether to verify the server certificate.', Ssl_verify_server_cert BOOLEAN NOT NULL COMMENT 'Whether to verify the server certificate.',
Heartbeat FLOAT NOT NULL COMMENT '', Heartbeat FLOAT NOT NULL COMMENT '',
Bind TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server', Bind TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
Ignored_server_ids TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs', Ignored_server_ids TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
Uuid TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.', Uuid TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The master server uuid.',
Retry_count BIGINT UNSIGNED NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.', Retry_count BIGINT UNSIGNED NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
Ssl_crl TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)', Ssl_crl TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
Ssl_crlpath TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files', Ssl_crlpath TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
Enabled_auto_position BOOLEAN NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.', Enabled_auto_position BOOLEAN NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
PRIMARY KEY(Host, Port)) DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT 'Master Information'"; PRIMARY KEY(Host, Port)) DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 COMMENT 'Master Information'";
SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria); SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria);
-- Don't create the table; MariaDB will have another implementation -- Don't create the table; MariaDB will have another implementation
@@ -275,18 +274,18 @@ SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria);
SET @cmd= "CREATE TABLE IF NOT EXISTS slave_worker_info ( SET @cmd= "CREATE TABLE IF NOT EXISTS slave_worker_info (
Id INTEGER UNSIGNED NOT NULL, Id INTEGER UNSIGNED NOT NULL,
Relay_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Relay_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
Relay_log_pos BIGINT UNSIGNED NOT NULL, Relay_log_pos BIGINT UNSIGNED NOT NULL,
Master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Master_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
Master_log_pos BIGINT UNSIGNED NOT NULL, Master_log_pos BIGINT UNSIGNED NOT NULL,
Checkpoint_relay_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Checkpoint_relay_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
Checkpoint_relay_log_pos BIGINT UNSIGNED NOT NULL, Checkpoint_relay_log_pos BIGINT UNSIGNED NOT NULL,
Checkpoint_master_log_name TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, Checkpoint_master_log_name TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
Checkpoint_master_log_pos BIGINT UNSIGNED NOT NULL, Checkpoint_master_log_pos BIGINT UNSIGNED NOT NULL,
Checkpoint_seqno INT UNSIGNED NOT NULL, Checkpoint_seqno INT UNSIGNED NOT NULL,
Checkpoint_group_size INTEGER UNSIGNED NOT NULL, Checkpoint_group_size INTEGER UNSIGNED NOT NULL,
Checkpoint_group_bitmap BLOB NOT NULL, Checkpoint_group_bitmap BLOB NOT NULL,
PRIMARY KEY(Id)) DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT 'Worker Information'"; PRIMARY KEY(Id)) DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 COMMENT 'Worker Information'";
SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria); SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria);
-- Don't create the table; MariaDB will have another implementation -- Don't create the table; MariaDB will have another implementation
@@ -294,7 +293,7 @@ SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria);
#EXECUTE stmt; #EXECUTE stmt;
#DROP PREPARE stmt; #DROP PREPARE stmt;
CREATE TABLE IF NOT EXISTS proxies_priv (Host char(255) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Proxied_host char(255) binary DEFAULT '' NOT NULL, Proxied_user char(128) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY /*Host*/ (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges'; CREATE TABLE IF NOT EXISTS proxies_priv (Host char(255) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Proxied_host char(255) binary DEFAULT '' NOT NULL, Proxied_user char(128) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY /*Host*/ (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='User proxy privileges';
-- Remember for later if proxies_priv table already existed -- Remember for later if proxies_priv table already existed
set @had_proxies_priv_table= @@warning_count != 0; set @had_proxies_priv_table= @@warning_count != 0;
@@ -310,11 +309,11 @@ DROP TABLE tmp_proxies_priv;
-- Tables unique for MariaDB -- Tables unique for MariaDB
-- --
CREATE TABLE IF NOT EXISTS table_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, cardinality bigint(21) unsigned DEFAULT NULL, PRIMARY KEY (db_name,table_name) ) engine=Aria transactional=0 CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Tables'; CREATE TABLE IF NOT EXISTS table_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, cardinality bigint(21) unsigned DEFAULT NULL, PRIMARY KEY (db_name,table_name) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Statistics on Tables';
CREATE TABLE IF NOT EXISTS column_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, column_name varchar(64) NOT NULL, min_value varbinary(255) DEFAULT NULL, max_value varbinary(255) DEFAULT NULL, nulls_ratio decimal(12,4) DEFAULT NULL, avg_length decimal(12,4) DEFAULT NULL, avg_frequency decimal(12,4) DEFAULT NULL, hist_size tinyint unsigned, hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), histogram longblob, PRIMARY KEY (db_name,table_name,column_name) ) engine=Aria transactional=0 CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Columns'; CREATE TABLE IF NOT EXISTS column_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, column_name varchar(64) NOT NULL, min_value varbinary(255) DEFAULT NULL, max_value varbinary(255) DEFAULT NULL, nulls_ratio decimal(12,4) DEFAULT NULL, avg_length decimal(12,4) DEFAULT NULL, avg_frequency decimal(12,4) DEFAULT NULL, hist_size tinyint unsigned, hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), histogram longblob, PRIMARY KEY (db_name,table_name,column_name) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Statistics on Columns';
CREATE TABLE IF NOT EXISTS index_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, index_name varchar(64) NOT NULL, prefix_arity int(11) unsigned NOT NULL, avg_frequency decimal(12,4) DEFAULT NULL, PRIMARY KEY (db_name,table_name,index_name,prefix_arity) ) engine=Aria transactional=0 CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Indexes'; CREATE TABLE IF NOT EXISTS index_stats (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, index_name varchar(64) NOT NULL, prefix_arity int(11) unsigned NOT NULL, avg_frequency decimal(12,4) DEFAULT NULL, PRIMARY KEY (db_name,table_name,index_name,prefix_arity) ) engine=Aria transactional=0 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Statistics on Indexes';
-- Note: This definition must be kept in sync with the one used in -- Note: This definition must be kept in sync with the one used in
-- build_gtid_pos_create_query() in sql/slave.cc -- build_gtid_pos_create_query() in sql/slave.cc

View File

@@ -28,7 +28,6 @@ SELECT LOWER( REPLACE((SELECT REPLACE(@@hostname,'_','\_')),'%','\%') )INTO @cur
SELECT '{"access":18446744073709551615}' INTO @all_privileges; SELECT '{"access":18446744073709551615}' INTO @all_privileges;
SELECT '{"access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]}' into @all_with_auth; SELECT '{"access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]}' into @all_with_auth;
-- Fill "global_priv" table with default users allowing root access -- Fill "global_priv" table with default users allowing root access
-- from local machine if "global_priv" table didn't exist before -- from local machine if "global_priv" table didn't exist before
CREATE TEMPORARY TABLE tmp_user_nopasswd LIKE global_priv; CREATE TEMPORARY TABLE tmp_user_nopasswd LIKE global_priv;

View File

@@ -1,5 +1,5 @@
-- Copyright (C) 2003, 2013 Oracle and/or its affiliates. -- Copyright (C) 2003, 2013 Oracle and/or its affiliates.
-- Copyright (C) 2010, 2022, MariaDB Corporation -- Copyright (C) 2010, 2023, MariaDB Corporation
-- --
-- This program is free software; you can redistribute it and/or modify -- 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 -- it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
-- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA -- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
# This part converts any old privilege tables to privilege tables suitable # This part converts any old privilege tables to privilege tables suitable
# for current version of MySQL # for current version of MariaDB
# You can safely ignore all 'Duplicate column' and 'Unknown column' errors # You can safely ignore all 'Duplicate column' and 'Unknown column' errors
# because these just mean that your tables are already up to date. # because these just mean that your tables are already up to date.
@@ -28,6 +28,7 @@ set sql_mode='';
set default_storage_engine=Aria; set default_storage_engine=Aria;
set enforce_storage_engine=NULL; set enforce_storage_engine=NULL;
set alter_algorithm='DEFAULT'; set alter_algorithm='DEFAULT';
set use_stat_tables='NEVER';
-- --
@@ -80,20 +81,20 @@ ALTER TABLE help_keyword ENGINE=Aria transactional=0;
ALTER TABLE table_stats ENGINE=Aria transactional=0; ALTER TABLE table_stats ENGINE=Aria transactional=0;
ALTER TABLE index_stats ENGINE=Aria transactional=0; ALTER TABLE index_stats ENGINE=Aria transactional=0;
ALTER TABLE user add File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; ALTER TABLE user add File_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
# Detect whether or not we had the Grant_priv column # Detect whether or not we had the Grant_priv column
SET @hadGrantPriv:=0; SET @hadGrantPriv:=0;
SELECT @hadGrantPriv:=1 FROM user WHERE Grant_priv IS NOT NULL; SELECT @hadGrantPriv:=1 FROM user WHERE Grant_priv IS NOT NULL;
ALTER TABLE user add Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, ALTER TABLE user add Grant_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
add References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, add References_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
add Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, add Index_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
add Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; add Alter_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
ALTER TABLE db add Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, ALTER TABLE db add Grant_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
add References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, add References_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
add Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, add Index_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
add Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; add Alter_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
# Fix privileges for old tables # 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 user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
@@ -120,17 +121,17 @@ ALTER TABLE tables_priv
MODIFY Db char(64) NOT NULL default '', MODIFY Db char(64) NOT NULL default '',
MODIFY User char(128) binary NOT NULL default '', MODIFY User char(128) binary NOT NULL default '',
MODIFY Table_name char(64) NOT NULL default '', MODIFY Table_name char(64) NOT NULL default '',
MODIFY Grantor varchar(384) COLLATE utf8_bin NOT NULL default '', MODIFY Grantor varchar(384) COLLATE utf8mb3_bin NOT NULL default '',
ENGINE=Aria, ENGINE=Aria,
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;
ALTER TABLE tables_priv ALTER TABLE tables_priv
MODIFY Column_priv set('Select','Insert','Update','References') MODIFY Column_priv set('Select','Insert','Update','References')
COLLATE utf8_general_ci DEFAULT '' NOT NULL, COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL,
MODIFY Table_priv set('Select','Insert','Update','Delete','Create', MODIFY Table_priv set('Select','Insert','Update','Delete','Create',
'Drop','Grant','References','Index','Alter', 'Drop','Grant','References','Index','Alter',
'Create View','Show view','Trigger','Delete versioning rows') 'Create View','Show view','Trigger','Delete versioning rows')
COLLATE utf8_general_ci DEFAULT '' NOT NULL, COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL,
COMMENT='Table privileges'; COMMENT='Table privileges';
# #
@@ -141,7 +142,7 @@ ALTER TABLE tables_priv
# #
ALTER TABLE columns_priv ALTER TABLE columns_priv
CHANGE Type Column_priv set('Select','Insert','Update','References') CHANGE Type Column_priv set('Select','Insert','Update','References')
COLLATE utf8_general_ci DEFAULT '' NOT NULL; COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL;
ALTER TABLE columns_priv ALTER TABLE columns_priv
MODIFY Host char(255) NOT NULL default '', MODIFY Host char(255) NOT NULL default '',
@@ -150,18 +151,18 @@ ALTER TABLE columns_priv
MODIFY Table_name char(64) NOT NULL default '', MODIFY Table_name char(64) NOT NULL default '',
MODIFY Column_name char(64) NOT NULL default '', MODIFY Column_name char(64) NOT NULL default '',
ENGINE=Aria, ENGINE=Aria,
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin, CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin,
COMMENT='Column privileges'; COMMENT='Column privileges';
ALTER TABLE columns_priv ALTER TABLE columns_priv
MODIFY Column_priv set('Select','Insert','Update','References') MODIFY Column_priv set('Select','Insert','Update','References')
COLLATE utf8_general_ci DEFAULT '' NOT NULL; COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL;
# #
# Add the new 'type' column to the func table. # Add the new 'type' column to the func table.
# #
ALTER TABLE func add type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL; ALTER TABLE func add type enum ('function','aggregate') COLLATE utf8mb3_general_ci NOT NULL;
# #
# Change the user,db and host tables to current format # Change the user,db and host tables to current format
@@ -172,13 +173,13 @@ SET @hadShowDbPriv:=0;
SELECT @hadShowDbPriv:=1 FROM user WHERE Show_db_priv IS NOT NULL; SELECT @hadShowDbPriv:=1 FROM user WHERE Show_db_priv IS NOT NULL;
ALTER TABLE user ALTER TABLE user
ADD Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_priv, ADD Show_db_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_priv,
ADD Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_db_priv, ADD Super_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_db_priv,
ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Super_priv, ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Super_priv,
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_tmp_table_priv, ADD Lock_tables_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_tmp_table_priv,
ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv, ADD Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv,
ADD Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Execute_priv, ADD Repl_slave_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Execute_priv,
ADD Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_slave_priv; ADD Repl_client_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Repl_slave_priv;
# Convert privileges so that users have similar privileges as before # Convert privileges so that users have similar privileges as before
@@ -199,8 +200,8 @@ ADD max_connections int(11) unsigned NOT NULL DEFAULT 0 AFTER max_updates;
# #
ALTER TABLE db ALTER TABLE db
ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; ADD Lock_tables_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
alter table user change max_questions max_questions int(11) unsigned DEFAULT 0 NOT NULL; alter table user change max_questions max_questions int(11) unsigned DEFAULT 0 NOT NULL;
@@ -214,7 +215,7 @@ alter table func comment='User defined functions';
ALTER TABLE user ALTER TABLE user
MODIFY Host char(255) NOT NULL default '', MODIFY Host char(255) NOT NULL default '',
MODIFY User char(128) binary NOT NULL default '', MODIFY User char(128) binary NOT NULL default '',
ENGINE=Aria, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; ENGINE=Aria, CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;
# In MySQL 5.7.6 the Password column is removed. Recreate it to preserve the number # In MySQL 5.7.6 the Password column is removed. Recreate it to preserve the number
# of columns MariaDB expects in the user table. # of columns MariaDB expects in the user table.
@@ -231,53 +232,53 @@ DELETE FROM plugin
ALTER TABLE user ALTER TABLE user
MODIFY Password char(41) character set latin1 collate latin1_bin NOT NULL default '', MODIFY Password char(41) character set latin1 collate latin1_bin NOT NULL default '',
MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Select_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Insert_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Update_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Delete_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Create_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Drop_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Reload_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Shutdown_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Process_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY File_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Grant_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY References_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Index_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Alter_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Show_db_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Super_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Repl_slave_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Repl_client_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL; MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL;
ALTER TABLE db ALTER TABLE db
MODIFY Host char(255) NOT NULL default '', MODIFY Host char(255) NOT NULL default '',
MODIFY Db char(64) NOT NULL default '', MODIFY Db char(64) NOT NULL default '',
MODIFY User char(128) binary NOT NULL default '', MODIFY User char(128) binary NOT NULL default '',
ENGINE=Aria, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; ENGINE=Aria, CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;
ALTER TABLE db ALTER TABLE db
MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Select_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Insert_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Update_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Delete_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Create_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Drop_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Grant_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY References_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Index_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Alter_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL,
MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
ALTER TABLE func ALTER TABLE func
ENGINE=Aria, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; ENGINE=Aria, CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;
ALTER TABLE func ALTER TABLE func
MODIFY type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL; MODIFY type enum ('function','aggregate') COLLATE utf8mb3_general_ci NOT NULL;
# #
# Modify log tables. # Modify log tables.
@@ -316,9 +317,9 @@ ALTER TABLE slow_log
SET GLOBAL slow_query_log = @old_log_state; SET GLOBAL slow_query_log = @old_log_state;
ALTER TABLE plugin ALTER TABLE plugin
MODIFY name varchar(64) COLLATE utf8_general_ci NOT NULL DEFAULT '', MODIFY name varchar(64) COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
MODIFY dl varchar(128) COLLATE utf8_general_ci NOT NULL DEFAULT '', MODIFY dl varchar(128) COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci;
# #
# Detect whether we had Create_view_priv # Detect whether we had Create_view_priv
@@ -329,21 +330,21 @@ SELECT @hadCreateViewPriv:=1 FROM user WHERE Create_view_priv IS NOT NULL;
# #
# Create VIEWs privileges (v5.0) # Create VIEWs privileges (v5.0)
# #
ALTER TABLE db ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv; ALTER TABLE db ADD Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
ALTER TABLE db MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv; ALTER TABLE db MODIFY Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
ALTER TABLE user ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv; ALTER TABLE user ADD Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
ALTER TABLE user MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv; ALTER TABLE user MODIFY Create_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
# #
# Show VIEWs privileges (v5.0) # Show VIEWs privileges (v5.0)
# #
ALTER TABLE db ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv; ALTER TABLE db ADD Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
ALTER TABLE db MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv; ALTER TABLE db MODIFY Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
ALTER TABLE user ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv; ALTER TABLE user ADD Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
ALTER TABLE user MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv; ALTER TABLE user MODIFY Show_view_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
# #
# Assign create/show view privileges to people who have create provileges # Assign create/show view privileges to people who have create provileges
@@ -359,23 +360,23 @@ SELECT @hadCreateRoutinePriv:=1 FROM user WHERE Create_routine_priv IS NOT NULL;
# #
# Create PROCEDUREs privileges (v5.0) # Create PROCEDUREs privileges (v5.0)
# #
ALTER TABLE db ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv; ALTER TABLE db ADD Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
ALTER TABLE db MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv; ALTER TABLE db MODIFY Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
ALTER TABLE user ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv; ALTER TABLE user ADD Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
ALTER TABLE user MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv; ALTER TABLE user MODIFY Create_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
# #
# Alter PROCEDUREs privileges (v5.0) # Alter PROCEDUREs privileges (v5.0)
# #
ALTER TABLE db ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv; ALTER TABLE db ADD Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
ALTER TABLE db MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv; ALTER TABLE db MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
ALTER TABLE user ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv; ALTER TABLE user ADD Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
ALTER TABLE user MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv; ALTER TABLE user MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
ALTER TABLE db ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv; ALTER TABLE db ADD Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
ALTER TABLE db MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv; ALTER TABLE db MODIFY Execute_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
# #
# Assign create/alter routine privileges to people who have create privileges # Assign create/alter routine privileges to people who have create privileges
@@ -398,8 +399,8 @@ ALTER TABLE user MODIFY max_user_connections int(11) DEFAULT '0' NOT NULL AFTER
SET @hadCreateUserPriv:=0; SET @hadCreateUserPriv:=0;
SELECT @hadCreateUserPriv:=1 FROM user WHERE Create_user_priv IS NOT NULL; SELECT @hadCreateUserPriv:=1 FROM user WHERE Create_user_priv IS NOT NULL;
ALTER TABLE user ADD Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv; ALTER TABLE user ADD Create_user_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
ALTER TABLE user MODIFY Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv; ALTER TABLE user MODIFY Create_user_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y' UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y'
WHERE @hadCreateUserPriv = 0 AND WHERE @hadCreateUserPriv = 0 AND
(user.Grant_priv = 'Y' OR db.Grant_priv = 'Y'); (user.Grant_priv = 'Y' OR db.Grant_priv = 'Y');
@@ -410,19 +411,19 @@ UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y'
ALTER TABLE procs_priv ALTER TABLE procs_priv
ENGINE=Aria, ENGINE=Aria,
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;
ALTER TABLE procs_priv ALTER TABLE procs_priv
MODIFY Proc_priv set('Execute','Alter Routine','Grant') MODIFY Proc_priv set('Execute','Alter Routine','Grant')
COLLATE utf8_general_ci DEFAULT '' NOT NULL; COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL;
ALTER IGNORE TABLE procs_priv ALTER IGNORE TABLE procs_priv
MODIFY Routine_name char(64) MODIFY Routine_name char(64)
COLLATE utf8_general_ci DEFAULT '' NOT NULL; COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL;
ALTER TABLE procs_priv ALTER TABLE procs_priv
ADD Routine_type enum('FUNCTION','PROCEDURE') ADD Routine_type enum('FUNCTION','PROCEDURE')
COLLATE utf8_general_ci NOT NULL AFTER Routine_name; COLLATE utf8mb3_general_ci NOT NULL AFTER Routine_name;
ALTER TABLE procs_priv ALTER TABLE procs_priv
MODIFY Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER Proc_priv; MODIFY Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER Proc_priv;
@@ -479,20 +480,20 @@ ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
'SIMULTANEOUS_ASSIGNMENT', 'SIMULTANEOUS_ASSIGNMENT',
'TIME_ROUND_FRACTIONAL' 'TIME_ROUND_FRACTIONAL'
) DEFAULT '' NOT NULL, ) DEFAULT '' NOT NULL,
DEFAULT CHARACTER SET utf8; DEFAULT CHARACTER SET utf8mb3;
# Correct the character set and collation # Correct the character set and collation
# Reset some fields after the conversion # Reset some fields after the conversion
ALTER TABLE proc CONVERT TO CHARACTER SET utf8, ALTER TABLE proc CONVERT TO CHARACTER SET utf8mb3,
MODIFY db char(64) binary DEFAULT '' NOT NULL, MODIFY db char(64) binary DEFAULT '' NOT NULL,
MODIFY definer varchar(384) binary DEFAULT '' NOT NULL, MODIFY definer varchar(384) binary DEFAULT '' NOT NULL,
MODIFY comment text binary NOT NULL; MODIFY comment text binary NOT NULL;
ALTER TABLE proc ADD character_set_client ALTER TABLE proc ADD character_set_client
char(32) collate utf8_bin DEFAULT NULL char(32) collate utf8mb3_bin DEFAULT NULL
AFTER comment; AFTER comment;
ALTER TABLE proc MODIFY character_set_client ALTER TABLE proc MODIFY character_set_client
char(32) collate utf8_bin DEFAULT NULL; char(32) collate utf8mb3_bin DEFAULT NULL;
ALTER TABLE proc MODIFY type enum('FUNCTION', ALTER TABLE proc MODIFY type enum('FUNCTION',
'PROCEDURE', 'PROCEDURE',
@@ -514,10 +515,10 @@ UPDATE proc SET character_set_client = @@character_set_client
WHERE character_set_client IS NULL; WHERE character_set_client IS NULL;
ALTER TABLE proc ADD collation_connection ALTER TABLE proc ADD collation_connection
char(32) collate utf8_bin DEFAULT NULL char(32) collate utf8mb3_bin DEFAULT NULL
AFTER character_set_client; AFTER character_set_client;
ALTER TABLE proc MODIFY collation_connection ALTER TABLE proc MODIFY collation_connection
char(32) collate utf8_bin DEFAULT NULL; char(32) collate utf8mb3_bin DEFAULT NULL;
SELECT CASE WHEN COUNT(*) > 0 THEN SELECT CASE WHEN COUNT(*) > 0 THEN
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.") 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.")
@@ -529,10 +530,10 @@ UPDATE proc SET collation_connection = @@collation_connection
WHERE collation_connection IS NULL; WHERE collation_connection IS NULL;
ALTER TABLE proc ADD db_collation ALTER TABLE proc ADD db_collation
char(32) collate utf8_bin DEFAULT NULL char(32) collate utf8mb3_bin DEFAULT NULL
AFTER collation_connection; AFTER collation_connection;
ALTER TABLE proc MODIFY db_collation ALTER TABLE proc MODIFY db_collation
char(32) collate utf8_bin DEFAULT NULL; char(32) collate utf8mb3_bin DEFAULT NULL;
SELECT CASE WHEN COUNT(*) > 0 THEN SELECT CASE WHEN COUNT(*) > 0 THEN
CONCAT ("WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.") CONCAT ("WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.")
@@ -552,7 +553,7 @@ ALTER TABLE proc MODIFY body_utf8 longblob DEFAULT NULL;
# Change comment from char(64) to text # Change comment from char(64) to text
ALTER TABLE proc MODIFY comment ALTER TABLE proc MODIFY comment
text collate utf8_bin NOT NULL; text collate utf8mb3_bin NOT NULL;
# MDEV-7773: Stored Aggregate Functions # MDEV-7773: Stored Aggregate Functions
ALTER TABLE proc ADD aggregate enum('NONE', 'GROUP') DEFAULT 'NONE' NOT NULL ALTER TABLE proc ADD aggregate enum('NONE', 'GROUP') DEFAULT 'NONE' NOT NULL
@@ -569,13 +570,13 @@ UPDATE proc SET Definer = 'mariadb.sys@localhost' WHERE Definer = 'root@localhos
SET @hadEventPriv := 0; SET @hadEventPriv := 0;
SELECT @hadEventPriv :=1 FROM user WHERE Event_priv IS NOT NULL; SELECT @hadEventPriv :=1 FROM user WHERE Event_priv IS NOT NULL;
ALTER TABLE user ADD Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv; ALTER TABLE user ADD Event_priv enum('N','Y') character set utf8mb3 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
ALTER TABLE user MODIFY Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv; ALTER TABLE user MODIFY Event_priv enum('N','Y') character set utf8mb3 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
UPDATE user SET Event_priv=Super_priv WHERE @hadEventPriv = 0; UPDATE user SET Event_priv=Super_priv WHERE @hadEventPriv = 0;
ALTER TABLE db ADD Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL; ALTER TABLE db ADD Event_priv enum('N','Y') character set utf8mb3 DEFAULT 'N' NOT NULL;
ALTER TABLE db MODIFY Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL; ALTER TABLE db MODIFY Event_priv enum('N','Y') character set utf8mb3 DEFAULT 'N' NOT NULL;
# #
# EVENT table # EVENT table
@@ -621,7 +622,10 @@ ALTER TABLE event MODIFY sql_mode
'SIMULTANEOUS_ASSIGNMENT', 'SIMULTANEOUS_ASSIGNMENT',
'TIME_ROUND_FRACTIONAL' 'TIME_ROUND_FRACTIONAL'
) DEFAULT '' NOT NULL AFTER on_completion; ) DEFAULT '' NOT NULL AFTER on_completion;
ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8 NOT NULL default ''; ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8mb3 NOT NULL default '';
ALTER TABLE event MODIFY db CHAR(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '';
ALTER TABLE event MODIFY comment CHAR(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '';
ALTER TABLE event ADD COLUMN originator INT UNSIGNED NOT NULL AFTER comment; ALTER TABLE event ADD COLUMN originator INT UNSIGNED NOT NULL AFTER comment;
ALTER TABLE event MODIFY COLUMN originator INT UNSIGNED NOT NULL; ALTER TABLE event MODIFY COLUMN originator INT UNSIGNED NOT NULL;
@@ -632,28 +636,28 @@ ALTER TABLE event ADD COLUMN time_zone char(64) CHARACTER SET latin1
NOT NULL DEFAULT 'SYSTEM' AFTER originator; NOT NULL DEFAULT 'SYSTEM' AFTER originator;
ALTER TABLE event ADD character_set_client ALTER TABLE event ADD character_set_client
char(32) collate utf8_bin DEFAULT NULL char(32) collate utf8mb3_bin DEFAULT NULL
AFTER time_zone; AFTER time_zone;
ALTER TABLE event MODIFY character_set_client ALTER TABLE event MODIFY character_set_client
char(32) collate utf8_bin DEFAULT NULL; char(32) collate utf8mb3_bin DEFAULT NULL;
ALTER TABLE event ADD collation_connection ALTER TABLE event ADD collation_connection
char(32) collate utf8_bin DEFAULT NULL char(32) collate utf8mb3_bin DEFAULT NULL
AFTER character_set_client; AFTER character_set_client;
ALTER TABLE event MODIFY collation_connection ALTER TABLE event MODIFY collation_connection
char(32) collate utf8_bin DEFAULT NULL; char(32) collate utf8mb3_bin DEFAULT NULL;
ALTER TABLE event ADD db_collation ALTER TABLE event ADD db_collation
char(32) collate utf8_bin DEFAULT NULL char(32) collate utf8mb3_bin DEFAULT NULL
AFTER collation_connection; AFTER collation_connection;
ALTER TABLE event MODIFY db_collation ALTER TABLE event MODIFY db_collation
char(32) collate utf8_bin DEFAULT NULL; char(32) collate utf8mb3_bin DEFAULT NULL;
ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL
AFTER db_collation; AFTER db_collation;
ALTER TABLE event MODIFY body_utf8 longblob DEFAULT NULL; ALTER TABLE event MODIFY body_utf8 longblob DEFAULT NULL;
alter table event MODIFY definer varchar(384) collate utf8_bin NOT NULL DEFAULT ''; alter table event MODIFY definer varchar(384) collate utf8mb3_bin NOT NULL DEFAULT '';
# Enable event scheduler if the event table was not up to date before. # Enable event scheduler if the event table was not up to date before.
set global event_scheduler=original; set global event_scheduler=original;
@@ -665,11 +669,11 @@ set global event_scheduler=original;
SET @hadTriggerPriv := 0; SET @hadTriggerPriv := 0;
SELECT @hadTriggerPriv :=1 FROM user WHERE Trigger_priv IS NOT NULL; SELECT @hadTriggerPriv :=1 FROM user WHERE Trigger_priv IS NOT NULL;
ALTER TABLE user ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv; ALTER TABLE user ADD Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv;
ALTER TABLE user MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv; ALTER TABLE user MODIFY Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv;
ALTER TABLE db ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; ALTER TABLE db ADD Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
ALTER TABLE db MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; ALTER TABLE db MODIFY Trigger_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL;
UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0; UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
@@ -680,8 +684,8 @@ UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
SET @hadCreateTablespacePriv := 0; SET @hadCreateTablespacePriv := 0;
SELECT @hadCreateTablespacePriv :=1 FROM user WHERE Create_tablespace_priv IS NOT NULL; SELECT @hadCreateTablespacePriv :=1 FROM user WHERE Create_tablespace_priv IS NOT NULL;
ALTER TABLE user ADD Create_tablespace_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Trigger_priv; ALTER TABLE user ADD Create_tablespace_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Trigger_priv;
ALTER TABLE user MODIFY Create_tablespace_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Trigger_priv; ALTER TABLE user MODIFY Create_tablespace_priv enum('N','Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Trigger_priv;
UPDATE user SET Create_tablespace_priv = Super_priv WHERE @hadCreateTablespacePriv = 0; UPDATE user SET Create_tablespace_priv = Super_priv WHERE @hadCreateTablespacePriv = 0;
@@ -689,16 +693,16 @@ UPDATE user SET Create_tablespace_priv = Super_priv WHERE @hadCreateTablespacePr
# System versioning # System versioning
# #
ALTER TABLE user change Truncate_versioning_priv Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N'; ALTER TABLE user change Truncate_versioning_priv Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N';
ALTER TABLE db change Truncate_versioning_priv Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N'; ALTER TABLE db change Truncate_versioning_priv Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N';
SET @had_user_delete_history_priv := 0; SET @had_user_delete_history_priv := 0;
SELECT @had_user_delete_history_priv :=1 FROM user WHERE Delete_history_priv IS NOT NULL; SELECT @had_user_delete_history_priv :=1 FROM user WHERE Delete_history_priv IS NOT NULL;
ALTER TABLE user add Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N' after Create_tablespace_priv; ALTER TABLE user add Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N' after Create_tablespace_priv;
ALTER TABLE user modify Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N'; ALTER TABLE user modify Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N';
ALTER TABLE db add Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N' after Trigger_priv; ALTER TABLE db add Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N' after Trigger_priv;
ALTER TABLE db modify Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N'; ALTER TABLE db modify Delete_history_priv enum('N','Y') COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N';
UPDATE user SET Delete_history_priv = Super_priv WHERE @had_user_delete_history_priv = 0; UPDATE user SET Delete_history_priv = Super_priv WHERE @had_user_delete_history_priv = 0;
@@ -706,22 +710,22 @@ ALTER TABLE user ADD plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL AF
ADD authentication_string TEXT NOT NULL AFTER plugin; ADD authentication_string TEXT NOT NULL AFTER plugin;
ALTER TABLE user CHANGE auth_string authentication_string TEXT NOT NULL; ALTER TABLE user CHANGE auth_string authentication_string TEXT NOT NULL;
ALTER TABLE user ADD password_expired ENUM('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER authentication_string; ALTER TABLE user ADD password_expired ENUM('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER authentication_string;
ALTER TABLE user ADD password_last_changed timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL after password_expired; ALTER TABLE user ADD password_last_changed timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL after password_expired;
ALTER TABLE user ADD password_lifetime smallint unsigned DEFAULT NULL after password_last_changed; ALTER TABLE user ADD password_lifetime smallint unsigned DEFAULT NULL after password_last_changed;
ALTER TABLE user ADD account_locked enum('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL after password_lifetime; ALTER TABLE user ADD account_locked enum('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL after password_lifetime;
ALTER TABLE user ADD is_role enum('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER account_locked; ALTER TABLE user ADD is_role enum('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER account_locked;
ALTER TABLE user ADD default_role char(128) binary DEFAULT '' NOT NULL AFTER is_role; ALTER TABLE user ADD default_role char(128) binary DEFAULT '' NOT NULL AFTER is_role;
ALTER TABLE user ADD max_statement_time decimal(12,6) DEFAULT 0 NOT NULL AFTER default_role; ALTER TABLE user ADD max_statement_time decimal(12,6) DEFAULT 0 NOT NULL AFTER default_role;
-- Somewhere above, we ran ALTER TABLE user .... CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin. -- Somewhere above, we ran ALTER TABLE user .... CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin.
-- we want password_expired column to have collation utf8_general_ci. -- we want password_expired column to have collation utf8mb3_general_ci.
-- Order columns correctly that were not ordered until MDEV-23201 (ff8ffef3e1915d7a9caa07d9461cd8d47c4baf98) -- Order columns correctly that were not ordered until MDEV-23201 (ff8ffef3e1915d7a9caa07d9461cd8d47c4baf98)
ALTER TABLE user MODIFY plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL AFTER max_user_connections, ALTER TABLE user MODIFY plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL AFTER max_user_connections,
MODIFY authentication_string TEXT NOT NULL AFTER plugin, MODIFY authentication_string TEXT NOT NULL AFTER plugin,
MODIFY password_expired ENUM('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER authentication_string, MODIFY password_expired ENUM('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER authentication_string,
MODIFY is_role enum('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER password_expired, MODIFY is_role enum('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER password_expired,
MODIFY default_role char(80) binary DEFAULT '' NOT NULL AFTER is_role, MODIFY default_role char(80) binary DEFAULT '' NOT NULL AFTER is_role,
MODIFY max_statement_time decimal(12,6) DEFAULT 0 NOT NULL AFTER default_role, MODIFY max_statement_time decimal(12,6) DEFAULT 0 NOT NULL AFTER default_role,
-- MDEV-24122 formerly mysql5.7 users may have the following columns password_last_changed, -- MDEV-24122 formerly mysql5.7 users may have the following columns password_last_changed,
@@ -731,7 +735,7 @@ ALTER TABLE user MODIFY plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL
-- time until 10.4 added. -- time until 10.4 added.
MODIFY IF EXISTS password_last_changed timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER max_statement_time, MODIFY IF EXISTS password_last_changed timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER max_statement_time,
MODIFY IF EXISTS password_lifetime smallint unsigned DEFAULT NULL AFTER password_last_changed, MODIFY IF EXISTS password_lifetime smallint unsigned DEFAULT NULL AFTER password_last_changed,
MODIFY IF EXISTS account_locked enum('N', 'Y') CHARACTER SET utf8 DEFAULT 'N' NOT NULL after password_lifetime; MODIFY IF EXISTS account_locked enum('N', 'Y') CHARACTER SET utf8mb3 DEFAULT 'N' NOT NULL after password_lifetime;
-- Checking for any duplicate hostname and username combination are exists. -- Checking for any duplicate hostname and username combination are exists.
-- If exits we will throw error. -- If exits we will throw error.
@@ -769,13 +773,13 @@ alter table db modify User char(128) binary not null default
alter table tables_priv modify User char(128) binary not null default ''; alter table tables_priv modify User char(128) binary not null default '';
alter table columns_priv modify User char(128) binary not null default ''; alter table columns_priv modify User char(128) binary not null default '';
alter table procs_priv modify User char(128) binary not null default ''; alter table procs_priv modify User char(128) binary not null default '';
alter table proc modify definer varchar(384) collate utf8_bin not null default ''; alter table proc modify definer varchar(384) collate utf8mb3_bin not null default '';
alter table proxies_priv modify User char(128) COLLATE utf8_bin not null default ''; alter table proxies_priv modify User char(128) COLLATE utf8mb3_bin not null default '';
alter table proxies_priv modify Proxied_user char(128) COLLATE utf8_bin not null default ''; alter table proxies_priv modify Proxied_user char(128) COLLATE utf8mb3_bin not null default '';
alter table proxies_priv modify Grantor varchar(384) COLLATE utf8_bin not null default ''; alter table proxies_priv modify Grantor varchar(384) COLLATE utf8mb3_bin not null default '';
alter table servers modify Username char(128) not null default ''; alter table servers modify Username char(128) not null default '';
alter table procs_priv modify Grantor varchar(384) COLLATE utf8_bin not null default ''; alter table procs_priv modify Grantor varchar(384) COLLATE utf8mb3_bin not null default '';
alter table tables_priv modify Grantor varchar(384) COLLATE utf8_bin not null default ''; alter table tables_priv modify Grantor varchar(384) COLLATE utf8mb3_bin not null default '';
# Activate the new, possible modified privilege tables # Activate the new, possible modified privilege tables
# This should not be needed, but gives us some extra testing that the above # This should not be needed, but gives us some extra testing that the above
@@ -792,7 +796,7 @@ ALTER TABLE help_topic MODIFY url TEXT NOT NULL;
DELIMITER // DELIMITER //
IF 'BASE TABLE' = (select table_type from information_schema.tables where table_schema=database() and table_name='user') THEN IF 'BASE TABLE' = (select table_type from information_schema.tables where table_schema=database() and table_name='user') THEN
CREATE TABLE IF NOT EXISTS global_priv (Host char(255) binary DEFAULT '', User char(128) binary DEFAULT '', Priv JSON NOT NULL DEFAULT '{}' CHECK(JSON_VALID(Priv)), PRIMARY KEY Host (Host,User)) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Users and global privileges' CREATE TABLE IF NOT EXISTS global_priv (Host char(255) binary DEFAULT '', User char(128) binary DEFAULT '', Priv JSON NOT NULL DEFAULT '{}' CHECK(JSON_VALID(Priv)), PRIMARY KEY Host (Host,User)) engine=Aria transactional=1 CHARACTER SET utf8mb3 COLLATE utf8mb3_bin comment='Users and global privileges'
SELECT Host, User, JSON_COMPACT(JSON_OBJECT('access', SELECT Host, User, JSON_COMPACT(JSON_OBJECT('access',
1*('Y'=Select_priv)+ 1*('Y'=Select_priv)+
2*('Y'=Insert_priv)+ 2*('Y'=Insert_priv)+

View File

@@ -43,12 +43,12 @@ const TABLE_FIELD_TYPE event_table_fields[ET_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("db") }, { STRING_WITH_LEN("db") },
{ STRING_WITH_LEN("char(64)") }, { STRING_WITH_LEN("char(64)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("name") }, { STRING_WITH_LEN("name") },
{ STRING_WITH_LEN("char(64)") }, { STRING_WITH_LEN("char(64)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("body") }, { STRING_WITH_LEN("body") },
@@ -58,7 +58,7 @@ const TABLE_FIELD_TYPE event_table_fields[ET_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("definer") }, { STRING_WITH_LEN("definer") },
{ STRING_WITH_LEN("varchar(") }, { STRING_WITH_LEN("varchar(") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("execute_at") }, { STRING_WITH_LEN("execute_at") },
@@ -131,7 +131,7 @@ const TABLE_FIELD_TYPE event_table_fields[ET_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("comment") }, { STRING_WITH_LEN("comment") },
{ STRING_WITH_LEN("char(64)") }, { STRING_WITH_LEN("char(64)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("originator") }, { STRING_WITH_LEN("originator") },
@@ -146,17 +146,17 @@ const TABLE_FIELD_TYPE event_table_fields[ET_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("character_set_client") }, { STRING_WITH_LEN("character_set_client") },
{ STRING_WITH_LEN("char(32)") }, { STRING_WITH_LEN("char(32)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("collation_connection") }, { STRING_WITH_LEN("collation_connection") },
{ STRING_WITH_LEN("char(32)") }, { STRING_WITH_LEN("char(32)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("db_collation") }, { STRING_WITH_LEN("db_collation") },
{ STRING_WITH_LEN("char(32)") }, { STRING_WITH_LEN("char(32)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("body_utf8") }, { STRING_WITH_LEN("body_utf8") },

View File

@@ -3116,14 +3116,15 @@ error:
@param name Name of table file (without extension) @param name Name of table file (without extension)
@return Operation status @return Operation status
@retval true Failure @retval 0 success
@retval false Success @retval 1 no par file
@retval # other error
@note On success, m_file_buffer is allocated and must be @note On success, m_file_buffer is allocated and must be
freed by the caller. m_name_buffer_ptr and m_tot_parts is also set. freed by the caller. m_name_buffer_ptr and m_tot_parts is also set.
*/ */
bool ha_partition::read_par_file(const char *name) int ha_partition::read_par_file(const char *name)
{ {
char buff[FN_REFLEN]; char buff[FN_REFLEN];
uchar *tot_name_len_offset; uchar *tot_name_len_offset;
@@ -3134,13 +3135,13 @@ bool ha_partition::read_par_file(const char *name)
DBUG_PRINT("enter", ("table name: '%s'", name)); DBUG_PRINT("enter", ("table name: '%s'", name));
if (m_file_buffer) if (m_file_buffer)
DBUG_RETURN(false); DBUG_RETURN(0);
fn_format(buff, name, "", ha_par_ext, MY_APPEND_EXT); fn_format(buff, name, "", ha_par_ext, MY_APPEND_EXT);
/* Following could be done with mysql_file_stat to read in whole file */ /* Following could be done with mysql_file_stat to read in whole file */
if ((file= mysql_file_open(key_file_ha_partition_par, if ((file= mysql_file_open(key_file_ha_partition_par,
buff, O_RDONLY | O_SHARE, MYF(0))) < 0) buff, O_RDONLY | O_SHARE, MYF(0))) < 0)
DBUG_RETURN(TRUE); DBUG_RETURN(1);
if (mysql_file_read(file, (uchar *) &buff[0], PAR_WORD_SIZE, MYF(MY_NABP))) if (mysql_file_read(file, (uchar *) &buff[0], PAR_WORD_SIZE, MYF(MY_NABP)))
goto err1; goto err1;
len_words= uint4korr(buff); len_words= uint4korr(buff);
@@ -3201,12 +3202,12 @@ bool ha_partition::read_par_file(const char *name)
} }
(void) mysql_file_close(file, MYF(0)); (void) mysql_file_close(file, MYF(0));
DBUG_RETURN(false); DBUG_RETURN(0);
err2: err2:
err1: err1:
(void) mysql_file_close(file, MYF(0)); (void) mysql_file_close(file, MYF(0));
DBUG_RETURN(true); DBUG_RETURN(2);
} }
@@ -3364,14 +3365,20 @@ err:
bool ha_partition::get_from_handler_file(const char *name, MEM_ROOT *mem_root, bool ha_partition::get_from_handler_file(const char *name, MEM_ROOT *mem_root,
bool is_clone) bool is_clone)
{ {
int error;
DBUG_ENTER("ha_partition::get_from_handler_file"); DBUG_ENTER("ha_partition::get_from_handler_file");
DBUG_PRINT("enter", ("table name: '%s'", name)); DBUG_PRINT("enter", ("table name: '%s'", name));
if (m_file_buffer) if (m_file_buffer)
DBUG_RETURN(false); DBUG_RETURN(false);
if (read_par_file(name)) if ((error= read_par_file(name)))
DBUG_RETURN(true); {
if (error != 1 || is_clone || re_create_par_file(name))
DBUG_RETURN(true);
if (read_par_file(name)) // Test file
DBUG_RETURN(true);
}
handlerton *default_engine= get_def_part_engine(name); handlerton *default_engine= get_def_part_engine(name);
if (!default_engine) if (!default_engine)
@@ -3384,6 +3391,78 @@ bool ha_partition::get_from_handler_file(const char *name, MEM_ROOT *mem_root,
} }
/*
Create .par file from SQL syntax.
This is only used with partitioned tables from MySQL 5.6 or 5.7
which do not have a .par file.
*/
bool ha_partition::re_create_par_file(const char *name)
{
THD *thd= current_thd;
TABLE table;
TABLE_SHARE *share= table_share;
Query_arena *backup_stmt_arena_ptr= thd->stmt_arena;
Query_arena backup_arena;
uint8 save_context_analysis_only= thd->lex->context_analysis_only;
bool work_part_info_used;
bool tmp;
DBUG_ENTER("ha_partition:re_create_par_file");
/* Share can be NULL in case of delete of non existing table */
if (!share ||
!(share->mysql_version >= 50600 && share->mysql_version <= 50799))
DBUG_RETURN(1);
bzero((char*) &table, sizeof(table));
table.in_use= thd;
table.s= share;
table.file= this;
init_sql_alloc(key_memory_TABLE, &table.mem_root, TABLE_ALLOC_BLOCK_SIZE,
0, MYF(0));
Query_arena part_func_arena(&table.mem_root,
Query_arena::STMT_INITIALIZED);
thd->set_n_backup_active_arena(&part_func_arena, &backup_arena);
thd->stmt_arena= &part_func_arena;
tmp= mysql_unpack_partition(thd, share->partition_info_str,
share->partition_info_str_len,
&table, 0,
plugin_hton(share->default_part_plugin),
&work_part_info_used);
if (!tmp && m_part_info->partitions.elements == 0)
{
tmp= m_part_info->set_up_defaults_for_partitioning(thd, this,
(HA_CREATE_INFO*) 0,
0);
if (m_part_info->partitions.elements == 0)
{
/* We did not succed in creating default partitions */
tmp= 1;
}
}
thd->stmt_arena= backup_stmt_arena_ptr;
thd->restore_active_arena(&part_func_arena, &backup_arena);
if (!tmp)
{
tmp= create_handler_file(name);
}
if (table.part_info)
free_items(table.part_info->item_free_list);
thd->lex->context_analysis_only= save_context_analysis_only;
if (table.expr_arena)
table.expr_arena->free_items();
free_root(&table.mem_root, MYF(0));
DBUG_RETURN(tmp);
}
/**************************************************************************** /****************************************************************************
MODULE open/close object MODULE open/close object
****************************************************************************/ ****************************************************************************/

View File

@@ -591,10 +591,11 @@ private:
*/ */
bool create_handler_file(const char *name); bool create_handler_file(const char *name);
bool setup_engine_array(MEM_ROOT *mem_root, handlerton *first_engine); bool setup_engine_array(MEM_ROOT *mem_root, handlerton *first_engine);
bool read_par_file(const char *name); int read_par_file(const char *name);
handlerton *get_def_part_engine(const char *name); handlerton *get_def_part_engine(const char *name);
bool get_from_handler_file(const char *name, MEM_ROOT *mem_root, bool get_from_handler_file(const char *name, MEM_ROOT *mem_root,
bool is_clone); bool is_clone);
bool re_create_par_file(const char *name);
bool new_handlers_from_part_info(MEM_ROOT *mem_root); bool new_handlers_from_part_info(MEM_ROOT *mem_root);
bool create_handlers(MEM_ROOT *mem_root); bool create_handlers(MEM_ROOT *mem_root);
void clear_handler_file(); void clear_handler_file();

View File

@@ -4812,8 +4812,12 @@ static bool update_frm_version(TABLE *table)
by server with the same version. This also ensures that we do not by server with the same version. This also ensures that we do not
update frm version for temporary tables as this code doesn't support update frm version for temporary tables as this code doesn't support
temporary tables. temporary tables.
keep_original_mysql_version is set if the table version cannot be
changed without rewriting the frm file.
*/ */
if (table->s->mysql_version == MYSQL_VERSION_ID) if (table->s->mysql_version == MYSQL_VERSION_ID ||
table->s->keep_original_mysql_version)
DBUG_RETURN(0); DBUG_RETURN(0);
strxmov(path, table->s->normalized_path.str, reg_ext, NullS); strxmov(path, table->s->normalized_path.str, reg_ext, NullS);

View File

@@ -5254,6 +5254,51 @@ protected:
uint m_key_nr; /* Key number */ uint m_key_nr; /* Key number */
bool master_had_triggers; /* set after tables opening */ bool master_had_triggers; /* set after tables opening */
/*
RAII helper class to automatically handle the override/restore of thd->db
when applying row events, so it will be visible in SHOW PROCESSLIST.
If triggers will be invoked, their logic frees the current thread's db,
so we use set_db() to use a copy of the table share's database.
If not using triggers, the db is never freed, and we can reference the
same memory owned by the table share.
*/
class Db_restore_ctx
{
private:
THD *thd;
LEX_CSTRING restore_db;
bool db_copied;
Db_restore_ctx(Rows_log_event *rev)
: thd(rev->thd), restore_db(rev->thd->db)
{
TABLE *table= rev->m_table;
if (table->triggers && rev->do_invoke_trigger())
{
thd->reset_db(&null_clex_str);
thd->set_db(&table->s->db);
db_copied= true;
}
else
{
thd->reset_db(&table->s->db);
db_copied= false;
}
}
~Db_restore_ctx()
{
if (db_copied)
thd->set_db(&null_clex_str);
thd->reset_db(&restore_db);
}
friend class Rows_log_event;
};
int find_key(); // Find a best key to use in find_row() int find_key(); // Find a best key to use in find_row()
int find_row(rpl_group_info *); int find_row(rpl_group_info *);
int write_row(rpl_group_info *, const bool); int write_row(rpl_group_info *, const bool);

View File

@@ -6026,6 +6026,7 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
" (master had triggers)" : "")); " (master had triggers)" : ""));
if (table) if (table)
{ {
Rows_log_event::Db_restore_ctx restore_ctx(this);
master_had_triggers= table->master_had_triggers; master_had_triggers= table->master_had_triggers;
bool transactional_table= table->file->has_transactions_and_rollback(); bool transactional_table= table->file->has_transactions_and_rollback();
table->file->prepare_for_insert(get_general_type_code() != WRITE_ROWS_EVENT); table->file->prepare_for_insert(get_general_type_code() != WRITE_ROWS_EVENT);
@@ -7941,7 +7942,6 @@ Write_rows_log_event::do_exec_row(rpl_group_info *rgi)
{ {
DBUG_ASSERT(m_table != NULL); DBUG_ASSERT(m_table != NULL);
const char *tmp= thd->get_proc_info(); const char *tmp= thd->get_proc_info();
LEX_CSTRING tmp_db= thd->db;
char *message, msg[128]; char *message, msg[128];
const LEX_CSTRING &table_name= m_table->s->table_name; const LEX_CSTRING &table_name= m_table->s->table_name;
const char quote_char= const char quote_char=
@@ -7949,7 +7949,6 @@ Write_rows_log_event::do_exec_row(rpl_group_info *rgi)
my_snprintf(msg, sizeof msg, my_snprintf(msg, sizeof msg,
"Write_rows_log_event::write_row() on table %c%.*s%c", "Write_rows_log_event::write_row() on table %c%.*s%c",
quote_char, int(table_name.length), table_name.str, quote_char); quote_char, int(table_name.length), table_name.str, quote_char);
thd->reset_db(&m_table->s->db);
message= msg; message= msg;
int error; int error;
@@ -7971,7 +7970,6 @@ Write_rows_log_event::do_exec_row(rpl_group_info *rgi)
my_error(ER_UNKNOWN_ERROR, MYF(0)); my_error(ER_UNKNOWN_ERROR, MYF(0));
} }
thd->reset_db(&tmp_db);
return error; return error;
} }
@@ -8577,7 +8575,6 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi)
{ {
int error; int error;
const char *tmp= thd->get_proc_info(); const char *tmp= thd->get_proc_info();
LEX_CSTRING tmp_db= thd->db;
char *message, msg[128]; char *message, msg[128];
const LEX_CSTRING &table_name= m_table->s->table_name; const LEX_CSTRING &table_name= m_table->s->table_name;
const char quote_char= const char quote_char=
@@ -8585,7 +8582,6 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi)
my_snprintf(msg, sizeof msg, my_snprintf(msg, sizeof msg,
"Delete_rows_log_event::find_row() on table %c%.*s%c", "Delete_rows_log_event::find_row() on table %c%.*s%c",
quote_char, int(table_name.length), table_name.str, quote_char); quote_char, int(table_name.length), table_name.str, quote_char);
thd->reset_db(&m_table->s->db);
message= msg; message= msg;
const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); const bool invoke_triggers= (m_table->triggers && do_invoke_trigger());
DBUG_ASSERT(m_table != NULL); DBUG_ASSERT(m_table != NULL);
@@ -8645,7 +8641,6 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi)
error= HA_ERR_GENERIC; // in case if error is not set yet error= HA_ERR_GENERIC; // in case if error is not set yet
m_table->file->ha_index_or_rnd_end(); m_table->file->ha_index_or_rnd_end();
} }
thd->reset_db(&tmp_db);
thd_proc_info(thd, tmp); thd_proc_info(thd, tmp);
return error; return error;
} }
@@ -8745,7 +8740,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); const bool invoke_triggers= (m_table->triggers && do_invoke_trigger());
const char *tmp= thd->get_proc_info(); const char *tmp= thd->get_proc_info();
DBUG_ASSERT(m_table != NULL); DBUG_ASSERT(m_table != NULL);
LEX_CSTRING tmp_db= thd->db;
char *message, msg[128]; char *message, msg[128];
const LEX_CSTRING &table_name= m_table->s->table_name; const LEX_CSTRING &table_name= m_table->s->table_name;
const char quote_char= const char quote_char=
@@ -8753,7 +8747,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
my_snprintf(msg, sizeof msg, my_snprintf(msg, sizeof msg,
"Update_rows_log_event::find_row() on table %c%.*s%c", "Update_rows_log_event::find_row() on table %c%.*s%c",
quote_char, int(table_name.length), table_name.str, quote_char); quote_char, int(table_name.length), table_name.str, quote_char);
thd->reset_db(&m_table->s->db);
message= msg; message= msg;
#ifdef WSREP_PROC_INFO #ifdef WSREP_PROC_INFO
@@ -8782,7 +8775,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
if ((m_curr_row= m_curr_row_end)) if ((m_curr_row= m_curr_row_end))
unpack_current_row(rgi, &m_cols_ai); unpack_current_row(rgi, &m_cols_ai);
thd_proc_info(thd, tmp); thd_proc_info(thd, tmp);
thd->reset_db(&tmp_db);
return error; return error;
} }
@@ -8871,7 +8863,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
err: err:
thd_proc_info(thd, tmp); thd_proc_info(thd, tmp);
thd->reset_db(&tmp_db);
m_table->file->ha_index_or_rnd_end(); m_table->file->ha_index_or_rnd_end();
return error; return error;
} }

View File

@@ -2008,6 +2008,9 @@ bool DsMrr_impl::get_disk_sweep_mrr_cost(uint keynr, ha_rows rows, uint flags,
/* Total cost of all index accesses */ /* Total cost of all index accesses */
index_read_cost= primary_file->keyread_time(keynr, 1, rows); index_read_cost= primary_file->keyread_time(keynr, 1, rows);
cost->add_io(index_read_cost, 1 /* Random seeks */); cost->add_io(index_read_cost, 1 /* Random seeks */);
cost->cpu_cost+= (rows2double(rows) / TIME_FOR_COMPARE +
MULTI_RANGE_READ_SETUP_COST);
return FALSE; return FALSE;
} }

View File

@@ -122,12 +122,12 @@ TABLE_FIELD_TYPE proc_table_fields[MYSQL_PROC_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("db") }, { STRING_WITH_LEN("db") },
{ STRING_WITH_LEN("char(64)") }, { STRING_WITH_LEN("char(64)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("name") }, { STRING_WITH_LEN("name") },
{ STRING_WITH_LEN("char(64)") }, { STRING_WITH_LEN("char(64)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("type") }, { STRING_WITH_LEN("type") },
@@ -137,7 +137,7 @@ TABLE_FIELD_TYPE proc_table_fields[MYSQL_PROC_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("specific_name") }, { STRING_WITH_LEN("specific_name") },
{ STRING_WITH_LEN("char(64)") }, { STRING_WITH_LEN("char(64)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("language") }, { STRING_WITH_LEN("language") },
@@ -178,7 +178,7 @@ TABLE_FIELD_TYPE proc_table_fields[MYSQL_PROC_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("definer") }, { STRING_WITH_LEN("definer") },
{ STRING_WITH_LEN("varchar(") }, { STRING_WITH_LEN("varchar(") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("created") }, { STRING_WITH_LEN("created") },
@@ -208,22 +208,22 @@ TABLE_FIELD_TYPE proc_table_fields[MYSQL_PROC_FIELD_COUNT] =
{ {
{ STRING_WITH_LEN("comment") }, { STRING_WITH_LEN("comment") },
{ STRING_WITH_LEN("text") }, { STRING_WITH_LEN("text") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("character_set_client") }, { STRING_WITH_LEN("character_set_client") },
{ STRING_WITH_LEN("char(32)") }, { STRING_WITH_LEN("char(32)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("collation_connection") }, { STRING_WITH_LEN("collation_connection") },
{ STRING_WITH_LEN("char(32)") }, { STRING_WITH_LEN("char(32)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("db_collation") }, { STRING_WITH_LEN("db_collation") },
{ STRING_WITH_LEN("char(32)") }, { STRING_WITH_LEN("char(32)") },
{ STRING_WITH_LEN("utf8mb3") } { STRING_WITH_LEN("utf8mb") }
}, },
{ {
{ STRING_WITH_LEN("body_utf8") }, { STRING_WITH_LEN("body_utf8") },

View File

@@ -6315,6 +6315,11 @@ static bool __attribute__ ((noinline))
execute_show_status(THD *thd, TABLE_LIST *all_tables) execute_show_status(THD *thd, TABLE_LIST *all_tables)
{ {
bool res; bool res;
#if defined(__GNUC__) && (__GNUC__ >= 13)
#pragma GCC diagnostic ignored "-Wdangling-pointer"
#endif
system_status_var old_status_var= thd->status_var; system_status_var old_status_var= thd->status_var;
thd->initial_status_var= &old_status_var; thd->initial_status_var= &old_status_var;
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);

View File

@@ -193,7 +193,7 @@
/* The rest of the file is included in the server only */ /* The rest of the file is included in the server only */
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
/* @@optimizer_switch flags. These must be in sync with optimizer_switch_typelib */ /* @@optimizer_switch flags. These must be in sync with optimizer_switch_names */
#define OPTIMIZER_SWITCH_INDEX_MERGE (1ULL << 0) #define OPTIMIZER_SWITCH_INDEX_MERGE (1ULL << 0)
#define OPTIMIZER_SWITCH_INDEX_MERGE_UNION (1ULL << 1) #define OPTIMIZER_SWITCH_INDEX_MERGE_UNION (1ULL << 1)
#define OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION (1ULL << 2) #define OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION (1ULL << 2)

View File

@@ -5823,7 +5823,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
get_delayed_table_estimates(s->table, &s->records, &s->read_time, get_delayed_table_estimates(s->table, &s->records, &s->read_time,
&s->startup_cost); &s->startup_cost);
s->found_records= s->records; s->found_records= s->records;
table->opt_range_condition_rows=s->records; s->table->opt_range_condition_rows=s->records;
} }
else else
s->scan_time(); s->scan_time();

View File

@@ -946,7 +946,7 @@ find_files(THD *thd, Dynamic_array<LEX_CSTRING*> *files, LEX_CSTRING *db,
if (!(dirp = my_dir(path, MY_THREAD_SPECIFIC | (db ? 0 : MY_WANT_STAT)))) if (!(dirp = my_dir(path, MY_THREAD_SPECIFIC | (db ? 0 : MY_WANT_STAT))))
{ {
if (my_errno == ENOENT) if (my_errno == ENOENT && db)
my_error(ER_BAD_DB_ERROR, MYF(0), db->str); my_error(ER_BAD_DB_ERROR, MYF(0), db->str);
else else
my_error(ER_CANT_READ_DIR, MYF(0), path, my_errno); my_error(ER_CANT_READ_DIR, MYF(0), path, my_errno);

View File

@@ -2301,7 +2301,7 @@ int view_repair(THD *thd, TABLE_LIST *view, HA_CHECK_OPT *check_opt)
bool swap_alg= (check_opt->sql_flags & TT_FROM_MYSQL); bool swap_alg= (check_opt->sql_flags & TT_FROM_MYSQL);
bool wrong_checksum= view_checksum(thd, view) != HA_ADMIN_OK; bool wrong_checksum= view_checksum(thd, view) != HA_ADMIN_OK;
int ret; int ret;
if (wrong_checksum || swap_alg || (!view->mariadb_version)) if (wrong_checksum || !view->mariadb_version)
{ {
ret= mariadb_fix_view(thd, view, wrong_checksum, swap_alg); ret= mariadb_fix_view(thd, view, wrong_checksum, swap_alg);
DBUG_RETURN(ret); DBUG_RETURN(ret);

View File

@@ -7989,6 +7989,7 @@ mi_repair_type:
opt_view_repair_type: opt_view_repair_type:
/* empty */ { } /* empty */ { }
| FOR_SYM UPGRADE_SYM { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; }
| FROM MYSQL_SYM { Lex->check_opt.sql_flags|= TT_FROM_MYSQL; } | FROM MYSQL_SYM { Lex->check_opt.sql_flags|= TT_FROM_MYSQL; }
; ;

View File

@@ -1202,7 +1202,10 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table,
? VCOL_GENERATED_STORED : VCOL_GENERATED_VIRTUAL; ? VCOL_GENERATED_STORED : VCOL_GENERATED_VIRTUAL;
expr_length= uint2korr(pos+1); expr_length= uint2korr(pos+1);
if (table->s->mysql_version > 50700 && table->s->mysql_version < 100000) if (table->s->mysql_version > 50700 && table->s->mysql_version < 100000)
{
table->s->keep_original_mysql_version= 1;
pos+= 4; // MySQL from 5.7 pos+= 4; // MySQL from 5.7
}
else else
pos+= pos[0] == 2 ? 4 : 3; // MariaDB from 5.2 to 10.1 pos+= pos[0] == 2 ? 4 : 3; // MariaDB from 5.2 to 10.1
} }
@@ -1711,6 +1714,33 @@ public:
}; };
/*
Change to use the partition storage engine
*/
#ifdef WITH_PARTITION_STORAGE_ENGINE
static bool change_to_partiton_engine(LEX_CSTRING *name,
plugin_ref *se_plugin)
{
/*
Use partition handler
tmp_plugin is locked with a local lock.
we unlock the old value of se_plugin before
replacing it with a globally locked version of tmp_plugin
*/
/* Check if the partitioning engine is ready */
if (!plugin_is_ready(name, MYSQL_STORAGE_ENGINE_PLUGIN))
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0),
"--skip-partition");
return 1;
}
plugin_unlock(NULL, *se_plugin);
*se_plugin= ha_lock_engine(NULL, partition_hton);
return 0;
}
#endif /* WITH_PARTITION_STORAGE_ENGINE */
/** /**
Read data from a binary .frm file image into a TABLE_SHARE Read data from a binary .frm file image into a TABLE_SHARE
@@ -1763,6 +1793,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
uint vcol_screen_length; uint vcol_screen_length;
uchar *vcol_screen_pos; uchar *vcol_screen_pos;
LEX_CUSTRING options; LEX_CUSTRING options;
LEX_CSTRING se_name= empty_clex_str;
KEY first_keyinfo; KEY first_keyinfo;
uint len; uint len;
uint ext_key_parts= 0; uint ext_key_parts= 0;
@@ -1972,11 +2003,10 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
if (next_chunk + 2 < buff_end) if (next_chunk + 2 < buff_end)
{ {
uint str_db_type_length= uint2korr(next_chunk); uint str_db_type_length= uint2korr(next_chunk);
LEX_CSTRING name; se_name.str= (char*) next_chunk + 2;
name.str= (char*) next_chunk + 2; se_name.length= str_db_type_length;
name.length= str_db_type_length;
plugin_ref tmp_plugin= ha_resolve_by_name(thd, &name, false); plugin_ref tmp_plugin= ha_resolve_by_name(thd, &se_name, false);
if (tmp_plugin != NULL && !plugin_equals(tmp_plugin, se_plugin) && if (tmp_plugin != NULL && !plugin_equals(tmp_plugin, se_plugin) &&
legacy_db_type != DB_TYPE_S3) legacy_db_type != DB_TYPE_S3)
{ {
@@ -2000,28 +2030,15 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
else if (str_db_type_length == 9 && else if (str_db_type_length == 9 &&
!strncmp((char *) next_chunk + 2, "partition", 9)) !strncmp((char *) next_chunk + 2, "partition", 9))
{ {
/* if (change_to_partiton_engine(&se_name, &se_plugin))
Use partition handler
tmp_plugin is locked with a local lock.
we unlock the old value of se_plugin before
replacing it with a globally locked version of tmp_plugin
*/
/* Check if the partitioning engine is ready */
if (!plugin_is_ready(&name, MYSQL_STORAGE_ENGINE_PLUGIN))
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0),
"--skip-partition");
goto err; goto err;
}
plugin_unlock(NULL, se_plugin);
se_plugin= ha_lock_engine(NULL, partition_hton);
} }
#endif #endif
else if (!tmp_plugin) else if (!tmp_plugin)
{ {
/* purecov: begin inspected */ /* purecov: begin inspected */
((char*) name.str)[name.length]=0; ((char*) se_name.str)[se_name.length]=0;
my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), name.str); my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), se_name.str);
goto err; goto err;
/* purecov: end */ /* purecov: end */
} }
@@ -2048,6 +2065,13 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
{ {
goto err; goto err;
} }
if (plugin_data(se_plugin, handlerton*) != partition_hton &&
share->mysql_version >= 50600 && share->mysql_version <= 50799)
{
share->keep_original_mysql_version= 1;
if (change_to_partiton_engine(&se_name, &se_plugin))
goto err;
}
} }
#else #else
if (partition_info_str_len) if (partition_info_str_len)
@@ -2315,6 +2339,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
if (share->mysql_version >= 50700 && share->mysql_version < 100000 && if (share->mysql_version >= 50700 && share->mysql_version < 100000 &&
vcol_screen_length) vcol_screen_length)
{ {
share->keep_original_mysql_version= 1;
/* /*
MySQL 5.7 stores the null bits for not stored fields last. MySQL 5.7 stores the null bits for not stored fields last.
Calculate the position for them. Calculate the position for them.
@@ -2592,8 +2617,12 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
} }
/* Remove >32 decimals from old files */ /* Remove >32 decimals from old files */
if (share->mysql_version < 100200) if (share->mysql_version < 100200 &&
(attr.pack_flag & FIELDFLAG_LONG_DECIMAL))
{
share->keep_original_mysql_version= 1;
attr.pack_flag&= ~FIELDFLAG_LONG_DECIMAL; attr.pack_flag&= ~FIELDFLAG_LONG_DECIMAL;
}
if (interval_nr && attr.charset->mbminlen > 1 && if (interval_nr && attr.charset->mbminlen > 1 &&
!interval_unescaped[interval_nr - 1]) !interval_unescaped[interval_nr - 1])
@@ -4097,7 +4126,6 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share,
outparam->in_use= thd; outparam->in_use= thd;
outparam->s= share; outparam->s= share;
outparam->db_stat= db_stat; outparam->db_stat= db_stat;
outparam->write_row_record= NULL;
outparam->status= STATUS_NO_RECORD; outparam->status= STATUS_NO_RECORD;
if (share->incompatible_version && if (share->incompatible_version &&
@@ -5326,7 +5354,8 @@ Table_check_intact::check(TABLE *table, const TABLE_FIELD_DEF *table_def)
error= TRUE; error= TRUE;
} }
else if (field_def->cset.str && else if (field_def->cset.str &&
strcmp(field->charset()->cs_name.str, field_def->cset.str)) strncmp(field->charset()->cs_name.str, field_def->cset.str,
field_def->cset.length))
{ {
report_error(0, "Incorrect definition of table %s.%s: " report_error(0, "Incorrect definition of table %s.%s: "
"expected the type of column '%s' at position %d " "expected the type of column '%s' at position %d "
@@ -6587,7 +6616,7 @@ void TABLE_LIST::register_want_access(privilege_t want_access)
*/ */
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
bool TABLE_LIST::prepare_view_security_context(THD *thd) bool TABLE_LIST::prepare_view_security_context(THD *thd, bool upgrade_check)
{ {
DBUG_ENTER("TABLE_LIST::prepare_view_security_context"); DBUG_ENTER("TABLE_LIST::prepare_view_security_context");
DBUG_PRINT("enter", ("table: %s", alias.str)); DBUG_PRINT("enter", ("table: %s", alias.str));
@@ -6612,8 +6641,8 @@ bool TABLE_LIST::prepare_view_security_context(THD *thd)
{ {
if (thd->security_ctx->master_access & PRIV_REVEAL_MISSING_DEFINER) if (thd->security_ctx->master_access & PRIV_REVEAL_MISSING_DEFINER)
{ {
my_error(ER_NO_SUCH_USER, MYF(0), definer.user.str, definer.host.str); my_error(ER_NO_SUCH_USER, MYF(upgrade_check ? ME_WARNING: 0),
definer.user.str, definer.host.str);
} }
else else
{ {
@@ -6695,11 +6724,33 @@ bool TABLE_LIST::prepare_security(THD *thd)
TABLE_LIST *tbl; TABLE_LIST *tbl;
DBUG_ENTER("TABLE_LIST::prepare_security"); DBUG_ENTER("TABLE_LIST::prepare_security");
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
/*
Check if we are running REPAIR VIEW FOR UPGRADE
In this case we are probably comming from mysql_upgrade and
should not get an error for mysql.user table we just created.
*/
bool upgrade_check= (thd->lex->sql_command == SQLCOM_REPAIR &&
(thd->lex->check_opt.sql_flags &
(TT_FOR_UPGRADE | TT_FROM_MYSQL)) &&
(thd->security_ctx->master_access &
PRIV_REVEAL_MISSING_DEFINER));
Security_context *save_security_ctx= thd->security_ctx; Security_context *save_security_ctx= thd->security_ctx;
DBUG_ASSERT(!prelocking_placeholder); DBUG_ASSERT(!prelocking_placeholder);
if (prepare_view_security_context(thd)) if (prepare_view_security_context(thd, upgrade_check))
DBUG_RETURN(TRUE); {
if (upgrade_check)
{
/* REPAIR needs SELECT_ACL */
while ((tbl= tb++))
{
tbl->grant.privilege= SELECT_ACL;
tbl->security_ctx= save_security_ctx;
}
DBUG_RETURN(FALSE);
}
DBUG_RETURN(TRUE); // Fatal
}
thd->security_ctx= find_view_security_context(thd); thd->security_ctx= find_view_security_context(thd);
opt_trace_disable_if_no_security_context_access(thd); opt_trace_disable_if_no_security_context_access(thd);
while ((tbl= tb++)) while ((tbl= tb++))
@@ -6725,7 +6776,7 @@ bool TABLE_LIST::prepare_security(THD *thd)
#else #else
while ((tbl= tb++)) while ((tbl= tb++))
tbl->grant.privilege= ALL_KNOWN_ACL; tbl->grant.privilege= ALL_KNOWN_ACL;
#endif #endif /* NO_EMBEDDED_ACCESS_CHECKS */
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }

View File

@@ -879,6 +879,8 @@ struct TABLE_SHARE
bool has_update_default_function; bool has_update_default_function;
bool can_do_row_logging; /* 1 if table supports RBR */ bool can_do_row_logging; /* 1 if table supports RBR */
bool long_unique_table; bool long_unique_table;
/* 1 if frm version cannot be updated as part of upgrade */
bool keep_original_mysql_version;
ulong table_map_id; /* for row-based replication */ ulong table_map_id; /* for row-based replication */
@@ -2811,7 +2813,7 @@ struct TABLE_LIST
bool prepare_security(THD *thd); bool prepare_security(THD *thd);
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
Security_context *find_view_security_context(THD *thd); Security_context *find_view_security_context(THD *thd);
bool prepare_view_security_context(THD *thd); bool prepare_view_security_context(THD *thd, bool upgrade_check);
#endif #endif
/* /*
Cleanup for re-execution in a prepared statement or a stored Cleanup for re-execution in a prepared statement or a stored

View File

@@ -1387,7 +1387,8 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx
for (unsigned i= 0; i < index->n_fields; i++) for (unsigned i= 0; i < index->n_fields; i++)
{ {
const char *field_name= index->fields[i].name(); const char *field_name= index->fields[i].name();
if (!field_name || !dtype_is_string_type(index->fields[i].col->mtype)) if (!field_name || !dtype_is_string_type(index->fields[i].col->mtype) ||
index->fields[i].col->is_virtual())
continue; continue;
for (uint j= 0; j < altered_table.s->fields; j++) for (uint j= 0; j < altered_table.s->fields; j++)
{ {

View File

@@ -1585,9 +1585,11 @@ template<bool have_reference> inline void fil_space_t::flush()
flush_low(); flush_low();
else else
{ {
if (!(acquire_low() & (STOPPING | CLOSING))) if (!(acquire_low(STOPPING | CLOSING) & (STOPPING | CLOSING)))
{
flush_low(); flush_low();
release(); release();
}
} }
} }

View File

@@ -2765,9 +2765,9 @@ restart:
TRX_SYS_MAX_UNDO_SPACES, "compatibility"); TRX_SYS_MAX_UNDO_SPACES, "compatibility");
/* The entire undo tablespace will be reinitialized by /* The entire undo tablespace will be reinitialized by
innodb_undo_log_truncate=ON. Discard old log for all pages. */ innodb_undo_log_truncate=ON. Discard old log for all pages. */
trim({space_id, 0}, lsn); trim({space_id, 0}, start_lsn);
truncated_undo_spaces[space_id - srv_undo_space_id_start]= truncated_undo_spaces[space_id - srv_undo_space_id_start]=
{ lsn, page_no }; { start_lsn, page_no };
if (!store && undo_space_trunc) if (!store && undo_space_trunc)
undo_space_trunc(space_id); undo_space_trunc(space_id);
#endif #endif

View File

@@ -4744,7 +4744,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record,
uchar *data, uchar *end_of_data) uchar *data, uchar *end_of_data)
{ {
MARIA_SHARE *share= info->s; MARIA_SHARE *share= info->s;
uchar *UNINIT_VAR(field_length_data), *UNINIT_VAR(blob_buffer), *start_of_data; uchar *field_length_data= 0, *UNINIT_VAR(blob_buffer), *start_of_data;
uint flag, null_bytes, cur_null_bytes, row_extents, field_lengths; uint flag, null_bytes, cur_null_bytes, row_extents, field_lengths;
my_bool found_blob= 0; my_bool found_blob= 0;
MARIA_EXTENT_CURSOR extent; MARIA_EXTENT_CURSOR extent;