1203 lines
44 KiB
Plaintext
1203 lines
44 KiB
Plaintext
-- source include/no_valgrind_without_big.inc
|
|
-- source include/mysql_upgrade_preparation.inc
|
|
|
|
#
|
|
# Basic test that we can run mysql_upgrde and that it finds the
|
|
# expected binaries it uses.
|
|
#
|
|
--echo Run mysql_upgrade once
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
# It should have created a file in the MySQL Servers datadir
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
file_exists $MYSQLD_DATADIR/mysql_upgrade_info;
|
|
|
|
--echo Run it again - should say already completed
|
|
--replace_result $MYSQL_SERVER_VERSION VERSION
|
|
--error 2
|
|
--exec $MYSQL_UPGRADE --skip-verbose 2>&1
|
|
|
|
# It should have created a file in the MySQL Servers datadir
|
|
file_exists $MYSQLD_DATADIR/mysql_upgrade_info;
|
|
|
|
--echo Force should run it regardless of wether it's been run before
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
# It should have created a file in the MySQL Servers datadir
|
|
file_exists $MYSQLD_DATADIR/mysql_upgrade_info;
|
|
|
|
|
|
#
|
|
# Bug #25452 mysql_upgrade access denied.
|
|
#
|
|
|
|
# Password protect a root account and run mysql_upgrade
|
|
|
|
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
|
|
GRANT ALL ON *.* TO mysqltest1@'%';
|
|
--echo Run mysql_upgrade with password protected account
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force --user=mysqltest1 --password=sakila 2>&1
|
|
|
|
DROP USER mysqltest1@'%';
|
|
|
|
|
|
#
|
|
# Bug #26639 mysql_upgrade exits successfully even if external command failed
|
|
#
|
|
|
|
--echo Run mysql_upgrade with a non existing server socket
|
|
--replace_result $MYSQLTEST_VARDIR var
|
|
--replace_regex /.*mysqlcheck.*: Got/mysqlcheck: Got/ /\([0-9]*\)/(errno)/
|
|
--error 11
|
|
# NC: Added --skip-version-check, as the version check would fail when
|
|
# mysql_upgrade tries to get the server version.
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force --host=not_existing_host --skip-version-check 2>&1
|
|
|
|
#
|
|
# Bug #28401 mysql_upgrade Failed with STRICT_ALL_TABLES, ANSI_QUOTES and NO_ZERO_DATE
|
|
#
|
|
|
|
# The SQL commands used by mysql_upgrade are written to be run
|
|
# with sql_mode set to '' - thus the scripts should change sql_mode
|
|
# for the session to make sure the SQL is legal.
|
|
|
|
# Test by setting sql_mode before running mysql_upgrade
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
--echo #
|
|
--echo # Bug #41569 mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table
|
|
--echo # but does not set values.
|
|
--echo #
|
|
|
|
# Create a stored procedure and set the fields in question to null.
|
|
# When running mysql_upgrade, a warning should be written.
|
|
|
|
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';
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2> $MYSQLTEST_VARDIR/tmp/41569.txt
|
|
CALL testproc();
|
|
DROP PROCEDURE testproc;
|
|
--cat_file $MYSQLTEST_VARDIR/tmp/41569.txt
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/41569.txt
|
|
|
|
|
|
--echo #
|
|
--echo # Bug #53613: mysql_upgrade incorrectly revokes
|
|
--echo # TRIGGER privilege on given table
|
|
--echo #
|
|
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode= (SELECT replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
|
|
GRANT USAGE ON *.* TO 'user3'@'%';
|
|
SET sql_mode= @orig_sql_mode;
|
|
GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%';
|
|
--echo Run mysql_upgrade with all privileges on a user
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
SHOW GRANTS FOR 'user3'@'%';
|
|
|
|
DROP USER 'user3'@'%';
|
|
|
|
--echo End of 5.1 tests
|
|
|
|
|
|
#
|
|
# Test the --upgrade-system-tables option
|
|
#
|
|
--replace_result $MYSQLTEST_VARDIR var
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force --upgrade-system-tables
|
|
|
|
--echo #
|
|
--echo # Bug#12688860 : SECURITY RECOMMENDATION: PASSWORDS ON CLI
|
|
--echo #
|
|
--exec $MYSQL_UPGRADE -uroot --password= --skip-verbose --force 2>&1
|
|
|
|
|
|
--echo #
|
|
--echo # Bug#11827359 60223: MYSQL_UPGRADE PROBLEM WITH OPTION
|
|
--echo # SKIP-WRITE-BINLOG
|
|
--echo #
|
|
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
|
|
--echo # Droping the previously created mysql_upgrade_info file..
|
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
|
|
|
--echo # Running mysql_upgrade with --skip-write-binlog..
|
|
--replace_result $MYSQLTEST_VARDIR var
|
|
--exec $MYSQL_UPGRADE --skip-verbose --skip-write-binlog
|
|
|
|
# mysql_upgrade must have created mysql_upgrade_info file,
|
|
# so the following command should never fail.
|
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
|
|
|
--echo # Running mysql_upgrade with --write-binlog..
|
|
--replace_result $MYSQLTEST_VARDIR var
|
|
--exec $MYSQL_UPGRADE --skip-verbose --write-binlog
|
|
|
|
--echo # Running mysql_upgrade with --max-allowed-packet=4096..
|
|
--exec $MYSQL_UPGRADE --max-allowed-packet=4096 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --max-allowed-packet=2147483648..
|
|
--exec $MYSQL_UPGRADE --max-allowed-packet=2147483648 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --max-allowed-packet=4095..
|
|
--exec $MYSQL_UPGRADE --max-allowed-packet=4095 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --max-allowed-packet=1000..
|
|
--exec $MYSQL_UPGRADE --max-allowed-packet=1000 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --max-allowed-packet=2147483649..
|
|
--exec $MYSQL_UPGRADE --max-allowed-packet=2147483649 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --max-allowed-packet=21474836480..
|
|
--exec $MYSQL_UPGRADE --max-allowed-packet=2147484652 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --net-buffer-length=4096..
|
|
--exec $MYSQL_UPGRADE --net-buffer-length=4096 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --net-buffer-length=16777216..
|
|
--exec $MYSQL_UPGRADE --net-buffer-length=16777216 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --net-buffer-length=4095..
|
|
--exec $MYSQL_UPGRADE --net-buffer-length=4095 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --net-buffer-length=1024..
|
|
--exec $MYSQL_UPGRADE --net-buffer-length=1024 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --net-buffer-length=16777217..
|
|
--exec $MYSQL_UPGRADE --net-buffer-length=16777217 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --net-buffer-length=167772160..
|
|
--exec $MYSQL_UPGRADE --net-buffer-length=167772160 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --bind-address..
|
|
--exec $MYSQL_UPGRADE --bind-address=127.0.0.1 --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with -C option..
|
|
--exec $MYSQL_UPGRADE -C --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --compress..
|
|
--exec $MYSQL_UPGRADE --compress --skip-verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --verbose..
|
|
--exec $MYSQL_UPGRADE --verbose --force 2>&1
|
|
|
|
--echo # Running mysql_upgrade with --protocol..
|
|
--exec $MYSQL_UPGRADE --protocol=TCP --skip-verbose --force 2>&1
|
|
|
|
--echo # Test positional arguments
|
|
--exec $MYSQL_UPGRADE --force --skip-verbose not_used_positional_argument 2>&1
|
|
|
|
--echo #
|
|
--echo # WL#7010: Remove unused --basedir and --datadir options
|
|
--echo # from mysql_upgrade
|
|
--echo #
|
|
|
|
--echo Run mysql_upgrade with --datadir : should fail
|
|
--replace_regex /.*mysql_upgrade.*: unk/mysql_upgrade: unk/
|
|
--error 7
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force --datadir=somedir 2>&1
|
|
|
|
--echo Run mysql_upgrade with --basedir : should fail
|
|
--replace_regex /.*mysql_upgrade.*: unk/mysql_upgrade: unk/
|
|
--error 7
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force --basedir=somedir 2>&1
|
|
|
|
--echo # Running mysql_upgrade with invalid/incorrect options
|
|
--error 2
|
|
--exec $MYSQL_UPGRADE -c --force 2>&1
|
|
|
|
--error 2
|
|
--exec $MYSQL_UPGRADE -t --force 2>&1
|
|
|
|
--error 1
|
|
--exec $MYSQL_UPGRADE --protocol=AAA --force 2>&1
|
|
|
|
|
|
--echo #
|
|
--echo # Bug #19011337: UPGRADE TO 5.7 DISABLES USER ACCOUNTS
|
|
--echo #
|
|
|
|
# Backup mysql.user table
|
|
CREATE TABLE backup_user AS SELECT * FROM mysql.user;
|
|
|
|
# Create 5.6 mysql.user table layout
|
|
|
|
--source include/user_57_to_56.inc
|
|
|
|
INSERT INTO mysql.user VALUES
|
|
('localhost','B19011337_nhash','*46ABF58B20022A84DF7B2E8B1AC8219C8DA71553','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','','N'),
|
|
('localhost','B19011337_ohash','0f0ea7602c473904','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','','N');
|
|
|
|
call mtr.add_suppression("Some of the user accounts with SUPER");
|
|
call mtr.add_suppression("1. Stop");
|
|
call mtr.add_suppression("2. Run");
|
|
call mtr.add_suppression("3. Restart");
|
|
call mtr.add_suppression("For complete");
|
|
call mtr.add_suppression("User entry .B19011337");
|
|
|
|
--echo # expect a warning in the error log
|
|
FLUSH PRIVILEGES;
|
|
|
|
--echo # let's check for the presense of the warning
|
|
let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
# $server_log has to be processed by include/search_pattern_in_file.inc which
|
|
# contains Perl code requiring that the environment variable SEARCH_FILE points
|
|
# to this file.
|
|
let SEARCH_FILE= $server_log;
|
|
|
|
--let SEARCH_PATTERN= User entry 'B19011337_ohash'@'localhost' has a deprecated pre-4.1 password. The user will be ignored and no one can login with this user anymore.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let SEARCH_PATTERN= 1. Stop
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let SEARCH_PATTERN= 2. Run
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let SEARCH_PATTERN= 3. Restart
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let SEARCH_PATTERN= For complete instructions on how to upgrade MySQL
|
|
--source include/search_pattern_in_file.inc
|
|
--echo # end of check for the presense of the warning
|
|
|
|
--echo # repair the user's plugin
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
--echo # expect mysql_native_password
|
|
SELECT plugin FROM mysql.user WHERE user='B19011337_nhash';
|
|
|
|
--echo # expect empty plugin
|
|
SELECT plugin FROM mysql.user WHERE user='B19011337_ohash';
|
|
|
|
--echo # cleanup
|
|
DROP USER B19011337_nhash@localhost;
|
|
DROP USER B19011337_ohash@localhost;
|
|
|
|
# Restore mysql.user content
|
|
TRUNCATE TABLE mysql.user;
|
|
INSERT INTO mysql.user SELECT * FROM backup_user;
|
|
DROP TABLE backup_user;
|
|
|
|
--echo #
|
|
--echo # Upgrading of sys schema tests
|
|
--echo #
|
|
|
|
# Save a copy of the user/tables_priv tables, to restore later
|
|
# Otherwise the final mysql_upgrade will REPLACE and update timestamps etc.
|
|
--let $backup= 1
|
|
--source include/backup_tables_priv_and_users.inc
|
|
|
|
--echo # Remove the sys schema, and check the --skip-sys-schema option
|
|
DROP DATABASE sys;
|
|
--exec $MYSQL_UPGRADE --skip-verbose --skip-sys-schema --force
|
|
SHOW DATABASES;
|
|
|
|
--echo # Now run it normally, to ensure the sys schema is created
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force
|
|
SHOW DATABASES;
|
|
|
|
--echo # Now drop procedures and make sure re-install is done
|
|
DROP PROCEDURE sys.ps_setup_save;
|
|
DROP PROCEDURE sys.ps_setup_reload_saved;
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force
|
|
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'sys' AND ROUTINE_TYPE = 'PROCEDURE';
|
|
|
|
--echo # Now drop functions and make sure re-install is done
|
|
DROP FUNCTION sys.format_bytes;
|
|
DROP FUNCTION sys.format_time;
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force
|
|
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'sys' AND ROUTINE_TYPE = 'FUNCTION';
|
|
|
|
--echo # Now drop views and make sure re-install is done
|
|
DROP VIEW sys.host_summary;
|
|
DROP VIEW sys.processlist;
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force
|
|
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sys' AND TABLE_TYPE = 'VIEW';
|
|
|
|
--echo # Now drop triggers and make sure re-install is done
|
|
DROP TRIGGER sys.sys_config_insert_set_user;
|
|
DROP TRIGGER sys.sys_config_update_set_user;
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force
|
|
SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA = 'sys';
|
|
|
|
--echo # Now drop the sys_config table and make sure re-install is done
|
|
DROP TABLE sys.sys_config;
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force
|
|
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sys' AND TABLE_TYPE = 'BASE TABLE';
|
|
|
|
# Restore the saved contents of mysql.user and mysql.tables_priv
|
|
--let $restore= 1
|
|
--source include/backup_tables_priv_and_users.inc
|
|
|
|
--echo #
|
|
--echo # BUG#18985579: "CHECK TABLE .. FOR UPGRADE" FAILS TO REPORT
|
|
--echo # OLD DATETIME FORMAT.
|
|
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
--copy_file std_data/55_temporal.frm $MYSQLD_DATADIR/test/t1.frm
|
|
--copy_file std_data/55_temporal.MYD $MYSQLD_DATADIR/test/t1.MYD
|
|
--copy_file std_data/55_temporal.MYI $MYSQLD_DATADIR/test/t1.MYI
|
|
|
|
--echo #Test case with 'avoid_temporal_upgrade' enabled.
|
|
SET @save_avoid_temporal_upgrade= @@global.avoid_temporal_upgrade;
|
|
SET GLOBAL avoid_temporal_upgrade= ON;
|
|
|
|
SELECT f_time, f_datetime, f_timestamp, HEX(WEIGHT_STRING(f_time)),
|
|
HEX(WEIGHT_STRING(f_datetime)), HEX(WEIGHT_STRING(f_timestamp)) FROM t1;
|
|
|
|
--echo #mysql_upgrade does not upgrade the old temporal types since
|
|
--echo #'avoid_temporal_upgrade' is enabled..
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
SELECT f_time, f_datetime, f_timestamp, HEX(WEIGHT_STRING(f_time)),
|
|
HEX(WEIGHT_STRING(f_datetime)), HEX(WEIGHT_STRING(f_timestamp)) FROM t1;
|
|
|
|
SET @@global.avoid_temporal_upgrade= @save_avoid_temporal_upgrade;
|
|
|
|
|
|
--echo #Test case with 'avoid_temporal_upgrade' disabled.
|
|
SELECT f_time, f_datetime, f_timestamp, HEX(WEIGHT_STRING(f_time)),
|
|
HEX(WEIGHT_STRING(f_datetime)), HEX(WEIGHT_STRING(f_timestamp)) FROM t1;
|
|
|
|
--echo #mysql_upgrade upgrades the old temporal types.
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
SELECT f_time, f_datetime, f_timestamp, HEX(WEIGHT_STRING(f_time)),
|
|
HEX(WEIGHT_STRING(f_datetime)), HEX(WEIGHT_STRING(f_timestamp)) FROM t1;
|
|
|
|
#Cleanup.
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # WL #8350 ENSURE 5.7 SUPPORTS SMOOTH LIVE UPGRADE FROM 5.6
|
|
--echo #
|
|
|
|
call mtr.add_suppression("Column count of mysql.* is wrong. "
|
|
"Expected .*, found .*. "
|
|
"The table is probably corrupted");
|
|
|
|
let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
# Backup mysql.user table
|
|
CREATE TABLE backup_user AS SELECT * FROM mysql.user;
|
|
|
|
# Create 5.6 mysql.user table layout
|
|
|
|
--source include/user_57_to_56.inc
|
|
|
|
call mtr.add_suppression("The plugin 'mysql_old_password' used to authenticate user 'user_old_pass_wp'@'%' is not loaded. Nobody can currently login using this account.");
|
|
|
|
--echo # Because su_old_pass_pn is a super user without plugin name but with pre 4.1
|
|
--echo # hash password we generate instruction on how one can proceed with
|
|
--echo # the upgrade using this account.
|
|
call mtr.add_suppression("Some of the user accounts with SUPER");
|
|
call mtr.add_suppression("1. Stop");
|
|
call mtr.add_suppression("2. Run");
|
|
call mtr.add_suppression("3. Restart");
|
|
call mtr.add_suppression("For complete");
|
|
|
|
# Password for each user is 'lala'
|
|
|
|
INSERT INTO mysql.user VALUES
|
|
('%','user_old_pass_wp','0f0ea7602c473904','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'mysql_old_password','','N');
|
|
INSERT INTO mysql.user VALUES
|
|
('%','user_old_pass_pn','0f0ea7602c473904','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'','','N'),
|
|
('%','su_old_pass_pn','0f0ea7602c473904','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','','N'),
|
|
('%','user_nat_pass_pn','*46ABF58B20022A84DF7B2E8B1AC8219C8DA71553','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,NULL,'','N'),
|
|
('%','user_nat_pass_wp','*46ABF58B20022A84DF7B2E8B1AC8219C8DA71553','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'mysql_native_password','','N');
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--echo # check the presents of the warnings in the log file
|
|
let SEARCH_FILE= $server_log;
|
|
|
|
--let SEARCH_PATTERN= User entry 'user_old_pass_pn'@'%' has a deprecated pre-4.1 password. The user will be ignored and no one can login with this user anymore.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let SEARCH_PATTERN= User entry 'su_old_pass_pn'@'%' has a deprecated pre-4.1 password. The user will be ignored and no one can login with this user anymore.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--echo # end of check for the presense of the warning
|
|
|
|
--echo #Connect using root account - should succeed
|
|
connect (con0,localhost,root,,);
|
|
|
|
--echo #Connecting user with pre 4.1 hash and empty plugin- should fail
|
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
|
--error ER_ACCESS_DENIED_ERROR
|
|
connect (con1,localhost,user_old_pass_pn,lala,);
|
|
|
|
--echo #Connecting user with pre 4.1 hash and mysql_old_password plugin set -
|
|
--echo #should fail - the mysql_old_password was removed in 5.7
|
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
|
--error ER_PLUGIN_IS_NOT_LOADED
|
|
connect (con2,localhost,user_old_pass_wp,lala,);
|
|
|
|
--echo #Connecting user with 4.1 hash and empty plugin - should succeed
|
|
connect (con3,localhost,user_nat_pass_pn,lala,);
|
|
|
|
--echo #Connecting user with 4.1 hash and mysql_native_plugin plugin set -
|
|
--echo #should succeed
|
|
connect (con4,localhost,user_nat_pass_wp,lala,);
|
|
|
|
connection con3;
|
|
--echo #Trying to do select on mysql.user table - should fail as
|
|
--echo #user_nat_pass_pn is not a super user
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
SELECT * FROM mysql.user WHERE user="user_nat_pass_pn";
|
|
|
|
--echo #Try granting all privileges on mysql db to user_nat_pass_pn using root
|
|
--echo #account - this should fail since mysql.user table has 5.6 layout.
|
|
connection con0;
|
|
--error ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2
|
|
GRANT ALL PRIVILEGES ON mysql.* TO 'user_nat_pass_pn'@'%' WITH GRANT OPTION;
|
|
|
|
connection con3;
|
|
--echo #Select on mysql.user should not be possible since user_nat_pass_pn has
|
|
--echo #no select privileges on mysql database
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
SELECT * FROM mysql.user WHERE user="user_nat_pass_pn";
|
|
|
|
--echo #Revoke all privileges from 'user_nat_pass_pn'@'%' - this should fail
|
|
--echo #since mysql.user table has 5.6 layout.
|
|
connection con0;
|
|
--error ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2
|
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_nat_pass_pn'@'%';
|
|
|
|
connection con3;
|
|
--echo #Trying to do select on mysql.user table - this should fail since
|
|
--echo #user_nat_pass_pn has no select prvileleges on mysql db.
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
SELECT * FROM mysql.user WHERE user="user_nat_pass_pn";
|
|
|
|
connection con0;
|
|
--echo #All alter user commands should fail since mysql.user has 5.6 layout.
|
|
SELECT authentication_string FROM mysql.user where user='user_nat_pass_pn';
|
|
SELECT password_expired FROM mysql.user where user='user_nat_pass_pn';
|
|
|
|
--error ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2
|
|
ALTER USER 'user_nat_pass_pn'@'%' PASSWORD EXPIRE;
|
|
|
|
SELECT authentication_string FROM mysql.user WHERE user='user_nat_pass_pn';
|
|
SELECT password_expired FROM mysql.user WHERE user='user_nat_pass_pn';
|
|
|
|
--echo #Fix authentication string
|
|
UPDATE mysql.user SET authentication_string='' WHERE user='user_nat_pass_pn';
|
|
|
|
--echo #"Manualy" grant super user privileges to user_nat_pass_pn, note we are
|
|
--echo #now updating mysql_user to get all privileges on *.*
|
|
connection con0;
|
|
|
|
UPDATE mysql.user SET Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y', Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y', Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y', Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y', Create_user_priv='Y', Event_priv='Y', Trigger_priv='Y', Create_tablespace_priv='Y' where user="user_nat_pass_pn";
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
#connection con3;
|
|
--echo #Select on mysql.user should now be possible
|
|
SELECT * FROM mysql.user WHERE user="user_nat_pass_pn";
|
|
|
|
connection default;
|
|
|
|
--echo #Run mysql_upgrade with user_nat_pass_pn - i.e. user with empty plugin
|
|
--echo #column and 4.1 hash password. After mysql_upgrade finishes the
|
|
--echo #mysql.user table should have 5.7 layout thus no need to restore the
|
|
--echo #dropped columns from the begining of the test
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force --user=user_nat_pass_pn --password=lala 2>&1
|
|
|
|
call mtr.add_suppression("User entry 'user_old_pass_pn'@'%' has an empty plugin value. The user will be ignored and no one can login with this user anymore.");
|
|
call mtr.add_suppression("User entry 'su_old_pass_pn'@'%' has an empty plugin value. The user will be ignored and no one can login with this user anymore.");
|
|
|
|
--echo # check the presents of the warnings in the log file
|
|
let SEARCH_FILE= $server_log;
|
|
|
|
--let SEARCH_PATTERN= User entry 'user_old_pass_pn'@'%' has an empty plugin value.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let SEARCH_PATTERN= User entry 'su_old_pass_pn'@'%' has an empty plugin value.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--echo # end of check for the presense of the warning
|
|
|
|
disconnect con0;
|
|
disconnect con3;
|
|
disconnect con4;
|
|
|
|
--echo #Restart the server
|
|
--source include/restart_mysqld.inc
|
|
|
|
--echo #After the update all acl commands should be working fine. Trying out
|
|
--echo #some of them
|
|
|
|
ALTER USER 'user_nat_pass_pn'@'%' PASSWORD EXPIRE;
|
|
SELECT password_expired FROM mysql.user WHERE user='user_nat_pass_pn';
|
|
SET PASSWORD FOR user_nat_pass_pn@'%' = 'lala';
|
|
SELECT password_expired FROM mysql.user WHERE user='user_nat_pass_pn';
|
|
|
|
ALTER USER 'user_nat_pass_wp'@'%' ACCOUNT LOCK;
|
|
SELECT account_locked FROM mysql.user WHERE user='user_nat_pass_wp';
|
|
ALTER USER 'user_nat_pass_wp'@'%' ACCOUNT UNLOCK;
|
|
SELECT account_locked FROM mysql.user WHERE user='user_nat_pass_wp';
|
|
|
|
--echo #Connecting with user using mysql_old_password plugin should not be
|
|
--echo #possible
|
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
|
--error ER_PLUGIN_IS_NOT_LOADED
|
|
connect (con5,localhost,user_old_pass_wp,lala,);
|
|
|
|
--echo #Creating super user and assigning all privileges to it. This updates
|
|
--echo #mysql.user table so should now be possible.
|
|
CREATE USER super@localhost IDENTIFIED BY 'lala';
|
|
GRANT ALL PRIVILEGES ON *.* TO super@localhost WITH GRANT OPTION;
|
|
SELECT user FROM mysql.user WHERE user='super';
|
|
|
|
# Cleanup
|
|
|
|
DROP USER 'super'@'localhost';
|
|
DROP USER 'user_old_pass_pn'@'%';
|
|
DROP USER 'su_old_pass_pn'@'%';
|
|
DROP USER 'user_old_pass_wp'@'%';
|
|
DROP USER 'user_nat_pass_pn'@'%';
|
|
DROP USER 'user_nat_pass_wp'@'%';
|
|
|
|
# Restore mysql.user content
|
|
TRUNCATE TABLE mysql.user;
|
|
INSERT INTO mysql.user SELECT * FROM backup_user;
|
|
DROP TABLE backup_user;
|
|
|
|
|
|
--echo #
|
|
--echo # BUG#20614545: USERS WITH OLD-PASSWORD=1 CHANGED TO
|
|
--echo # MYSQL_NATIVE_PASSWORD AFTER UPGRADE
|
|
--echo #
|
|
|
|
let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
# Backup mysql.user table
|
|
CREATE TABLE backup_user AS SELECT * FROM mysql.user;
|
|
|
|
# Create 5.6 mysql.user table layout
|
|
|
|
--source include/user_57_to_56.inc
|
|
|
|
INSERT INTO mysql.user VALUES
|
|
('localhost','B20614545','0f0ea7602c473904','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'','','N');
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--echo # check the presents of the warnings in the log file
|
|
let SEARCH_FILE= $server_log;
|
|
|
|
--let SEARCH_PATTERN= User entry 'B20614545'@'localhost' has a deprecated pre-4.1 password. The user will be ignored and no one can login with this user anymore.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--echo # end of check for the presense of the warning
|
|
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
call mtr.add_suppression("User entry 'B20614545'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.");
|
|
|
|
--echo # check the presents of the warnings in the log file
|
|
let SEARCH_FILE= $server_log;
|
|
|
|
--let SEARCH_PATTERN= User entry 'B20614545'@'localhost' has an empty plugin value.
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--echo # end of check for the presense of the warning
|
|
|
|
--echo #Restart the server
|
|
--source include/restart_mysqld.inc
|
|
|
|
--echo # expect empty plugin
|
|
SELECT plugin FROM mysql.user WHERE user='B20614545';
|
|
|
|
DROP USER B20614545@localhost;
|
|
|
|
# Restore mysql.user content
|
|
TRUNCATE TABLE mysql.user;
|
|
INSERT INTO mysql.user SELECT * FROM backup_user;
|
|
DROP TABLE backup_user;
|
|
|
|
--echo #
|
|
--echo # WL#2284: Increase the length of a user name
|
|
--echo #
|
|
|
|
|
|
--echo # First downgrade all tables with user name columnd to 5.6
|
|
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode= (SELECT replace(@@sql_mode,'NO_ZERO_DATE',''));
|
|
|
|
#This user is not compatible with 5.6 tables
|
|
let $date_to_restore=`SELECT password_last_changed from mysql.user where user='mysql.session'`;
|
|
let $sess_user_account_priv=`SELECT timestamp from mysql.tables_priv where user='mysql.session'`;
|
|
DELETE FROM mysql.tables_priv WHERE user='mysql.session';
|
|
DELETE FROM mysql.user WHERE user='mysql.session';
|
|
DELETE FROM mysql.db WHERE user='mysql.session';
|
|
|
|
ALTER TABLE mysql.tables_priv
|
|
MODIFY User char(16) NOT NULL default '',
|
|
MODIFY Grantor char(77) DEFAULT '' NOT NULL;
|
|
ALTER TABLE mysql.columns_priv
|
|
MODIFY User char(16) NOT NULL default '';
|
|
ALTER TABLE mysql.user
|
|
MODIFY User char(16) NOT NULL default '';
|
|
ALTER TABLE mysql.db
|
|
MODIFY User char(16) NOT NULL default '';
|
|
ALTER TABLE mysql.procs_priv
|
|
MODIFY User char(16) binary DEFAULT '' NOT NULL,
|
|
MODIFY Grantor char(77) DEFAULT '' NOT NULL;
|
|
ALTER TABLE mysql.proc
|
|
MODIFY definer char(77) collate utf8_bin DEFAULT '' NOT NULL;
|
|
ALTER TABLE mysql.event
|
|
MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '';
|
|
|
|
SET sql_mode= @orig_sql_mode;
|
|
|
|
--echo #
|
|
--echo # Downgrade performance_schema tables
|
|
--echo #
|
|
|
|
set @have_pfs= (select count(engine) from information_schema.engines where engine='PERFORMANCE_SCHEMA' and support != 'NO');
|
|
|
|
--echo #
|
|
--echo # TABLE USERS
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.users;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.users("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"CURRENT_CONNECTIONS bigint not null,"
|
|
"TOTAL_CONNECTIONS bigint not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE ACCOUNTS
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.accounts;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.accounts("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"HOST CHAR(60) collate utf8_bin default null,"
|
|
"CURRENT_CONNECTIONS bigint not null,"
|
|
"TOTAL_CONNECTIONS bigint not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE SETUP_ACTORS
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.setup_actors;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.setup_actors("
|
|
"HOST CHAR(60) collate utf8_bin default '%' not null,"
|
|
"USER CHAR(16) collate utf8_bin default '%' not null,"
|
|
"ROLE CHAR(16) collate utf8_bin default '%' not null,"
|
|
"ENABLED ENUM ('YES', 'NO') not null default 'YES',"
|
|
"HISTORY ENUM ('YES', 'NO') not null default 'YES'"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_STAGES_SUMMARY_BY_USER_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_stages_summary_by_user_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_stages_summary_by_user_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_WAITS_SUMMARY_BY_USER_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_waits_summary_by_user_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_waits_summary_by_user_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_WAITS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_waits_summary_by_account_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_waits_summary_by_account_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"HOST CHAR(60) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_statements_summary_by_account_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_statements_summary_by_account_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"HOST CHAR(60) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null,"
|
|
"SUM_LOCK_TIME BIGINT unsigned not null,"
|
|
"SUM_ERRORS BIGINT unsigned not null,"
|
|
"SUM_WARNINGS BIGINT unsigned not null,"
|
|
"SUM_ROWS_AFFECTED BIGINT unsigned not null,"
|
|
"SUM_ROWS_SENT BIGINT unsigned not null,"
|
|
"SUM_ROWS_EXAMINED BIGINT unsigned not null,"
|
|
"SUM_CREATED_TMP_DISK_TABLES BIGINT unsigned not null,"
|
|
"SUM_CREATED_TMP_TABLES BIGINT unsigned not null,"
|
|
"SUM_SELECT_FULL_JOIN BIGINT unsigned not null,"
|
|
"SUM_SELECT_FULL_RANGE_JOIN BIGINT unsigned not null,"
|
|
"SUM_SELECT_RANGE BIGINT unsigned not null,"
|
|
"SUM_SELECT_RANGE_CHECK BIGINT unsigned not null,"
|
|
"SUM_SELECT_SCAN BIGINT unsigned not null,"
|
|
"SUM_SORT_MERGE_PASSES BIGINT unsigned not null,"
|
|
"SUM_SORT_RANGE BIGINT unsigned not null,"
|
|
"SUM_SORT_ROWS BIGINT unsigned not null,"
|
|
"SUM_SORT_SCAN BIGINT unsigned not null,"
|
|
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
|
|
"SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_STATEMENTS_SUMMARY_BY_USER_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_statements_summary_by_user_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_statements_summary_by_user_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null,"
|
|
"SUM_LOCK_TIME BIGINT unsigned not null,"
|
|
"SUM_ERRORS BIGINT unsigned not null,"
|
|
"SUM_WARNINGS BIGINT unsigned not null,"
|
|
"SUM_ROWS_AFFECTED BIGINT unsigned not null,"
|
|
"SUM_ROWS_SENT BIGINT unsigned not null,"
|
|
"SUM_ROWS_EXAMINED BIGINT unsigned not null,"
|
|
"SUM_CREATED_TMP_DISK_TABLES BIGINT unsigned not null,"
|
|
"SUM_CREATED_TMP_TABLES BIGINT unsigned not null,"
|
|
"SUM_SELECT_FULL_JOIN BIGINT unsigned not null,"
|
|
"SUM_SELECT_FULL_RANGE_JOIN BIGINT unsigned not null,"
|
|
"SUM_SELECT_RANGE BIGINT unsigned not null,"
|
|
"SUM_SELECT_RANGE_CHECK BIGINT unsigned not null,"
|
|
"SUM_SELECT_SCAN BIGINT unsigned not null,"
|
|
"SUM_SORT_MERGE_PASSES BIGINT unsigned not null,"
|
|
"SUM_SORT_RANGE BIGINT unsigned not null,"
|
|
"SUM_SORT_ROWS BIGINT unsigned not null,"
|
|
"SUM_SORT_SCAN BIGINT unsigned not null,"
|
|
"SUM_NO_INDEX_USED BIGINT unsigned not null,"
|
|
"SUM_NO_GOOD_INDEX_USED BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_STAGES_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_stages_summary_by_account_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_stages_summary_by_account_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"HOST CHAR(60) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_STAGES_SUMMARY_BY_USER_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_stages_summary_by_user_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_stages_summary_by_user_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE THREADS
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.threads;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.threads("
|
|
"THREAD_ID BIGINT unsigned not null,"
|
|
"NAME VARCHAR(128) not null,"
|
|
"TYPE VARCHAR(10) not null,"
|
|
"PROCESSLIST_ID BIGINT unsigned,"
|
|
"PROCESSLIST_USER VARCHAR(16),"
|
|
"PROCESSLIST_HOST VARCHAR(60),"
|
|
"PROCESSLIST_DB VARCHAR(64),"
|
|
"PROCESSLIST_COMMAND VARCHAR(16),"
|
|
"PROCESSLIST_TIME BIGINT,"
|
|
"PROCESSLIST_STATE VARCHAR(64),"
|
|
"PROCESSLIST_INFO LONGTEXT,"
|
|
"PARENT_THREAD_ID BIGINT unsigned,"
|
|
"ROLE VARCHAR(64),"
|
|
"INSTRUMENTED ENUM ('YES', 'NO') not null,"
|
|
"HISTORY ENUM ('YES', 'NO') not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE MEMORY_SUMMARY_BY_USER_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.memory_summary_by_user_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.memory_summary_by_user_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_ALLOC BIGINT unsigned not null,"
|
|
"COUNT_FREE BIGINT unsigned not null,"
|
|
"SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
|
|
"SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
|
|
"LOW_COUNT_USED BIGINT not null,"
|
|
"CURRENT_COUNT_USED BIGINT not null,"
|
|
"HIGH_COUNT_USED BIGINT not null,"
|
|
"LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
|
|
"CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
|
|
"HIGH_NUMBER_OF_BYTES_USED BIGINT not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE MEMORY_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.memory_summary_by_account_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.memory_summary_by_account_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"HOST CHAR(60) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_ALLOC BIGINT unsigned not null,"
|
|
"COUNT_FREE BIGINT unsigned not null,"
|
|
"SUM_NUMBER_OF_BYTES_ALLOC BIGINT unsigned not null,"
|
|
"SUM_NUMBER_OF_BYTES_FREE BIGINT unsigned not null,"
|
|
"LOW_COUNT_USED BIGINT not null,"
|
|
"CURRENT_COUNT_USED BIGINT not null,"
|
|
"HIGH_COUNT_USED BIGINT not null,"
|
|
"LOW_NUMBER_OF_BYTES_USED BIGINT not null,"
|
|
"CURRENT_NUMBER_OF_BYTES_USED BIGINT not null,"
|
|
"HIGH_NUMBER_OF_BYTES_USED BIGINT not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_TRANSACTIONS_SUMMARY_BY_USER_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_transactions_summary_by_user_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_transactions_summary_by_user_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null,"
|
|
"COUNT_READ_WRITE BIGINT unsigned not null,"
|
|
"SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"COUNT_READ_ONLY BIGINT unsigned not null,"
|
|
"SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
|
|
"MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
|
|
"AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
|
|
"MAX_TIMER_READ_ONLY BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # TABLE EVENTS_TRANSACTIONS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME
|
|
--echo #
|
|
|
|
SET @cmd="DROP TABLE IF EXISTS performance_schema.events_transactions_summary_by_account_by_event_name;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
SET @cmd="CREATE TABLE performance_schema.events_transactions_summary_by_account_by_event_name("
|
|
"USER CHAR(16) collate utf8_bin default null,"
|
|
"HOST CHAR(60) collate utf8_bin default null,"
|
|
"EVENT_NAME VARCHAR(128) not null,"
|
|
"COUNT_STAR BIGINT unsigned not null,"
|
|
"SUM_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MIN_TIMER_WAIT BIGINT unsigned not null,"
|
|
"AVG_TIMER_WAIT BIGINT unsigned not null,"
|
|
"MAX_TIMER_WAIT BIGINT unsigned not null,"
|
|
"COUNT_READ_WRITE BIGINT unsigned not null,"
|
|
"SUM_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"MIN_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"AVG_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"MAX_TIMER_READ_WRITE BIGINT unsigned not null,"
|
|
"COUNT_READ_ONLY BIGINT unsigned not null,"
|
|
"SUM_TIMER_READ_ONLY BIGINT unsigned not null,"
|
|
"MIN_TIMER_READ_ONLY BIGINT unsigned not null,"
|
|
"AVG_TIMER_READ_ONLY BIGINT unsigned not null,"
|
|
"MAX_TIMER_READ_ONLY BIGINT unsigned not null"
|
|
")ENGINE=PERFORMANCE_SCHEMA;";
|
|
|
|
SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0');
|
|
PREPARE stmt FROM @str;
|
|
EXECUTE stmt;
|
|
DROP PREPARE stmt;
|
|
|
|
--echo #
|
|
--echo # Bug #21762656 AFTER RUNNING MYSQL_UPGRADE PROXIES_PRIV USER COLUMNS
|
|
--echo # ARE NOT UPDATED TO 32
|
|
--echo #
|
|
|
|
ALTER TABLE mysql.proxies_priv MODIFY User char(16) binary DEFAULT '' NOT NULL;
|
|
ALTER TABLE mysql.proxies_priv MODIFY Proxied_user char(16) binary DEFAULT '' NOT NULL;
|
|
ALTER TABLE mysql.proxies_priv MODIFY Grantor char(77) DEFAULT '' NOT NULL;
|
|
|
|
--echo # Tables with user name column downgraded to 5.6, now run mysql_upgrade
|
|
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
--echo # After downgrading all tables with user columns to 5.6 schema and then
|
|
--echo # running mysql_upgrade check if all tables have correct 5.7 structure
|
|
|
|
SHOW CREATE TABLE performance_schema.users;
|
|
SHOW CREATE TABLE performance_schema.accounts;
|
|
SHOW CREATE TABLE performance_schema.setup_actors;
|
|
SHOW CREATE TABLE performance_schema.events_stages_summary_by_user_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_waits_summary_by_user_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_waits_summary_by_account_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_statements_summary_by_account_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_statements_summary_by_user_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_stages_summary_by_account_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_stages_summary_by_user_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.threads;
|
|
SHOW CREATE TABLE performance_schema.memory_summary_by_user_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.memory_summary_by_account_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_transactions_summary_by_user_by_event_name;
|
|
SHOW CREATE TABLE performance_schema.events_transactions_summary_by_account_by_event_name;
|
|
|
|
#restore the state of the session user
|
|
--disable_query_log ONCE
|
|
--eval UPDATE mysql.tables_priv SET timestamp ='$sess_user_account_priv' WHERE USER= 'mysql.session'
|
|
--disable_query_log ONCE
|
|
--eval UPDATE mysql.user SET password_last_changed= '$date_to_restore' WHERE USER= 'mysql.session'
|
|
|
|
|
|
--echo #
|
|
--echo # Bug #20968596: MYSQL_UPGRADE IN 5.7 FAILS ON MYSQL.PROC TABLE, WORKS WHEN RUN AGAIN
|
|
--echo #
|
|
--echo Abuse mysql.proc
|
|
SET @orig_sql_mode= @@sql_mode;
|
|
SET sql_mode='';
|
|
ALTER TABLE mysql.proc
|
|
MODIFY comment BLOB NOT NULL;
|
|
# MODIFY modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
|
|
SET sql_mode= @orig_sql_mode;
|
|
--echo Run mysql_upgrade
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
--echo Check mysql.proc structure
|
|
SHOW CREATE TABLE mysql.proc;
|
|
|
|
--echo #
|
|
--echo # BUG#26727481: SEGMENTATION FAULT DURING MYSQL_UPGRADE IN 8.0.3
|
|
--echo #
|
|
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
--copy_file std_data/41_decimal.frm $MYSQLD_DATADIR/test/t1.frm
|
|
--copy_file std_data/41_decimal.MYD $MYSQLD_DATADIR/test/t1.MYD
|
|
--copy_file std_data/41_decimal.MYI $MYSQLD_DATADIR/test/t1.MYI
|
|
|
|
--echo #mysql_upgrade will not fix pre 5.0 decimal types.
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
--echo #re-execute mysql_upgrade to check consistency
|
|
--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1
|
|
|
|
DROP TABLE t1;
|
|
|
|
--source include/mysql_upgrade_cleanup.inc
|
|
|
|
--echo
|
|
--echo End of tests
|