diff --git a/BUILD/FINISH.sh b/BUILD/FINISH.sh index cc66ed09f5d..1b730dee377 100644 --- a/BUILD/FINISH.sh +++ b/BUILD/FINISH.sh @@ -34,7 +34,7 @@ fi commands="" # git clean -fdX removes all ignored (build) files -if test -d .git +if test -d .git && test -d libmariadb/CMakeFiles then commands="\ git clean -fdX diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index 5975ba2b592..e947df15e8e 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -145,7 +145,7 @@ elif [ "x$warning_mode" = "xmaintainer" ]; then debug_extra_cflags="-g3" else # Both C and C++ warnings - warnings="-Wall -Wextra -Wunused -Wwrite-strings -Wno-uninitialized -Wno-strict-aliasing -Wimplicit-fallthrough=2 -Wformat-security -Wvla" + warnings="-Wall -Wextra -Wunused -Wwrite-strings -Wno-uninitialized -Wno-strict-aliasing -Wformat-security -Wvla" # For more warnings, uncomment the following line # warnings="$warnings -Wshadow" diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index d5c81409eaf..ce37cc51062 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -20,7 +20,7 @@ #include #include <../scripts/mariadb_fix_privilege_tables_sql.c> -#define VER "2.0" +#define VER "2.1" #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ #ifdef HAVE_SYS_WAIT_H @@ -37,7 +37,7 @@ static int phase = 0; 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 mysqlcheck_path[FN_REFLEN]; @@ -989,7 +989,7 @@ static my_bool is_mysql() static int run_mysqlcheck_views(void) { - const char *upgrade_views="--process-views=YES"; + const char *upgrade_views="--process-views=UPGRADE"; if (upgrade_from_mysql) { /* @@ -1129,8 +1129,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) { char *plugins= ds_plugin_data_types.str; @@ -1147,7 +1148,10 @@ static void uninstall_plugins(void) next= get_line(next); } } + return 0; } + + /** @brief Install plugins for missing data types @details Check for entries with "Unknown data type" in I_S.TABLES, @@ -1196,6 +1200,8 @@ static int install_used_plugin_data_types(void) dynstr_free(&ds_result); return 0; } + + /* Check for entries with "Unknown storage engine" in I_S.TABLES, try to load plugins for these tables if available (MDEV-11942) @@ -1246,6 +1252,7 @@ static int install_used_engines(void) return 0; } + static int check_slave_repositories(void) { DYNAMIC_STRING ds_result; @@ -1373,6 +1380,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 was compiled with. @@ -1402,10 +1416,11 @@ static int check_version_match(void) if (calc_server_version((char *) version_str) != MYSQL_VERSION_ID) { - fprintf(stderr, "Error: Server version (%s) does not match with the " - "version of\nthe server (%s) with which this program was built/" - "distributed. You can\nuse --skip-version-check to skip this " - "check.\n", version_str, MYSQL_SERVER_VERSION); + fprintf(stderr, "Error: Server version (%s)\n" + "does not match the version of the server (%s)\n" + "with which this program was built/distributed. You can\n" + "use --skip-version-check to skip this check.\n", + version_str, MYSQL_SERVER_VERSION); return 1; } return 0; @@ -1493,18 +1508,14 @@ int main(int argc, char **argv) if (run_mysqlcheck_upgrade(TRUE) || install_used_engines() || install_used_plugin_data_types() || - run_mysqlcheck_views() || run_sql_fix_privilege_tables() || + run_mysqlcheck_views() || run_mysqlcheck_fixnames() || run_mysqlcheck_upgrade(FALSE) || - check_slave_repositories()) + check_slave_repositories() || + uninstall_plugins() || + flush_privileges()) 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"); /* Finish writing indicating upgrade has been performed */ diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 6076a8cddaa..545139de267 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -63,8 +63,9 @@ const char *operation_name[]= "???", "check", "repair", "analyze", "optimize", "fix names" }; -typedef enum { DO_VIEWS_NO, DO_VIEWS_YES, DO_VIEWS_FROM_MYSQL } enum_do_views; -const char *do_views_opts[]= {"NO", "YES", "UPGRADE_FROM_MYSQL", NullS}; +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", "UPGRADE_FROM_MYSQL", + NullS}; TYPELIB do_views_typelib= { array_elements(do_views_opts) - 1, "", do_views_opts, NULL }; static ulong opt_do_views= DO_VIEWS_NO; @@ -213,8 +214,9 @@ static struct my_option my_long_options[] = {"process-views", 0, "Perform the requested operation (check or repair) on views. " "One of: NO, YES (correct the checksum, if necessary, add the " - "mariadb-version field), UPGRADE_FROM_MYSQL (same as YES and toggle " - "the algorithm MERGE<->TEMPTABLE.", &opt_do_views, &opt_do_views, + "mariadb-version field), UPGRADE (run from mariadb-upgrade), " + "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}, {"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}, @@ -915,7 +917,10 @@ static int handle_request_for_tables(char *tables, size_t length, op= opt_write_binlog ? "REPAIR" : "REPAIR NO_WRITE_TO_BINLOG"; 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 { diff --git a/debian/mariadb-server.mariadb.init b/debian/mariadb-server.mariadb.init index 3178a5d2244..960e5de60cf 100644 --- a/debian/mariadb-server.mariadb.init +++ b/debian/mariadb-server.mariadb.init @@ -84,6 +84,24 @@ sanity_checks() { # check for diskspace shortage 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 # 4096 blocks is then lower than 4 MB df_available_blocks="$(LC_ALL=C BLOCKSIZE='' df --output=avail "$datadir" | tail -n 1)" diff --git a/libmariadb b/libmariadb index c2b322d2ca2..5af90f00ffe 160000 --- a/libmariadb +++ b/libmariadb @@ -1 +1 @@ -Subproject commit c2b322d2ca27ef66385d9938b98541c7cf14ac74 +Subproject commit 5af90f00ffeda64795e23753c14d601cce5d02ca diff --git a/mysql-test/main/ctype_upgrade.result b/mysql-test/main/ctype_upgrade.result index 500b013a5a1..97c797e8418 100644 --- a/mysql-test/main/ctype_upgrade.result +++ b/mysql-test/main/ctype_upgrade.result @@ -227,7 +227,7 @@ DROP TABLE mysql050614_xxx_croatian_ci; # Checking mysql_upgrade # # Running mysql_upgrade -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -258,8 +258,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -361,9 +362,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -384,11 +384,12 @@ test.maria050313_ucs2_croatian_ci_def OK test.maria050313_utf8_croatian_ci OK test.maria050533_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 # Running mysql_upgrade for the second time # 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 mysql mysql.column_stats OK @@ -419,8 +420,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -522,9 +524,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -539,7 +540,8 @@ test.maria050313_utf8_croatian_ci OK test.maria050533_xxx_croatian_ci OK test.maria100004_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 SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; Table Create Table diff --git a/mysql-test/main/explain_json.result b/mysql-test/main/explain_json.result index 969e069da83..38bea4b4d6a 100644 --- a/mysql-test/main/explain_json.result +++ b/mysql-test/main/explain_json.result @@ -1375,7 +1375,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL idx_t1_1 163 NULL 128 Using where; Using index explain select count(distinct a1,a2,b) from t1 where a1 >= "" and (a2 >= 'b') and (b = 'a'); id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 147 NULL 1 Using where; Using index for group-by +1 SIMPLE t1 range idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 17 Using where; Using index for group-by explain format=json select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a'); EXPLAIN { @@ -1438,11 +1438,11 @@ EXPLAIN "table_name": "t1", "access_type": "range", "possible_keys": ["idx_t1_0", "idx_t1_1", "idx_t1_2"], - "key": "idx_t1_1", + "key": "idx_t1_2", "key_length": "147", "used_key_parts": ["a1", "a2", "b"], "loops": 1, - "rows": 1, + "rows": 17, "cost": "COST_REPLACED", "filtered": 100, "attached_condition": "t1.b = 'a' and t1.a1 >= '' and t1.a2 >= 'b'", diff --git a/mysql-test/main/flush_logs_not_windows.test b/mysql-test/main/flush_logs_not_windows.test index ff30062b3a3..f4eaa2fa2c3 100644 --- a/mysql-test/main/flush_logs_not_windows.test +++ b/mysql-test/main/flush_logs_not_windows.test @@ -4,6 +4,8 @@ source include/not_windows.inc; source include/not_embedded.inc; +source include/not_as_root.inc; + # # MDEV-17710 "unknown error" with FLUSH LOGS if log directory is not writeable # diff --git a/mysql-test/main/group_min_max.result b/mysql-test/main/group_min_max.result index e1993eec07d..f2288211e8f 100644 --- a/mysql-test/main/group_min_max.result +++ b/mysql-test/main/group_min_max.result @@ -4238,30 +4238,6 @@ a b s1 2 2 t2:t2a-null;min_t3_b:t3b-null 3 3 t2:1;min_t3_b:3 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 # diff --git a/mysql-test/main/group_min_max.test b/mysql-test/main/group_min_max.test index 9a0ca3041d3..41aac11c9ac 100644 --- a/mysql-test/main/group_min_max.test +++ b/mysql-test/main/group_min_max.test @@ -7,7 +7,7 @@ --source include/default_optimizer_switch.inc --source include/have_sequence.inc --source include/have_innodb.inc ---source include/have_sequence.inc + # # TODO: # Add queries with: @@ -1867,30 +1867,6 @@ from t1; 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 # End of 10.5 tests --echo # diff --git a/mysql-test/main/group_min_max_notembedded.result b/mysql-test/main/group_min_max_notembedded.result new file mode 100644 index 00000000000..e19560b4923 --- /dev/null +++ b/mysql-test/main/group_min_max_notembedded.result @@ -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 +# diff --git a/mysql-test/main/group_min_max_notembedded.test b/mysql-test/main/group_min_max_notembedded.test new file mode 100644 index 00000000000..930ee8464f8 --- /dev/null +++ b/mysql-test/main/group_min_max_notembedded.test @@ -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 # + diff --git a/mysql-test/main/join.result b/mysql-test/main/join.result index a6c2f88b841..a97bfbdc944 100644 --- a/mysql-test/main/join.result +++ b/mysql-test/main/join.result @@ -3437,6 +3437,21 @@ COUNT(*) DROP TABLE t1, t2, t3; # 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 +# # MDEV-30256 Wrong result (missing rows) upon join with empty table # CREATE TABLE t1 (a INT); diff --git a/mysql-test/main/join.test b/mysql-test/main/join.test index 453cf8c2313..95027a823b0 100644 --- a/mysql-test/main/join.test +++ b/mysql-test/main/join.test @@ -1840,6 +1840,25 @@ DROP TABLE t1, t2, t3; --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 + --echo # --echo # MDEV-30256 Wrong result (missing rows) upon join with empty table --echo # diff --git a/mysql-test/main/log_tables_upgrade.result b/mysql-test/main/log_tables_upgrade.result index ccdd726cb82..1f8f478200c 100644 --- a/mysql-test/main/log_tables_upgrade.result +++ b/mysql-test/main/log_tables_upgrade.result @@ -11,7 +11,7 @@ Table Op Msg_type Msg_text test.bug49823 repair status OK RENAME TABLE general_log TO renamed_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 mysql mysql.column_stats OK @@ -43,8 +43,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -146,9 +147,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -158,7 +158,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK DROP TABLE general_log; RENAME TABLE renamed_general_log TO general_log; diff --git a/mysql-test/main/lowercase_fs_off.result b/mysql-test/main/lowercase_fs_off.result index 98b7a8c7c38..f59470ae0bc 100644 --- a/mysql-test/main/lowercase_fs_off.result +++ b/mysql-test/main/lowercase_fs_off.result @@ -86,7 +86,7 @@ DROP TABLE t1; create database TEST; 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 mysql mysql.column_stats OK @@ -134,8 +134,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -237,9 +238,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases TEST information_schema @@ -250,7 +250,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK drop procedure test.pr; drop database TEST; diff --git a/mysql-test/main/mysql_json_mysql_upgrade.result b/mysql-test/main/mysql_json_mysql_upgrade.result index 4c4a86f88ee..2b909594e74 100644 --- a/mysql-test/main/mysql_json_mysql_upgrade.result +++ b/mysql-test/main/mysql_json_mysql_upgrade.result @@ -5,7 +5,7 @@ SET NAMES utf8; show create table mysql_json_test; 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 mysql mysql.column_stats OK @@ -53,9 +53,10 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' 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 -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_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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -175,8 +175,9 @@ test.mysql_json_test_big Needs upgrade Repairing tables test.mysql_json_test OK test.mysql_json_test_big OK +Phase 7/8: uninstalling plugins uninstalling plugin for 'type_mysql_json' data type -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 8/8: Running 'FLUSH PRIVILEGES' OK show create table mysql_json_test; Table Create Table diff --git a/mysql-test/main/mysql_json_mysql_upgrade_with_plugin_loaded.result b/mysql-test/main/mysql_json_mysql_upgrade_with_plugin_loaded.result index 33205e60aea..7bc2808a40b 100644 --- a/mysql-test/main/mysql_json_mysql_upgrade_with_plugin_loaded.result +++ b/mysql-test/main/mysql_json_mysql_upgrade_with_plugin_loaded.result @@ -6,7 +6,7 @@ SET NAMES utf8; call mtr.add_suppression("Table rebuild required"); 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! -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -54,8 +54,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -157,9 +158,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -175,7 +175,8 @@ test.mysql_json_test_big Needs upgrade Repairing tables test.mysql_json_test 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 show create table mysql_json_test; Table Create Table diff --git a/mysql-test/main/mysql_upgrade-20228.result b/mysql-test/main/mysql_upgrade-20228.result index b58450ea0d9..cd616c53615 100644 --- a/mysql-test/main/mysql_upgrade-20228.result +++ b/mysql-test/main/mysql_upgrade-20228.result @@ -16,7 +16,7 @@ WHERE TABLE_SCHEMA='mysql' AND TABLE_NAME='user'; CHARACTER_SET_CLIENT COLLATION_CONNECTION utf8mb4 utf8mb4_unicode_ci # Running mysql_upgrade -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -47,8 +47,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -150,9 +151,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -162,7 +162,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # # Restoring character_set_client and collation_connection back diff --git a/mysql-test/main/mysql_upgrade-28915.opt b/mysql-test/main/mysql_upgrade-28915.opt new file mode 100644 index 00000000000..a4d776d51c5 --- /dev/null +++ b/mysql-test/main/mysql_upgrade-28915.opt @@ -0,0 +1,2 @@ +--old-mode= +--innodb-page-size=4k diff --git a/mysql-test/main/mysql_upgrade-28915.result b/mysql-test/main/mysql_upgrade-28915.result new file mode 100644 index 00000000000..399cd9cf3c4 --- /dev/null +++ b/mysql-test/main/mysql_upgrade-28915.result @@ -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(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `db_collation` char(64) 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(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `db_collation` char(64) 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(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `db_collation` char(64) 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(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `db_collation` char(64) 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(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `db_collation` char(64) 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(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `db_collation` char(64) 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 diff --git a/mysql-test/main/mysql_upgrade-28915.test b/mysql-test/main/mysql_upgrade-28915.test new file mode 100644 index 00000000000..56554ff0995 --- /dev/null +++ b/mysql-test/main/mysql_upgrade-28915.test @@ -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/mariadb_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/mariadb_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 diff --git a/mysql-test/main/mysql_upgrade-6984.result b/mysql-test/main/mysql_upgrade-6984.result index dd266c2f208..0b636b93eb4 100644 --- a/mysql-test/main/mysql_upgrade-6984.result +++ b/mysql-test/main/mysql_upgrade-6984.result @@ -1,5 +1,5 @@ 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 mysql mysql.column_stats OK @@ -47,8 +47,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -150,9 +151,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -162,7 +162,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK connect con1,localhost,root,foo,,,; update mysql.global_priv set priv=json_compact(json_remove(priv, '$.plugin', '$.authentication_string')) where user='root'; diff --git a/mysql-test/main/mysql_upgrade.result b/mysql-test/main/mysql_upgrade.result index 0b1ec84c592..fe08d4135de 100644 --- a/mysql-test/main/mysql_upgrade.result +++ b/mysql-test/main/mysql_upgrade.result @@ -1,7 +1,7 @@ set sql_mode=""; call mtr.add_suppression("Incorrect definition of table mysql.column_stats:.*"); Run mysql_upgrade once -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -32,8 +32,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -135,9 +136,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -147,13 +147,14 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK Run it again - should say already completed This installation of MariaDB is already upgraded to VERSION.There is no need to run mariadb-upgrade again for VERSION. You can use --force if you still want to run mariadb-upgrade 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 mysql mysql.column_stats OK @@ -184,8 +185,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -287,9 +289,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -299,12 +300,13 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila'; GRANT ALL ON *.* TO mysqltest1@'%'; 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 mysql mysql.column_stats OK @@ -335,8 +337,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -438,9 +441,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -450,7 +452,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK DROP USER mysqltest1@'%'; 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) FATAL ERROR: Upgrade failed 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 mysql mysql.column_stats OK @@ -492,8 +495,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -595,9 +599,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -607,7 +610,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK 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 collation_connection = 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 mysql mysql.column_stats OK @@ -649,8 +653,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -752,9 +757,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -764,7 +768,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK CALL 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 ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%'; 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 mysql mysql.column_stats OK @@ -809,8 +814,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -912,9 +918,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -924,7 +929,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK SHOW GRANTS FOR 'user3'@'%'; Grants for user3@% @@ -933,7 +939,7 @@ GRANT ALL PRIVILEGES ON `roelt`.`test2` TO `user3`@`%` DROP USER 'user3'@'%'; # End of 5.1 tests 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 mysql mysql.column_stats OK @@ -964,12 +970,13 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views... Skipped -Phase 4/7: Running 'mysql_fix_privilege_tables' -Phase 5/7: Fixing table and database names ... Skipped -Phase 6/7: Checking and upgrading tables... Skipped -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 2/8: Installing used storage engines... Skipped +Phase 3/8: Running 'mysql_fix_privilege_tables' +Phase 4/8: Fixing views... Skipped +Phase 5/8: Fixing table and database names ... Skipped +Phase 6/8: Checking and upgrading tables... Skipped +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # # Bug#11827359 60223: MYSQL_UPGRADE PROBLEM WITH OPTION @@ -977,7 +984,7 @@ OK # # Droping the previously created mariadb_upgrade_info file.. # 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 mysql mysql.column_stats OK @@ -1008,8 +1015,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -1111,9 +1119,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -1123,7 +1130,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # # 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_2; CREATE PROCEDURE test.pr() BEGIN END; -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -1179,8 +1187,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -1282,9 +1291,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -1294,7 +1302,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK SELECT definer FROM mysql.proc WHERE db = 'test' AND name = 'pr'; definer @@ -1327,7 +1336,7 @@ set sql_mode=default; create table test.t1(a int) engine=MyISAM; # Trying to enforce InnoDB for all tables SET GLOBAL enforce_storage_engine=InnoDB; -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -1358,8 +1367,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -1461,9 +1471,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -1474,7 +1483,8 @@ sys sys.sys_config OK test test.t1 OK -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # Should return 2 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', PRIMARY KEY (`Host`,`User`) ) 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 mysql mysql.column_stats OK @@ -1578,9 +1588,11 @@ 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 +Phase 2/8: Installing used storage engines 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_by_file_io 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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -1693,7 +1704,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK SHOW CREATE TABLE mysql.user; 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 max_statement_time decimal(12,6) DEFAULT 0 NOT NULL; FLUSH PRIVILEGES; -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -1755,8 +1767,12 @@ 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 +Phase 2/8: Installing used storage engines... Skipped +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_by_file_io 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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -1869,7 +1884,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK SHOW CREATE TABLE mysql.user; View Create View character_set_client collation_connection @@ -1954,7 +1970,7 @@ SET GLOBAL alter_algorithm='INPLACE'; SHOW GLOBAL VARIABLES LIKE 'alter_algorithm'; Variable_name Value alter_algorithm INPLACE -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -1985,8 +2001,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -2088,9 +2105,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -2100,7 +2116,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK SET GLOBAL alter_algorithm=DEFAULT; SHOW GLOBAL VARIABLES LIKE 'alter_algorithm'; @@ -2168,7 +2185,7 @@ FLUSH PRIVILEGES; CREATE USER mariadb_102; UPDATE mysql.user SET password_last_changed=0 WHERE user='mariadb_102'; FLUSH PRIVILEGES; -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -2201,9 +2218,13 @@ 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 +Phase 2/8: Installing used storage engines 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_by_file_io 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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -2316,7 +2336,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK SHOW CREATE USER mariadb_102; CREATE USER for mariadb_102@% diff --git a/mysql-test/main/mysql_upgrade_mysql_json_datatype.result b/mysql-test/main/mysql_upgrade_mysql_json_datatype.result index c58adb829ac..cb964cb7d0c 100644 --- a/mysql-test/main/mysql_upgrade_mysql_json_datatype.result +++ b/mysql-test/main/mysql_upgrade_mysql_json_datatype.result @@ -10,7 +10,7 @@ ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.mysql_json_tes 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! # 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 mysql mysql.column_stats OK @@ -41,8 +41,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -144,9 +145,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -164,7 +164,8 @@ Repairing tables test.mysql_json_test OK test.mysql_json_test_big OK test.tempty OK -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # # Now check if the table structure is correct and that the data diff --git a/mysql-test/main/mysql_upgrade_no_innodb.result b/mysql-test/main/mysql_upgrade_no_innodb.result index 35b55bb45e0..896b96fbda7 100644 --- a/mysql-test/main/mysql_upgrade_no_innodb.result +++ b/mysql-test/main/mysql_upgrade_no_innodb.result @@ -1,5 +1,5 @@ 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 mysql mysql.column_stats OK @@ -47,10 +47,11 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views... Skipped -Phase 4/7: Running 'mysql_fix_privilege_tables' -Phase 5/7: Fixing table and database names ... Skipped -Phase 6/7: Checking and upgrading tables... Skipped -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 2/8: Installing used storage engines... Skipped +Phase 3/8: Running 'mysql_fix_privilege_tables' +Phase 4/8: Fixing views... Skipped +Phase 5/8: Fixing table and database names ... Skipped +Phase 6/8: Checking and upgrading tables... Skipped +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK diff --git a/mysql-test/main/mysql_upgrade_noengine.result b/mysql-test/main/mysql_upgrade_noengine.result index 830b574fb9c..b0ab868bf59 100644 --- a/mysql-test/main/mysql_upgrade_noengine.result +++ b/mysql-test/main/mysql_upgrade_noengine.result @@ -56,168 +56,18 @@ Level Warning Code 1286 Message Unknown storage engine 'ARCHIVE' # 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 Error : Unknown storage engine 'BLACKHOLE' error : Corrupt test.t2 Error : Unknown storage engine 'ARCHIVE' error : Corrupt - -Repairing tables test.t1 Error : Unknown storage engine 'BLACKHOLE' error : Corrupt test.t2 Error : Unknown storage engine 'ARCHIVE' 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'; table_catalog def table_schema test @@ -252,169 +102,18 @@ rename table mysql.global_priv_bak to mysql.global_priv; drop view mysql.user_bak; alter table mysql.user drop column default_role, drop column max_statement_time; # 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 Error : Unknown storage engine 'BLACKHOLE' error : Corrupt test.t2 Error : Unknown storage engine 'ARCHIVE' error : Corrupt - -Repairing tables test.t1 Error : Unknown storage engine 'BLACKHOLE' error : Corrupt test.t2 Error : Unknown storage engine 'ARCHIVE' 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'; table_catalog def table_schema test @@ -449,160 +148,6 @@ rename table mysql.global_priv_bak to mysql.global_priv; drop view mysql.user_bak; alter table mysql.user drop column default_role, drop column max_statement_time; # 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'; table_catalog def table_schema test diff --git a/mysql-test/main/mysql_upgrade_noengine.test b/mysql-test/main/mysql_upgrade_noengine.test index 0fa9414ecb5..173e367acdc 100644 --- a/mysql-test/main/mysql_upgrade_noengine.test +++ b/mysql-test/main/mysql_upgrade_noengine.test @@ -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 --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='t2'; @@ -54,7 +54,7 @@ EOF --echo # still upgrade from 10.1 --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='t2'; @@ -68,13 +68,14 @@ remove_file $datadir/mariadb_upgrade_info; --echo # upgrade from 10.0 - engines are enabled --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='t2'; drop table t1, t2; remove_file $datadir/mariadb_upgrade_info; +# This is needed as mariadb_upgrade can load the plugins uninstall plugin blackhole; uninstall plugin archive; diff --git a/mysql-test/main/mysql_upgrade_ssl.result b/mysql-test/main/mysql_upgrade_ssl.result index 55ece1269d2..990f05b3d94 100644 --- a/mysql-test/main/mysql_upgrade_ssl.result +++ b/mysql-test/main/mysql_upgrade_ssl.result @@ -1,7 +1,7 @@ # # 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 mysql mysql.column_stats OK @@ -32,8 +32,9 @@ mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.transaction_registry OK -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -135,9 +136,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -147,5 +147,6 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK diff --git a/mysql-test/main/mysql_upgrade_view.result b/mysql-test/main/mysql_upgrade_view.result index ca879b92559..21304c15dd5 100644 --- a/mysql-test/main/mysql_upgrade_view.result +++ b/mysql-test/main/mysql_upgrade_view.result @@ -64,7 +64,7 @@ test.v2 check error Upgrade required. Please do "REPAIR VIEW `v2`" or dump/reloa check view v3 for upgrade; Table Op Msg_type Msg_text 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 mysql mysql.column_stats OK @@ -112,8 +112,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -219,9 +220,8 @@ test.v1 OK test.v1badcheck OK test.v2 OK test.v3 OK -Phase 4/7: Running 'mysql_fix_privilege_tables' -Phase 5/7: Fixing table and database names -Phase 6/7: Checking and upgrading tables +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -233,7 +233,8 @@ sys.sys_config OK test test.kv OK test.t1 OK -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK show create view v1; View Create View character_set_client collation_connection @@ -315,7 +316,7 @@ show create view v4; 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 MariaDB upgrade detected -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -364,8 +365,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views from mysql +Phase 2/8: Installing used storage engines... Skipped +Phase 3/8: Running 'mysql_fix_privilege_tables' +Phase 4/8: Fixing views from mysql mysql.user OK sys.host_summary OK sys.host_summary_by_file_io OK @@ -471,9 +473,8 @@ test.v1 OK test.v2 OK test.v3 OK test.v4 OK -Phase 4/7: Running 'mysql_fix_privilege_tables' -Phase 5/7: Fixing table and database names -Phase 6/7: Checking and upgrading tables +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -485,7 +486,8 @@ sys.sys_config OK test test.kv OK test.t1 OK -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK flush tables; show create view v1; @@ -542,7 +544,7 @@ rename table mysql.event to mysql.ev_bk; flush tables; The --upgrade-system-tables option was used, user tables won't be touched. MariaDB upgrade detected -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -591,8 +593,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views from mysql +Phase 2/8: Installing used storage engines... Skipped +Phase 3/8: Running 'mysql_fix_privilege_tables' +Phase 4/8: Fixing views from mysql mysql.user OK sys.host_summary OK sys.host_summary_by_file_io OK @@ -697,10 +700,10 @@ sys.x$waits_global_by_latency OK test.v1 OK test.v2 OK test.v3 OK -Phase 4/7: Running 'mysql_fix_privilege_tables' -Phase 5/7: Fixing table and database names ... Skipped -Phase 6/7: Checking and upgrading tables... Skipped -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 5/8: Fixing table and database names ... Skipped +Phase 6/8: Checking and upgrading tables... Skipped +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK drop table mysql.event; rename table mysql.ev_bk to mysql.event; diff --git a/mysql-test/main/optimizer_crash.result b/mysql-test/main/optimizer_crash.result index 643a16c0e33..8b92c40b493 100644 --- a/mysql-test/main/optimizer_crash.result +++ b/mysql-test/main/optimizer_crash.result @@ -55,5 +55,19 @@ SELECT a FROM t1 JOIN t2 WHERE a = b AND c <> 7 GROUP BY a HAVING a != 6 AND a < a DROP TABLE t1, t2; # +# MDEV-31375 Assertion `dbl_records <= s->records' failed with +# optimizer_use_condition_selectivity=1 +# +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (id INT PRIMARY KEY); +INSERT INTO t2 VALUES (2),(3); +SET optimizer_switch = 'derived_with_keys=off'; +SET optimizer_use_condition_selectivity = 1; +SELECT t1.* FROM t1 JOIN (SELECT id, COUNT(*) FROM t2 GROUP BY id) sq ON sq.id = t1.a; +a +2 +DROP TABLE t1, t2; +# # End of 11.0 tests # diff --git a/mysql-test/main/optimizer_crash.test b/mysql-test/main/optimizer_crash.test index 1134e4b6445..bfcc4835f09 100644 --- a/mysql-test/main/optimizer_crash.test +++ b/mysql-test/main/optimizer_crash.test @@ -63,6 +63,20 @@ EXPLAIN SELECT a FROM t1 JOIN t2 WHERE a = b AND c <> 7 GROUP BY a HAVING a != 6 SELECT a FROM t1 JOIN t2 WHERE a = b AND c <> 7 GROUP BY a HAVING a != 6 AND a <= 9; DROP TABLE t1, t2; +--echo # +--echo # MDEV-31375 Assertion `dbl_records <= s->records' failed with +--echo # optimizer_use_condition_selectivity=1 +--echo # + +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (id INT PRIMARY KEY); +INSERT INTO t2 VALUES (2),(3); +SET optimizer_switch = 'derived_with_keys=off'; +SET optimizer_use_condition_selectivity = 1; +SELECT t1.* FROM t1 JOIN (SELECT id, COUNT(*) FROM t2 GROUP BY id) sq ON sq.id = t1.a; +DROP TABLE t1, t2; + --echo # --echo # End of 11.0 tests --echo # diff --git a/mysql-test/main/partition.result b/mysql-test/main/partition.result index 78d4aa3f87c..9155f90d781 100644 --- a/mysql-test/main/partition.result +++ b/mysql-test/main/partition.result @@ -2858,3 +2858,41 @@ id select_type table type possible_keys key key_len ref rows Extra 2 DEPENDENT SUBQUERY t3 ref_or_null a1,b a1 10 func,test.t2.a 198 Using where; Full scan on NULL key set optimizer_switch=@tmp_os; drop table t1,t2,t3; +# +# MDEV-31494 Server crashes in ha_partition::index_blocks / +# get_key_scans_params +# +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (b INT, c INT, KEY(c)) PARTITION BY LIST (b) (PARTITION p0 VALUES IN (1,2), PARTITION p1 VALUES IN (3,4)); +INSERT INTO t2 VALUES (1,1),(2,2); +explain SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE t2.b = 5 AND t2.c = 10; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE t2.b = 5 AND t2.c = 10; +a b c +DROP TABLE t1, t2; +# +# MDEV-31445 Server crashes in ha_partition::index_blocks / +# cost_for_index_read +# +CREATE TABLE t1 (a INT); +CREATE TABLE t2 (b INT); +CREATE TABLE t3 (c INT, d INT, KEY(d)) PARTITION BY KEY (c) PARTITIONS 2; +CREATE TABLE t4 (e INT); +INSERT INTO t1 VALUES (1),(2); +INSERT INTO t2 VALUES (1),(2); +INSERT INTO t3 VALUES (1,1),(2,2); +INSERT INTO t4 VALUES (1),(2); +explain SELECT * FROM t1 LEFT JOIN (t2 JOIN t3 ON (0 IN (SELECT e FROM t4) AND t3.d = t2.b)) ON (t3.c < t2.b); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 +1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where +1 PRIMARY t3 ref d d 5 test.t2.b 1 Using where +2 SUBQUERY t4 ALL NULL NULL NULL NULL 2 Using where +SELECT * FROM t1 LEFT JOIN (t2 JOIN t3 ON (0 IN (SELECT e FROM t4) AND t3.d = t2.b)) ON (t3.c < t2.b); +a b c d +1 NULL NULL NULL +2 NULL NULL NULL +drop table t1,t2,t3,t4; +# End of 11.0 tests diff --git a/mysql-test/main/partition.test b/mysql-test/main/partition.test index d96031a6b2b..101e696a9ff 100644 --- a/mysql-test/main/partition.test +++ b/mysql-test/main/partition.test @@ -3062,3 +3062,40 @@ set optimizer_switch=@tmp_os; drop table t1,t2,t3; + +--echo # +--echo # MDEV-31494 Server crashes in ha_partition::index_blocks / +--echo # get_key_scans_params +--echo # + +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2); + +CREATE TABLE t2 (b INT, c INT, KEY(c)) PARTITION BY LIST (b) (PARTITION p0 VALUES IN (1,2), PARTITION p1 VALUES IN (3,4)); + +INSERT INTO t2 VALUES (1,1),(2,2); +explain SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE t2.b = 5 AND t2.c = 10; +SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE t2.b = 5 AND t2.c = 10; +DROP TABLE t1, t2; + +--echo # +--echo # MDEV-31445 Server crashes in ha_partition::index_blocks / +--echo # cost_for_index_read +--echo # + +CREATE TABLE t1 (a INT); +CREATE TABLE t2 (b INT); +CREATE TABLE t3 (c INT, d INT, KEY(d)) PARTITION BY KEY (c) PARTITIONS 2; +CREATE TABLE t4 (e INT); + +INSERT INTO t1 VALUES (1),(2); +INSERT INTO t2 VALUES (1),(2); +INSERT INTO t3 VALUES (1,1),(2,2); +INSERT INTO t4 VALUES (1),(2); + +explain SELECT * FROM t1 LEFT JOIN (t2 JOIN t3 ON (0 IN (SELECT e FROM t4) AND t3.d = t2.b)) ON (t3.c < t2.b); +SELECT * FROM t1 LEFT JOIN (t2 JOIN t3 ON (0 IN (SELECT e FROM t4) AND t3.d = t2.b)) ON (t3.c < t2.b); + +drop table t1,t2,t3,t4; + +--echo # End of 11.0 tests diff --git a/mysql-test/main/upgrade_MDEV-19650.result b/mysql-test/main/upgrade_MDEV-19650.result index 90f2d7b0aa7..81673dc8cdf 100644 --- a/mysql-test/main/upgrade_MDEV-19650.result +++ b/mysql-test/main/upgrade_MDEV-19650.result @@ -84,7 +84,7 @@ GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'"; GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE # Run mysql_upgrade -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -133,9 +133,12 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views -mysql.user OK +Phase 2/8: Installing used storage engines... Skipped +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_by_file_io 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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -252,7 +254,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # 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'; diff --git a/mysql-test/main/upgrade_MDEV-23102-1.result b/mysql-test/main/upgrade_MDEV-23102-1.result index 35bcc41bc33..a092cf10e30 100644 --- a/mysql-test/main/upgrade_MDEV-23102-1.result +++ b/mysql-test/main/upgrade_MDEV-23102-1.result @@ -104,7 +104,7 @@ GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'"; GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE # Run mysql_upgrade -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -153,8 +153,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -256,9 +257,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -272,7 +272,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # check new definitions mysql_upgrade SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' @@ -303,7 +304,7 @@ DROP USER 'superuser'@'localhost'; DROP VIEW mysql.user; DROP PROCEDURE AddGeometryColumn; DROP PROCEDURE DropGeometryColumn; -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -352,8 +353,12 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +Phase 2/8: Installing used storage engines... Skipped +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_by_file_io 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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -470,7 +474,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK delete from global_priv; delete from tables_priv; diff --git a/mysql-test/main/upgrade_MDEV-23102-2.result b/mysql-test/main/upgrade_MDEV-23102-2.result index c6d4aaf31a9..f84a109e792 100644 --- a/mysql-test/main/upgrade_MDEV-23102-2.result +++ b/mysql-test/main/upgrade_MDEV-23102-2.result @@ -88,7 +88,7 @@ GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE SELECT * FROM information_schema.TABLE_PRIVILEGES WHERE GRANTEE="'mariadb.sys'@'localhost'"; GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE # Run mysql_upgrade -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -137,8 +137,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -240,9 +241,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -256,7 +256,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # check new definitions mysql_upgrade SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' @@ -279,7 +280,7 @@ count(*) # restore environment DROP USER 'superuser'@'localhost'; DROP VIEW mysql.user; -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -328,8 +329,12 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +Phase 2/8: Installing used storage engines... Skipped +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_by_file_io 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_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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -446,7 +450,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK delete from global_priv; delete from tables_priv; diff --git a/mysql-test/main/upgrade_geometrycolumn_procedure_definer.result b/mysql-test/main/upgrade_geometrycolumn_procedure_definer.result index 8965b8a16f4..9d2f445d01c 100644 --- a/mysql-test/main/upgrade_geometrycolumn_procedure_definer.result +++ b/mysql-test/main/upgrade_geometrycolumn_procedure_definer.result @@ -34,7 +34,7 @@ count(*) # # Run mysql_upgrade # -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -83,8 +83,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -186,9 +187,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -198,7 +198,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK # # check new definers of Add/DropGeometryColumn diff --git a/mysql-test/main/upgrade_mdev_24363.result b/mysql-test/main/upgrade_mdev_24363.result index 50fc2d7bcc3..184c948fe75 100644 --- a/mysql-test/main/upgrade_mdev_24363.result +++ b/mysql-test/main/upgrade_mdev_24363.result @@ -49,7 +49,7 @@ password_expired N drop user gigi@localhost; # Run mysql_upgrade -Phase 1/7: Checking and upgrading mysql database +Phase 1/8: Checking and upgrading mysql database Processing databases mysql mysql.column_stats OK @@ -97,8 +97,9 @@ error : Corrupt mysql.transaction_registry Error : Unknown storage engine 'InnoDB' error : Corrupt -Phase 2/7: Installing used storage engines... Skipped -Phase 3/7: Fixing views +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 @@ -200,9 +201,8 @@ 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 +Phase 5/8: Fixing table and database names +Phase 6/8: Checking and upgrading tables Processing databases information_schema mtr @@ -212,7 +212,8 @@ performance_schema sys sys.sys_config OK test -Phase 7/7: Running 'FLUSH PRIVILEGES' +Phase 7/8: uninstalling plugins +Phase 8/8: Running 'FLUSH PRIVILEGES' OK create user gigi@localhost; show create user gigi@localhost; diff --git a/mysql-test/mariadb-test-run.pl b/mysql-test/mariadb-test-run.pl index 42bd6c591fc..84adc3e5cb4 100755 --- a/mysql-test/mariadb-test-run.pl +++ b/mysql-test/mariadb-test-run.pl @@ -1796,7 +1796,7 @@ sub collect_mysqld_features { 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; mtr_init_args(\$args); diff --git a/mysql-test/suite/innodb/r/change_column_collation.result b/mysql-test/suite/innodb/r/change_column_collation.result index 132a57a52db..48d3cc16176 100644 --- a/mysql-test/suite/innodb/r/change_column_collation.result +++ b/mysql-test/suite/innodb/r/change_column_collation.result @@ -134,3 +134,12 @@ t CREATE TABLE `t` ( FULLTEXT KEY `a` (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_520_ci 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; diff --git a/mysql-test/suite/innodb/t/change_column_collation.test b/mysql-test/suite/innodb/t/change_column_collation.test index b70925cf411..edc298fe3e9 100644 --- a/mysql-test/suite/innodb/t/change_column_collation.test +++ b/mysql-test/suite/innodb/t/change_column_collation.test @@ -144,4 +144,13 @@ ALTER TABLE t MODIFY COLUMN a VARCHAR(512); SHOW CREATE 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 diff --git a/mysql-test/suite/innodb/t/restart.test b/mysql-test/suite/innodb/t/restart.test index a1e45b37f9c..8507f182be6 100644 --- a/mysql-test/suite/innodb/t/restart.test +++ b/mysql-test/suite/innodb/t/restart.test @@ -1,6 +1,7 @@ --source include/innodb_page_size.inc --source include/not_embedded.inc --source include/have_symlink.inc +--source include/not_as_root.inc let datadir= `select @@datadir`; let page_size= `select @@innodb_page_size`; diff --git a/mysql-test/suite/perfschema/t/bad_option.test b/mysql-test/suite/perfschema/t/bad_option.test index 5d4d49ed12c..4feb0468e66 100644 --- a/mysql-test/suite/perfschema/t/bad_option.test +++ b/mysql-test/suite/perfschema/t/bad_option.test @@ -6,6 +6,7 @@ --source include/not_embedded.inc --source include/have_perfschema.inc +--source include/not_as_root.inc let $error_log= $MYSQLTEST_VARDIR/log/my_restart.err; --error 0,1 diff --git a/mysql-test/suite/plugins/r/sql_error_log.result b/mysql-test/suite/plugins/r/sql_error_log.result index 34c711a1e8d..0329949a231 100644 --- a/mysql-test/suite/plugins/r/sql_error_log.result +++ b/mysql-test/suite/plugins/r/sql_error_log.result @@ -8,6 +8,7 @@ sql_error_log_rate 1 sql_error_log_rotate OFF sql_error_log_rotations 9 sql_error_log_size_limit 1000000 +sql_error_log_warnings ON set global sql_error_log_rate=1; select * from t_doesnt_exist; ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist diff --git a/mysql-test/suite/rpl/r/rpl_row_trigger_multi_db.result b/mysql-test/suite/rpl/r/rpl_row_trigger_multi_db.result new file mode 100644 index 00000000000..5dff8d96fda --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_row_trigger_multi_db.result @@ -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 diff --git a/mysql-test/suite/rpl/t/rpl_row_trigger_multi_db.test b/mysql-test/suite/rpl/t/rpl_row_trigger_multi_db.test new file mode 100644 index 00000000000..0ade0090116 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_row_trigger_multi_db.test @@ -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 diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index 43f26751f27..158dfc48935 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -99,7 +99,7 @@ static void calculate_block_sizes(MEM_ROOT *mem_root, size_t block_size, { size_t pre_alloc= *pre_alloc_size; - if (mem_root->flags&= ROOT_FLAG_MPROTECT) + if (mem_root->flags & ROOT_FLAG_MPROTECT) { mem_root->block_size= MY_ALIGN(block_size, my_system_page_size); if (pre_alloc) @@ -159,6 +159,8 @@ void init_alloc_root(PSI_memory_key key, MEM_ROOT *mem_root, size_t block_size, mem_root->min_malloc= 32 + REDZONE_SIZE; mem_root->block_size= MY_MAX(block_size, ROOT_MIN_BLOCK_SIZE); mem_root->flags= 0; + DBUG_ASSERT(!test_all_bits(mem_root->flags, + (MY_THREAD_SPECIFIC | MY_ROOT_USE_MPROTECT))); if (my_flags & MY_THREAD_SPECIFIC) mem_root->flags|= ROOT_FLAG_THREAD_SPECIFIC; if (my_flags & MY_ROOT_USE_MPROTECT) diff --git a/mysys/my_malloc.c b/mysys/my_malloc.c index b8f64de589e..a1a7a1303df 100644 --- a/mysys/my_malloc.c +++ b/mysys/my_malloc.c @@ -44,15 +44,12 @@ typedef struct my_memory_header my_memory_header; @return 0 - ok 1 - failure, abort the allocation */ -static void dummy(long long size __attribute__((unused)), - my_bool is_thread_specific __attribute__((unused))) -{} -static MALLOC_SIZE_CB update_malloc_size= dummy; +static MALLOC_SIZE_CB update_malloc_size= 0; void set_malloc_size_cb(MALLOC_SIZE_CB func) { - update_malloc_size= func ? func : dummy; + update_malloc_size= func; } @@ -106,7 +103,11 @@ void *my_malloc(PSI_memory_key key, size_t size, myf my_flags) int flag= MY_TEST(my_flags & MY_THREAD_SPECIFIC); mh->m_size= size | flag; mh->m_key= PSI_CALL_memory_alloc(key, size, & mh->m_owner); - update_malloc_size(size + HEADER_SIZE, flag); + if (update_malloc_size) + { + mh->m_size|=2; + update_malloc_size(size + HEADER_SIZE, flag); + } point= HEADER_TO_USER(mh); if (my_flags & MY_ZEROFILL) bzero(point, size); @@ -143,11 +144,11 @@ void *my_realloc(PSI_memory_key key, void *old_point, size_t size, myf my_flags) DBUG_RETURN(my_malloc(key, size, my_flags)); old_mh= USER_TO_HEADER(old_point); - old_size= old_mh->m_size & ~1; - old_flags= old_mh->m_size & 1; + old_size= old_mh->m_size & ~3; + old_flags= old_mh->m_size & 3; DBUG_ASSERT(old_mh->m_key == key || old_mh->m_key == PSI_NOT_INSTRUMENTED); - DBUG_ASSERT(old_flags == MY_TEST(my_flags & MY_THREAD_SPECIFIC)); + DBUG_ASSERT((old_flags & 1) == MY_TEST(my_flags & MY_THREAD_SPECIFIC)); size= ALIGN_SIZE(size); mh= sf_realloc(old_mh, size + HEADER_SIZE, my_flags); @@ -171,7 +172,8 @@ void *my_realloc(PSI_memory_key key, void *old_point, size_t size, myf my_flags) { mh->m_size= size | old_flags; mh->m_key= PSI_CALL_memory_realloc(key, old_size, size, & mh->m_owner); - update_malloc_size((longlong)size - (longlong)old_size, old_flags); + if (update_malloc_size && (old_flags & 2)) + update_malloc_size((longlong)size - (longlong)old_size, old_flags & 1); point= HEADER_TO_USER(mh); } @@ -197,11 +199,12 @@ void my_free(void *ptr) DBUG_VOID_RETURN; mh= USER_TO_HEADER(ptr); - old_size= mh->m_size & ~1; - old_flags= mh->m_size & 1; + old_size= mh->m_size & ~3; + old_flags= mh->m_size & 3; PSI_CALL_memory_free(mh->m_key, old_size, mh->m_owner); - update_malloc_size(- (longlong) old_size - HEADER_SIZE, old_flags); + if (update_malloc_size && (old_flags & 2)) + update_malloc_size(- (longlong) old_size - HEADER_SIZE, old_flags & 1); #ifndef SAFEMALLOC /* diff --git a/plugin/sql_errlog/sql_errlog.c b/plugin/sql_errlog/sql_errlog.c index 1454d4bd4dc..0b7771f1b89 100644 --- a/plugin/sql_errlog/sql_errlog.c +++ b/plugin/sql_errlog/sql_errlog.c @@ -39,6 +39,7 @@ static unsigned int rate; static unsigned long long size_limit; static unsigned int rotations; static char rotate; +static char warnings; static unsigned int count; LOGGER_HANDLE *logfile; @@ -67,12 +68,18 @@ static MYSQL_SYSVAR_STR(filename, filename, "The file to log sql errors to", NULL, NULL, "sql_errors.log"); +static MYSQL_SYSVAR_BOOL(warnings, warnings, + PLUGIN_VAR_OPCMDARG, + "Warnings. If set to 0, warnings are not logged.", + NULL, NULL, 1); + static struct st_mysql_sys_var* vars[] = { MYSQL_SYSVAR(rate), MYSQL_SYSVAR(size_limit), MYSQL_SYSVAR(rotations), MYSQL_SYSVAR(rotate), MYSQL_SYSVAR(filename), + MYSQL_SYSVAR(warnings), NULL }; @@ -85,7 +92,7 @@ static void log_sql_errors(MYSQL_THD thd __attribute__((unused)), (const struct mysql_event_general*)ev; if (rate && (event->event_subclass == MYSQL_AUDIT_GENERAL_ERROR || - event->event_subclass == MYSQL_AUDIT_GENERAL_WARNING)) + (warnings && event->event_subclass == MYSQL_AUDIT_GENERAL_WARNING))) { const char *type= (event->event_subclass == MYSQL_AUDIT_GENERAL_ERROR ? "ERROR" : "WARNING"); diff --git a/scripts/mariadb_performance_tables.sql b/scripts/mariadb_performance_tables.sql index 306160355de..3a7d0ef5261 100644 --- a/scripts/mariadb_performance_tables.sql +++ b/scripts/mariadb_performance_tables.sql @@ -47,7 +47,7 @@ PREPARE stmt FROM @str; EXECUTE 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'); PREPARE stmt FROM @str; diff --git a/scripts/mariadb_system_tables.sql b/scripts/mariadb_system_tables.sql index 0c33e40cf57..5d2f83b9f3c 100644 --- a/scripts/mariadb_system_tables.sql +++ b/scripts/mariadb_system_tables.sql @@ -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 @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 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'); @@ -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; DROP TABLE tmp_user_sys; - CREATE DEFINER='mariadb.sys'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS user AS SELECT Host, 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 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; 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; 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(64) collate utf8_bin, db_collation char(64) 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(64) collate utf8mb3_bin, db_collation char(64) 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. 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; EXECUTE stmt; @@ -162,13 +161,13 @@ DROP PREPARE stmt; -- 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; EXECUTE 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(64) collate utf8_bin, db_collation char(64) 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(64) collate utf8mb3_bin, db_collation char(64) 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 ( 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, sum_of_other_index_sizes BIGINT UNSIGNED NOT NULL, 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 ( 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, stat_description VARCHAR(1024) NOT NULL, 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 ( 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), INDEX (begin_timestamp), 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"); PREPARE stmt FROM @str; @@ -226,14 +225,14 @@ DROP PREPARE stmt; 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.', - 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.', - 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.', 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, 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); -- 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 ( 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.', - Host CHAR(255) CHARACTER SET utf8 COLLATE utf8_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_password TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.', + Host CHAR(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The host name of 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 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.', 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.', - Ssl_ca TEXT CHARACTER SET utf8 COLLATE utf8_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_cert TEXT CHARACTER SET utf8 COLLATE utf8_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_key TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.', + Ssl_ca TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.', + Ssl_capath TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The path to the Certificate Authority (CA) certificates.', + Ssl_cert TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The name of the SSL certificate file.', + 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 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.', 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', - 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', - Uuid TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.', + 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 utf8mb3 COLLATE utf8mb3_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs', + 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.', - Ssl_crl TEXT CHARACTER SET utf8 COLLATE utf8_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_crl TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin COMMENT 'The file used for the Certificate Revocation List (CRL)', + 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.', - 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); -- 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 ( 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, - 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, - 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_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_seqno INT UNSIGNED NOT NULL, Checkpoint_group_size INTEGER UNSIGNED 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); -- Don't create the table; MariaDB will have another implementation @@ -294,7 +293,7 @@ SET @str=CONCAT(@cmd, ' ENGINE=', @innodb_or_aria); #EXECUTE 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 set @had_proxies_priv_table= @@warning_count != 0; @@ -310,11 +309,11 @@ DROP TABLE tmp_proxies_priv; -- 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 -- build_gtid_pos_create_query() in sql/slave.cc diff --git a/scripts/mariadb_system_tables_data.sql b/scripts/mariadb_system_tables_data.sql index ab3dd704d2e..28d603cc559 100644 --- a/scripts/mariadb_system_tables_data.sql +++ b/scripts/mariadb_system_tables_data.sql @@ -28,7 +28,6 @@ SELECT LOWER( REPLACE((SELECT REPLACE(@@hostname,'_','\_')),'%','\%') )INTO @cur 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; - -- Fill "global_priv" table with default users allowing root access -- from local machine if "global_priv" table didn't exist before CREATE TEMPORARY TABLE tmp_user_nopasswd LIKE global_priv; diff --git a/scripts/mariadb_system_tables_fix.sql b/scripts/mariadb_system_tables_fix.sql index 7d8fcd9aa0f..dcc89e10059 100644 --- a/scripts/mariadb_system_tables_fix.sql +++ b/scripts/mariadb_system_tables_fix.sql @@ -1,5 +1,5 @@ -- 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 -- 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 # 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 # 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 enforce_storage_engine=NULL; 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 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 SET @hadGrantPriv:=0; 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, - add References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - add Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - add Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL; -ALTER TABLE db add Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - add References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - add Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - add Alter_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_general_ci DEFAULT 'N' NOT NULL; # 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; @@ -120,17 +121,17 @@ ALTER TABLE tables_priv MODIFY Db char(64) NOT NULL default '', MODIFY User char(128) binary 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, - CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; + CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin; ALTER TABLE tables_priv 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', 'Drop','Grant','References','Index','Alter', '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'; # @@ -141,7 +142,7 @@ ALTER TABLE tables_priv # ALTER TABLE columns_priv 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 MODIFY Host char(255) NOT NULL default '', @@ -150,18 +151,18 @@ ALTER TABLE columns_priv MODIFY Table_name char(64) NOT NULL default '', MODIFY Column_name char(64) NOT NULL default '', ENGINE=Aria, - CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin, + CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin, COMMENT='Column privileges'; ALTER TABLE columns_priv 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. # -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 @@ -172,13 +173,13 @@ SET @hadShowDbPriv:=0; SELECT @hadShowDbPriv:=1 FROM user WHERE Show_db_priv IS NOT NULL; ALTER TABLE user -ADD Show_db_priv enum('N','Y') COLLATE utf8_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 Create_tmp_table_priv enum('N','Y') COLLATE utf8_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 Execute_priv enum('N','Y') COLLATE utf8_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_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_slave_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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_db_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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_tmp_table_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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Execute_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 @@ -199,8 +200,8 @@ ADD max_connections int(11) unsigned NOT NULL DEFAULT 0 AFTER max_updates; # ALTER TABLE db -ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, -ADD Lock_tables_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 utf8mb3_general_ci DEFAULT 'N' 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 MODIFY Host char(255) 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 # of columns MariaDB expects in the user table. @@ -231,53 +232,53 @@ DELETE FROM plugin ALTER TABLE user 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 Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL; + MODIFY Select_priv enum('N','Y') COLLATE utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_general_ci DEFAULT 'N' NOT NULL, + MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL; ALTER TABLE db MODIFY Host char(255) NOT NULL default '', MODIFY Db char(64) 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 - MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - MODIFY Lock_tables_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_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 utf8mb3_general_ci DEFAULT 'N' NOT NULL; 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 - 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. @@ -316,9 +317,9 @@ ALTER TABLE slow_log SET GLOBAL log_slow_query = @old_log_state; ALTER TABLE plugin - MODIFY name varchar(64) COLLATE utf8_general_ci NOT NULL DEFAULT '', - MODIFY dl varchar(128) COLLATE utf8_general_ci NOT NULL DEFAULT '', - CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; + MODIFY name varchar(64) COLLATE utf8mb3_general_ci NOT NULL DEFAULT '', + MODIFY dl varchar(128) COLLATE utf8mb3_general_ci NOT NULL DEFAULT '', + CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci; # # 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) # -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 MODIFY 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 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv; # # 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 MODIFY 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 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv; # # 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) # -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 MODIFY 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 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv; # # 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 MODIFY 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 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 MODIFY 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 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv; # # 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; 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv; UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y' WHERE @hadCreateUserPriv = 0 AND (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 ENGINE=Aria, - CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; + CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin; ALTER TABLE procs_priv 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 MODIFY Routine_name char(64) - COLLATE utf8_general_ci DEFAULT '' NOT NULL; + COLLATE utf8mb3_general_ci DEFAULT '' NOT NULL; ALTER TABLE procs_priv 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 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', 'TIME_ROUND_FRACTIONAL' ) DEFAULT '' NOT NULL, - DEFAULT CHARACTER SET utf8; + DEFAULT CHARACTER SET utf8mb3; # Correct the character set and collation # 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 definer varchar(384) binary DEFAULT '' NOT NULL, MODIFY comment text binary NOT NULL; ALTER TABLE proc ADD character_set_client - char(32) collate utf8_bin DEFAULT NULL + char(32) collate utf8mb3_bin DEFAULT NULL AFTER comment; 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', 'PROCEDURE', @@ -514,10 +515,10 @@ UPDATE proc SET character_set_client = @@character_set_client WHERE character_set_client IS NULL; ALTER TABLE proc ADD collation_connection - char(64) collate utf8_bin DEFAULT NULL + char(64) collate utf8mb3_bin DEFAULT NULL AFTER character_set_client; ALTER TABLE proc MODIFY collation_connection - char(64) collate utf8_bin DEFAULT NULL; + char(64) collate utf8mb3_bin DEFAULT NULL; 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.") @@ -529,10 +530,10 @@ UPDATE proc SET collation_connection = @@collation_connection WHERE collation_connection IS NULL; ALTER TABLE proc ADD db_collation - char(64) collate utf8_bin DEFAULT NULL + char(64) collate utf8mb3_bin DEFAULT NULL AFTER collation_connection; ALTER TABLE proc MODIFY db_collation - char(64) collate utf8_bin DEFAULT NULL; + char(64) collate utf8mb3_bin DEFAULT NULL; 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.") @@ -552,7 +553,7 @@ ALTER TABLE proc MODIFY body_utf8 longblob DEFAULT NULL; # Change comment from char(64) to text ALTER TABLE proc MODIFY comment - text collate utf8_bin NOT NULL; + text collate utf8mb3_bin NOT NULL; # MDEV-7773: Stored Aggregate Functions 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; 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 MODIFY 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 utf8mb3 DEFAULT 'N' NOT NULL AFTER Create_user_priv; 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 MODIFY 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 utf8mb3 DEFAULT 'N' NOT NULL; # # EVENT table @@ -621,7 +622,10 @@ ALTER TABLE event MODIFY sql_mode 'SIMULTANEOUS_ASSIGNMENT', 'TIME_ROUND_FRACTIONAL' ) 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 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; ALTER TABLE event ADD character_set_client - char(32) collate utf8_bin DEFAULT NULL + char(32) collate utf8mb3_bin DEFAULT NULL AFTER time_zone; 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 - char(64) collate utf8_bin DEFAULT NULL + char(64) collate utf8mb3_bin DEFAULT NULL AFTER character_set_client; ALTER TABLE event MODIFY collation_connection - char(64) collate utf8_bin DEFAULT NULL; + char(64) collate utf8mb3_bin DEFAULT NULL; ALTER TABLE event ADD db_collation - char(64) collate utf8_bin DEFAULT NULL + char(64) collate utf8mb3_bin DEFAULT NULL AFTER collation_connection; ALTER TABLE event MODIFY db_collation - char(64) collate utf8_bin DEFAULT NULL; + char(64) collate utf8mb3_bin DEFAULT NULL; ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL AFTER db_collation; 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. set global event_scheduler=original; @@ -665,11 +669,11 @@ set global event_scheduler=original; SET @hadTriggerPriv := 0; 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 MODIFY 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 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL; 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; 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 MODIFY 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 utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER Trigger_priv; 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 # -ALTER TABLE user 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 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 utf8mb3_general_ci NOT NULL DEFAULT 'N'; SET @had_user_delete_history_priv := 0; 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 modify Delete_history_priv enum('N','Y') COLLATE utf8_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 modify Delete_history_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL DEFAULT 'N'; +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 utf8mb3_general_ci NOT NULL DEFAULT 'N'; +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 utf8mb3_general_ci NOT NULL DEFAULT 'N'; 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; 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 NOT NULL DEFAULT CURRENT_TIMESTAMP after password_expired; 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 is_role enum('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER account_locked; +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 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 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. --- we want password_expired column to have collation utf8_general_ci. +-- Somewhere above, we ran ALTER TABLE user .... CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_bin. +-- we want password_expired column to have collation utf8mb3_general_ci. -- Order columns correctly that were not ordered until MDEV-23201 (ff8ffef3e1915d7a9caa07d9461cd8d47c4baf98) 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 password_expired ENUM('N', 'Y') COLLATE utf8_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 password_expired ENUM('N', 'Y') COLLATE utf8mb3_general_ci DEFAULT 'N' NOT NULL AFTER authentication_string, + 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 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, @@ -731,7 +735,7 @@ ALTER TABLE user MODIFY plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL -- time until 10.4 added. MODIFY IF EXISTS password_last_changed timestamp NOT NULL 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 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. -- 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 columns_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 proxies_priv modify User char(128) COLLATE utf8_bin not null default ''; -alter table proxies_priv modify Proxied_user char(128) COLLATE utf8_bin not null default ''; -alter table proxies_priv modify Grantor 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 utf8mb3_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 utf8mb3_bin 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 tables_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 utf8mb3_bin not null default ''; # Activate the new, possible modified privilege tables # 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 // 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', 1*('Y'=Select_priv)+ 2*('Y'=Insert_priv)+ diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index 9e31ccb3338..ad9f1c2cb4e 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -43,12 +43,12 @@ const TABLE_FIELD_TYPE event_table_fields[ET_FIELD_COUNT] = { { STRING_WITH_LEN("db") }, { STRING_WITH_LEN("char(64)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("name") }, { STRING_WITH_LEN("char(64)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { 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("varchar(") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { 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("char(64)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { 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("char(32)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("collation_connection") }, { STRING_WITH_LEN("char(") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("db_collation") }, { STRING_WITH_LEN("char(") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("body_utf8") }, diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 06d78017ac4..1874f405338 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -3116,14 +3116,15 @@ error: @param name Name of table file (without extension) @return Operation status - @retval true Failure - @retval false Success + @retval 0 success + @retval 1 no par file + @retval # other error @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. */ -bool ha_partition::read_par_file(const char *name) +int ha_partition::read_par_file(const char *name) { char buff[FN_REFLEN]; 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)); if (m_file_buffer) - DBUG_RETURN(false); + DBUG_RETURN(0); fn_format(buff, name, "", ha_par_ext, MY_APPEND_EXT); /* Following could be done with mysql_file_stat to read in whole file */ if ((file= mysql_file_open(key_file_ha_partition_par, 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))) goto err1; len_words= uint4korr(buff); @@ -3201,12 +3202,12 @@ bool ha_partition::read_par_file(const char *name) } (void) mysql_file_close(file, MYF(0)); - DBUG_RETURN(false); + DBUG_RETURN(0); err2: err1: (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 is_clone) { + int error; DBUG_ENTER("ha_partition::get_from_handler_file"); DBUG_PRINT("enter", ("table name: '%s'", name)); if (m_file_buffer) DBUG_RETURN(false); - if (read_par_file(name)) - DBUG_RETURN(true); + if ((error= read_par_file(name))) + { + 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); 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 ****************************************************************************/ @@ -12204,7 +12283,7 @@ ulonglong ha_partition::index_blocks(uint index, uint ranges, ha_rows rows) ulonglong blocks= 0; ulonglong active_partitions= bitmap_bits_set(&m_part_info->read_partitions); /* Assume rows are evenly dived among partitions */ - rows= (rows+ active_partitions -1) / active_partitions; + rows= (rows+ active_partitions -1) / MY_MAX(active_partitions, 1); for (uint i= bitmap_get_first_set(&m_part_info->read_partitions); i < m_tot_parts; diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 8a3482fd9e5..2279c88bcc5 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -591,10 +591,11 @@ private: */ bool create_handler_file(const char *name); 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); bool get_from_handler_file(const char *name, MEM_ROOT *mem_root, bool is_clone); + bool re_create_par_file(const char *name); bool new_handlers_from_part_info(MEM_ROOT *mem_root); bool create_handlers(MEM_ROOT *mem_root); void clear_handler_file(); diff --git a/sql/handler.cc b/sql/handler.cc index 7ef0a51acb0..269bb29da84 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -4971,8 +4971,12 @@ static bool update_frm_version(TABLE *table) 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 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); strxmov(path, table->s->normalized_path.str, reg_ext, NullS); diff --git a/sql/log_event.h b/sql/log_event.h index 41989192b53..1e2541ea495 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -4740,6 +4740,51 @@ protected: uint m_key_nr; /* Key number */ 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_row(rpl_group_info *); int write_row(rpl_group_info *, const bool); diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc index 6c71381a1fb..ce00e12550b 100644 --- a/sql/log_event_server.cc +++ b/sql/log_event_server.cc @@ -1137,7 +1137,7 @@ bool Query_log_event::write() if (catalog_len) // i.e. this var is inited (false for 4.0 events) { store_str_with_code_and_len(&start, - catalog, catalog_len, Q_CATALOG_NZ_CODE); + catalog, catalog_len, (uint) Q_CATALOG_NZ_CODE); /* In 5.0.x where x<4 masters we used to store the end zero here. This was a waste of one byte so we don't do it in x>=4 masters. We change code to @@ -5029,6 +5029,7 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi) " (master had triggers)" : "")); if (table) { + Rows_log_event::Db_restore_ctx restore_ctx(this); master_had_triggers= table->master_had_triggers; bool transactional_table= table->file->has_transactions_and_rollback(); table->file->prepare_for_insert(get_general_type_code() != WRITE_ROWS_EVENT); @@ -6956,7 +6957,6 @@ Write_rows_log_event::do_exec_row(rpl_group_info *rgi) { DBUG_ASSERT(m_table != NULL); const char *tmp= thd->get_proc_info(); - LEX_CSTRING tmp_db= thd->db; char *message, msg[128]; const LEX_CSTRING &table_name= m_table->s->table_name; const char quote_char= @@ -6964,7 +6964,6 @@ Write_rows_log_event::do_exec_row(rpl_group_info *rgi) my_snprintf(msg, sizeof msg, "Write_rows_log_event::write_row() on table %c%.*s%c", quote_char, int(table_name.length), table_name.str, quote_char); - thd->reset_db(&m_table->s->db); message= msg; int error; @@ -6986,7 +6985,6 @@ Write_rows_log_event::do_exec_row(rpl_group_info *rgi) my_error(ER_UNKNOWN_ERROR, MYF(0)); } - thd->reset_db(&tmp_db); return error; } @@ -7589,7 +7587,6 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi) { int error; const char *tmp= thd->get_proc_info(); - LEX_CSTRING tmp_db= thd->db; char *message, msg[128]; const LEX_CSTRING &table_name= m_table->s->table_name; const char quote_char= @@ -7597,7 +7594,6 @@ int Delete_rows_log_event::do_exec_row(rpl_group_info *rgi) my_snprintf(msg, sizeof msg, "Delete_rows_log_event::find_row() on table %c%.*s%c", quote_char, int(table_name.length), table_name.str, quote_char); - thd->reset_db(&m_table->s->db); message= msg; const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); DBUG_ASSERT(m_table != NULL); @@ -7656,7 +7652,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 m_table->file->ha_index_or_rnd_end(); } - thd->reset_db(&tmp_db); thd_proc_info(thd, tmp); return error; } @@ -7756,7 +7751,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi) const bool invoke_triggers= (m_table->triggers && do_invoke_trigger()); const char *tmp= thd->get_proc_info(); DBUG_ASSERT(m_table != NULL); - LEX_CSTRING tmp_db= thd->db; char *message, msg[128]; const LEX_CSTRING &table_name= m_table->s->table_name; const char quote_char= @@ -7764,7 +7758,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi) my_snprintf(msg, sizeof msg, "Update_rows_log_event::find_row() on table %c%.*s%c", quote_char, int(table_name.length), table_name.str, quote_char); - thd->reset_db(&m_table->s->db); message= msg; #ifdef WSREP_PROC_INFO @@ -7793,7 +7786,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi) if ((m_curr_row= m_curr_row_end)) unpack_current_row(rgi, &m_cols_ai); thd_proc_info(thd, tmp); - thd->reset_db(&tmp_db); return error; } @@ -7882,7 +7874,6 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi) err: thd_proc_info(thd, tmp); - thd->reset_db(&tmp_db); m_table->file->ha_index_or_rnd_end(); return error; } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 1e168c4b5f1..dca3834f56f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -281,6 +281,12 @@ extern "C" sig_handler handle_fatal_signal(int sig); int init_io_cache_encryption(); +extern "C" +{ + static void my_malloc_size_cb_func(long long size, + my_bool is_thread_specific); +} + /* Constants */ #include // ORACLE_WELCOME_COPYRIGHT_NOTICE diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 89162babb8e..062f57ec9cb 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -11177,7 +11177,7 @@ int SEL_ARG::number_of_eq_groups(uint group_key_parts) const cur= first(); do { - if ((cur->min_flag | cur->min_flag) & + if ((cur->min_flag | cur->max_flag) & (NO_MIN_RANGE | NO_MAX_RANGE | NEAR_MIN | NEAR_MAX | GEOM_FLAG)) return -1; if (min_value != max_value && !min_max_are_equal()) diff --git a/sql/sp.cc b/sql/sp.cc index 6cfe1045b0c..de8de97c91c 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -122,12 +122,12 @@ TABLE_FIELD_TYPE proc_table_fields[MYSQL_PROC_FIELD_COUNT] = { { STRING_WITH_LEN("db") }, { STRING_WITH_LEN("char(64)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("name") }, { STRING_WITH_LEN("char(64)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { 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("char(64)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { 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("varchar(") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { 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("text") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("character_set_client") }, { STRING_WITH_LEN("char(32)") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("collation_connection") }, { STRING_WITH_LEN("char(") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("db_collation") }, { STRING_WITH_LEN("char(") }, - { STRING_WITH_LEN("utf8mb3") } + { STRING_WITH_LEN("utf8mb") } }, { { STRING_WITH_LEN("body_utf8") }, diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index a74c117fd08..73efd9e1e00 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6067,6 +6067,11 @@ static bool __attribute__ ((noinline)) execute_show_status(THD *thd, TABLE_LIST *all_tables) { bool res; + +#if defined(__GNUC__) && (__GNUC__ >= 13) +#pragma GCC diagnostic ignored "-Wdangling-pointer" +#endif + system_status_var old_status_var= thd->status_var; thd->initial_status_var= &old_status_var; WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); diff --git a/sql/sql_priv.h b/sql/sql_priv.h index 5f2074851e1..d594238b807 100644 --- a/sql/sql_priv.h +++ b/sql/sql_priv.h @@ -194,7 +194,7 @@ /* The rest of the file is included in the server only */ #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_UNION (1ULL << 1) #define OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION (1ULL << 2) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 2baaf0119ef..a158ca7763c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7926,12 +7926,15 @@ static double apply_selectivity_for_table(JOIN_TAB *s, /* This is only taking into considering constant key parts used with this table! - If no such conditions existed the following should hold: + If no such conditions existed the following should normally hold: s->table->opt_range_condition_rows == s->found_rows == s->records. + The case when this does not hold is when using 'best splitting' + in which case s->records may be less than s->found_rows; */ DBUG_ASSERT(s->table->opt_range_condition_rows <= s->found_records); - dbl_records= rows2double(s->table->opt_range_condition_rows); + dbl_records= rows2double(MY_MIN(s->table->opt_range_condition_rows, + s->records)); } DBUG_ASSERT(dbl_records <= s->records); diff --git a/sql/sql_show.cc b/sql/sql_show.cc index fa95aa66b0f..a8162614462 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -948,7 +948,7 @@ find_files(THD *thd, Dynamic_array *files, LEX_CSTRING *db, 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); else my_error(ER_CANT_READ_DIR, MYF(0), path, my_errno); @@ -2986,7 +2986,7 @@ void Show_explain_request::call_in_target_thread() target_thd->set_n_backup_active_arena((Query_arena*)request_thd, &backup_arena); - query_str.copy(target_thd->query(), + query_str.copy(target_thd->query(), target_thd->query_length(), target_thd->query_charset()); @@ -3137,6 +3137,8 @@ int fill_show_explain_or_analyze(THD *thd, TABLE_LIST *table, COND *cond, if ((tmp= find_thread_by_id(thread_id))) { Security_context *tmp_sctx= tmp->security_ctx; + MEM_ROOT explain_mem_root, *save_mem_root; + /* If calling_user==NULL, calling thread has SUPER or PROCESS privilege, and so can do SHOW EXPLAIN/SHOW ANALYZE on any user. @@ -3162,7 +3164,8 @@ int fill_show_explain_or_analyze(THD *thd, TABLE_LIST *table, COND *cond, bool bres; /* Ok we've found the thread of interest and it won't go away because - we're holding its LOCK_thd_kill. Post it a SHOW EXPLAIN/SHOW ANALYZE request. + we're holding its LOCK_thd_kill. Post it a SHOW EXPLAIN/SHOW ANALYZE + request. */ bool timed_out; int timeout_sec= 30; @@ -3170,7 +3173,9 @@ int fill_show_explain_or_analyze(THD *thd, TABLE_LIST *table, COND *cond, explain_req.is_json_format= json_format; select_result_explain_buffer *explain_buf; - explain_buf= new select_result_explain_buffer(thd, table->table); + if (!(explain_buf= new (thd->mem_root) + select_result_explain_buffer(thd, table->table))) + DBUG_RETURN(1); explain_req.is_analyze= is_analyze; explain_req.explain_buf= explain_buf; @@ -3178,8 +3183,19 @@ int fill_show_explain_or_analyze(THD *thd, TABLE_LIST *table, COND *cond, explain_req.request_thd= thd; explain_req.failed_to_produce= FALSE; + /* + Do not use default memroot as this is only to be used by the + target thread (It's marked as thread MY_THREAD_SPECIFIC). + */ + init_sql_alloc(key_memory_thd_main_mem_root, + &explain_mem_root, 0, 8000, MYF(0)); + save_mem_root= thd->mem_root; + thd->mem_root= &explain_mem_root; + /* Ok, we have a lock on target->LOCK_thd_kill, can call: */ - bres= tmp->apc_target.make_apc_call(thd, &explain_req, timeout_sec, &timed_out); + bres= tmp->apc_target.make_apc_call(thd, &explain_req, timeout_sec, + &timed_out); + thd->mem_root= save_mem_root; if (bres || explain_req.failed_to_produce) { @@ -3224,6 +3240,7 @@ int fill_show_explain_or_analyze(THD *thd, TABLE_LIST *table, COND *cond, push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, ER_YES, warning_text); } + free_root(&explain_mem_root, MYF(0)); DBUG_RETURN(bres); } my_error(ER_NO_SUCH_THREAD, MYF(0), (ulong) thread_id); diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index a0ef89ff0f5..beeee9da72f 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -482,6 +482,14 @@ bool Sql_cmd_truncate_table::truncate_table(THD *thd, TABLE_LIST *table_ref) if (lock_table(thd, table_ref, &hton_can_recreate)) DBUG_RETURN(TRUE); + /* + This is mainly here for truncate_notembedded.test, but it is still + useful to check killed after we got the lock + */ + + if (thd->killed) + DBUG_RETURN(TRUE); + if (hton_can_recreate) { /* diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 9eb4bf382b6..10588b54fa5 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -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 wrong_checksum= view_checksum(thd, view) != HA_ADMIN_OK; 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); DBUG_RETURN(ret); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 24284402e84..70ecb47e799 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -7993,6 +7993,7 @@ mi_repair_type: opt_view_repair_type: /* empty */ { } + | FOR_SYM UPGRADE_SYM { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; } | FROM MYSQL_SYM { Lex->check_opt.sql_flags|= TT_FROM_MYSQL; } ; diff --git a/sql/table.cc b/sql/table.cc index f6877e85b70..7db30477a51 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1196,7 +1196,10 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table, ? VCOL_GENERATED_STORED : VCOL_GENERATED_VIRTUAL; expr_length= uint2korr(pos+1); if (table->s->mysql_version > 50700 && table->s->mysql_version < 100000) + { + table->s->keep_original_mysql_version= 1; pos+= 4; // MySQL from 5.7 + } else 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 @@ -1763,6 +1793,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, uint vcol_screen_length; uchar *vcol_screen_pos; LEX_CUSTRING options; + LEX_CSTRING se_name= empty_clex_str; KEY first_keyinfo; uint len; 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) { uint str_db_type_length= uint2korr(next_chunk); - LEX_CSTRING name; - name.str= (char*) next_chunk + 2; - name.length= str_db_type_length; + se_name.str= (char*) next_chunk + 2; + se_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) && 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 && !strncmp((char *) next_chunk + 2, "partition", 9)) { - /* - 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"); + if (change_to_partiton_engine(&se_name, &se_plugin)) goto err; - } - plugin_unlock(NULL, se_plugin); - se_plugin= ha_lock_engine(NULL, partition_hton); } #endif else if (!tmp_plugin) { /* purecov: begin inspected */ - ((char*) name.str)[name.length]=0; - my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), name.str); + ((char*) se_name.str)[se_name.length]=0; + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), se_name.str); goto err; /* purecov: end */ } @@ -2053,6 +2070,13 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, { 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 if (partition_info_str_len) @@ -2320,6 +2344,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, if (share->mysql_version >= 50700 && share->mysql_version < 100000 && vcol_screen_length) { + share->keep_original_mysql_version= 1; /* MySQL 5.7 stores the null bits for not stored fields last. Calculate the position for them. @@ -2597,8 +2622,12 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, } /* 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; + } if (interval_nr && attr.charset->mbminlen > 1 && !interval_unescaped[interval_nr - 1]) @@ -4210,7 +4239,6 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share, outparam->in_use= thd; outparam->s= share; outparam->db_stat= db_stat; - outparam->write_row_record= NULL; outparam->status= STATUS_NO_RECORD; if (share->incompatible_version && @@ -5439,7 +5467,8 @@ Table_check_intact::check(TABLE *table, const TABLE_FIELD_DEF *table_def) error= TRUE; } 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: " "expected the type of column '%s' at position %d " @@ -6707,7 +6736,7 @@ void TABLE_LIST::register_want_access(privilege_t want_access) */ #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_PRINT("enter", ("table: %s", alias.str)); @@ -6732,8 +6761,8 @@ bool TABLE_LIST::prepare_view_security_context(THD *thd) { 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 { @@ -6815,11 +6844,33 @@ bool TABLE_LIST::prepare_security(THD *thd) TABLE_LIST *tbl; DBUG_ENTER("TABLE_LIST::prepare_security"); #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; DBUG_ASSERT(!prelocking_placeholder); - if (prepare_view_security_context(thd)) - DBUG_RETURN(TRUE); + if (prepare_view_security_context(thd, upgrade_check)) + { + 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); opt_trace_disable_if_no_security_context_access(thd); while ((tbl= tb++)) @@ -6845,7 +6896,7 @@ bool TABLE_LIST::prepare_security(THD *thd) #else while ((tbl= tb++)) tbl->grant.privilege= ALL_KNOWN_ACL; -#endif +#endif /* NO_EMBEDDED_ACCESS_CHECKS */ DBUG_RETURN(FALSE); } diff --git a/sql/table.h b/sql/table.h index 393c2b97a0a..589903d7028 100644 --- a/sql/table.h +++ b/sql/table.h @@ -901,6 +901,8 @@ struct TABLE_SHARE bool has_update_default_function; bool can_do_row_logging; /* 1 if table supports RBR */ bool long_unique_table; + /* 1 if frm version cannot be updated as part of upgrade */ + bool keep_original_mysql_version; bool optimizer_costs_inited; ulong table_map_id; /* for row-based replication */ @@ -2888,7 +2890,7 @@ struct TABLE_LIST bool prepare_security(THD *thd); #ifndef NO_EMBEDDED_ACCESS_CHECKS 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 /* Cleanup for re-execution in a prepared statement or a stored diff --git a/sql/wsrep_plugin.cc b/sql/wsrep_plugin.cc index f062f005ad5..477233c48e4 100644 --- a/sql/wsrep_plugin.cc +++ b/sql/wsrep_plugin.cc @@ -131,7 +131,7 @@ static void wsrep_provider_sysvar_update(THD *thd, T new_value= *((T *) save); auto options= Wsrep_server_state::get_options(); - if (options->set(opt->name(), std::move(make_option_value(new_value)))) + if (options->set(opt->name(), make_option_value(new_value))) { my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), opt->name(), make_option_value(new_value)->as_string()); diff --git a/storage/connect/libdoc.cpp b/storage/connect/libdoc.cpp index 14e1e44895c..67f22ce29e9 100644 --- a/storage/connect/libdoc.cpp +++ b/storage/connect/libdoc.cpp @@ -600,7 +600,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp) if (trace(1)) htrc("Calling xmlPathInit\n"); - xmlXPathInit(); + xmlInitParser(); if (trace(1)) htrc("Calling xmlXPathNewContext Docp=%p\n", Docp); diff --git a/storage/connect/mysql-test/connect/r/drop-open-error.result b/storage/connect/mysql-test/connect/r/drop-open-error.result index 34f58a845dc..a5d1e89307b 100644 --- a/storage/connect/mysql-test/connect/r/drop-open-error.result +++ b/storage/connect/mysql-test/connect/r/drop-open-error.result @@ -3,7 +3,7 @@ create table tcon engine=connect table_type=mysql CONNECTION='mysql://root@local ERROR HY000: Too long value for 'SRCDEF' drop table mdev9949; Warnings: -Warning 1017 Can't find file: './test/mdev9949.dos' (errno: 2 "No such file or directory") +Warning 1017 Can't find file: 'MYSQLD_DATADIR/test/mdev9949.dos' (errno: 2 "No such file or directory") drop table t1; select @@secure_file_priv 'must be NULL'; must be NULL diff --git a/storage/connect/mysql-test/connect/t/drop-open-error.test b/storage/connect/mysql-test/connect/t/drop-open-error.test index 0b73ac98779..69e634e82bd 100644 --- a/storage/connect/mysql-test/connect/t/drop-open-error.test +++ b/storage/connect/mysql-test/connect/t/drop-open-error.test @@ -14,6 +14,7 @@ create table tcon engine=connect table_type=mysql CONNECTION='mysql://root@local # copy the invalid frm (as created by the statement above before the MDEV-9949 fix) copy_file $MTR_SUITE_DIR/std_data/mdev9949.frm $datadir/test/mdev9949.frm; +--replace_result $datadir MYSQLD_DATADIR/ ./ MYSQLD_DATADIR/ drop table mdev9949; drop table t1; diff --git a/storage/connect/tabext.cpp b/storage/connect/tabext.cpp index f558cb04f4d..f3a1faf9218 100644 --- a/storage/connect/tabext.cpp +++ b/storage/connect/tabext.cpp @@ -330,7 +330,7 @@ bool TDBEXT::MakeSrcdef(PGLOBAL g) char *catp = strstr(Srcdef, "%s"); if (catp) { - char *fil1 = 0, *fil2; + char *fil1 = 0, *fil2 = 0; PCSZ ph = ((EXTDEF*)To_Def)->Phpos; if (!ph) diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 406baf3e662..cb6ee389ff1 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -1387,7 +1387,8 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx for (unsigned i= 0; i < index->n_fields; i++) { 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; for (uint j= 0; j < altered_table.s->fields; j++) { diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index 71b7dd423b7..aa52169e6bb 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -1567,9 +1567,11 @@ template inline void fil_space_t::flush() flush_low(); else { - if (!(acquire_low() & (STOPPING | CLOSING))) + if (!(acquire_low(STOPPING | CLOSING) & (STOPPING | CLOSING))) + { flush_low(); - release(); + release(); + } } } diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 82d4ba3afde..b4a5957bb5e 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -2673,9 +2673,9 @@ restart: TRX_SYS_MAX_UNDO_SPACES, "compatibility"); /* The entire undo tablespace will be reinitialized by 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]= - { lsn, page_no }; + { start_lsn, page_no }; if (!store && undo_space_trunc) undo_space_trunc(space_id); #endif diff --git a/storage/maria/ma_blockrec.c b/storage/maria/ma_blockrec.c index c56721a2359..bc1d44d42a3 100644 --- a/storage/maria/ma_blockrec.c +++ b/storage/maria/ma_blockrec.c @@ -4744,7 +4744,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record, uchar *data, uchar *end_of_data) { 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; my_bool found_blob= 0; MARIA_EXTENT_CURSOR extent; diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_31463.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_31463.result new file mode 100644 index 00000000000..78503c66cbb --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_31463.result @@ -0,0 +1,27 @@ +# +# MDEV-31463 SIGSEGV in server_mysql_send_query | server_mysql_real_query +# +for master_1 +for child2 +for child3 +CREATE SERVER $srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +SET @old_wait_timeout = @@global.wait_timeout; +SET GLOBAL wait_timeout=1; +CREATE TABLE t (c INT KEY,c1 BLOB,c2 TEXT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv_mdev_31463"'; +XA START 'a'; +INSERT INTO t VALUES (0,0,0,0); +ERROR 21S01: Column count doesn't match value count at row 1 +SELECT SLEEP (1); +SLEEP (1) +0 +INSERT INTO t VALUES (1,2,3),(4,5,6),(7,8,9); +ERROR 08S01: Got an error writing communication packets +SELECT * FROM information_schema.key_column_usage; +XA END 'a'; +XA PREPARE 'a'; +XA COMMIT 'a'; +SET GLOBAL wait_timeout=@old_wait_timeout; +drop table t; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_31463.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_31463.test new file mode 100644 index 00000000000..4722cf06f2a --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_31463.test @@ -0,0 +1,37 @@ +--echo # +--echo # MDEV-31463 SIGSEGV in server_mysql_send_query | server_mysql_real_query +--echo # + +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +--let $srv=srv_mdev_31463 +evalp CREATE SERVER $srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); + +SET @old_wait_timeout = @@global.wait_timeout; +SET GLOBAL wait_timeout=1; +eval CREATE TABLE t (c INT KEY,c1 BLOB,c2 TEXT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "$srv"'; +XA START 'a'; +--error ER_WRONG_VALUE_COUNT_ON_ROW +INSERT INTO t VALUES (0,0,0,0); +SELECT SLEEP (1); +--error ER_NET_ERROR_ON_WRITE +INSERT INTO t VALUES (1,2,3),(4,5,6),(7,8,9); +--disable_result_log +SELECT * FROM information_schema.key_column_usage; +--enable_result_log + +XA END 'a'; +XA PREPARE 'a'; +XA COMMIT 'a'; +SET GLOBAL wait_timeout=@old_wait_timeout; +drop table t; + +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index 90b8ededd6c..e9a07ad4ee5 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -13387,18 +13387,19 @@ int spider_mbase_handler::sts_mode_exchange( } /** Set the session lock wait time out */ -int spider_db_mbase::set_lock_wait_timeout(uint timeout) +static int spider_set_lock_wait_timeout(uint seconds, SPIDER_CONN *conn, + int *need_mon) { - String query(0); + char query[512];; int error_num; DBUG_ENTER("spider_db_set_lock_wait_timeout"); - query.append(STRING_WITH_LEN( - "set @old_lock_wait_timeout=@@session.lock_wait_timeout;" - "set session lock_wait_timeout=")); - query.append_ulonglong(timeout); - query.append(STRING_WITH_LEN(";")); - if ((error_num = exec_query(query.c_ptr(), query.length(), -1))) - DBUG_RETURN(error_num); + size_t query_len = + my_snprintf(query, sizeof(query), + "set @old_lock_wait_timeout=@@session.lock_wait_timeout;" + "set session lock_wait_timeout=%d;", + seconds); + if (spider_db_query(conn, query, query_len, -1, need_mon)) + DBUG_RETURN(spider_db_errorno(conn)); spider_db_result *result; do { st_spider_db_request_key request_key= {1, 1, NULL, 1, NULL}; @@ -13486,9 +13487,10 @@ int spider_mbase_handler::show_table_status( spider_setup_for_query(spider, conn, link_idx); spider_conn_set_timeout_from_share( conn, link_idx, spider->wide_handler->trx->thd, share); + if ((error_num = spider_db_set_names(spider, conn, link_idx)) || - (error_num = - ((spider_db_mbase *) conn->db_conn)->set_lock_wait_timeout(1)) || + (error_num = spider_set_lock_wait_timeout( + 1, conn, &spider->need_mons[link_idx])) || /* Executes the `show table status` query */ (spider_db_query( conn, @@ -13510,7 +13512,7 @@ int spider_mbase_handler::show_table_status( spider->wide_handler->trx->thd, share); if ((error_num = - ((spider_db_mbase *) conn->db_conn)->set_lock_wait_timeout(1))) + spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx]))) DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); if (spider_db_query( conn, @@ -13644,7 +13646,7 @@ int spider_mbase_handler::show_index( spider->wide_handler->trx->thd, share); if ((error_num = spider_db_set_names(spider, conn, link_idx)) || (error_num = - ((spider_db_mbase *) conn->db_conn)->set_lock_wait_timeout(1)) || + spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx])) || (spider_db_query( conn, mysql_share->show_index[pos].ptr(), @@ -13665,7 +13667,7 @@ int spider_mbase_handler::show_index( spider->wide_handler->trx->thd, share); if ((error_num = - ((spider_db_mbase *) conn->db_conn)->set_lock_wait_timeout(1))) + spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx]))) DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); if (spider_db_query( conn, diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h index ba521a58fb8..ac0726c17db 100644 --- a/storage/spider/spd_db_mysql.h +++ b/storage/spider/spd_db_mysql.h @@ -514,8 +514,6 @@ public: int *need_mon ); - /** Set the global lock wait time out */ - int set_lock_wait_timeout(uint timeout); /** Reset the global lock wait time out */ int reset_lock_wait_timeout();