diff --git a/Changelog b/Changelog index 557e9eef..9517c40a 100644 --- a/Changelog +++ b/Changelog @@ -1,6 +1,23 @@ Changelog for Percona Toolkit + * Fixed bug PT-1114: pt-table-checksum fails when table is empty + * Fixed bug PT-1344: pt-online-schema-change: Use of uninitialized value $host in string + * Fixed bug PT-1575: pt-mysql-summary does not print PXC section for PXC 5.6 and 5.7 + * Fixed bug PT-1630: pt-table-checksum not working with galera cluster anymore since 3.0.11 * Fixed bug PT-1633: Fix incorrect parsing of a variable with number + K,M,G,T (Thanks Dieter Adriaenssens) + * Fixed bug PT-1633: pt-config-diff doesn't handle innodb_temp_data_file_path correctly + * Improvement PT-1663: Implement retention by bytes for pt-stalk + * Fixed bug PT-1670: pt-table-checksum fails when table is empty + * New-tool PT-1696: pt-postgresql-summary + * Improvement PT-1705: Make pt-online-schema-change exit with different codes depending on the status + * Fixed bug PT-1709: Error: Use of uninitialized value in concatenation (.) or string at pt-upgrade + * Fixed bug PT-1715: pt-upgrade documentation doesn't have the type tcpdump + * Fixed bug PT-1720: pt-pmp parses configuration files that lead to errors + * Fixed bug PT-1728: Pt-table-checksum failing to scan small tables that get wiped out often + * Fixed bug PT-1734: Tailing log_error in pt-stalk doesn't work + * Improvement PT-1741: Migration to new MongoDB driver + * Improvement PT-1746: diskstats not working for kernel 4.18+ + * Improvement PT-1761: Prevent pt-osc to run under MySQL 8.0.14 ~ 8.0.17 v3.0.13 released 2018-12-28 diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index b508e8fb..94782ea1 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -8323,8 +8323,6 @@ use constant { sub _die { my ($msg, $exit_status) = @_; - warn "msg: $msg",; - warn "exit_status: $exit_status"; $exit_status ||= 255; chomp ($msg); print "$msg\n"; @@ -8943,6 +8941,22 @@ sub main { # Get child tables of the original table, if necessary. # ######################################################################## my $child_tables; + + my $have_child_tables = find_child_tables( + tbl => $orig_tbl, + Cxn => $cxn, + Quoter => $q, + ); + + my $vp = VersionParser->new($cxn->dbh()); + if ($vp->cmp('8.0.14') > -1 && $vp->flavor() !~ m/maria/i) { + my $msg = "There is an error in MySQL that makes the server to die when trying to ". + "rename a table with FKs. See https://bugs.mysql.com/bug.php?id=96145\n". + "Since pt-online-schema change needs to rename the old <-> new tables as the final " . + "step, and the requested table has FKs, it cannot be executed under the current MySQL version"; + _die($msg, NO_MINIMUM_REQUIREMENTS); + } + if ( ($alter_fk_method || '') eq 'none' ) { print "Not updating foreign keys because " . "--alter-foreign-keys-method=none. Foreign keys " @@ -9858,7 +9872,6 @@ sub main { } } - my $vp = VersionParser->new($cxn->dbh()); if ($vp->cmp('8.0') > -1 && $vp->flavor() !~ m/maria/i && $alter_fk_method eq 'drop_swap') { my $msg = "--alter-foreign-keys-method=drop_swap doesn't work with MySQL 8.0+\n". "See https://bugs.mysql.com/bug.php?id=89441"; diff --git a/t/lib/Cxn.t b/t/lib/Cxn.t index a5ae4308..f831f976 100644 --- a/t/lib/Cxn.t +++ b/t/lib/Cxn.t @@ -102,6 +102,7 @@ my $cxn = make_cxn( dsn_string => 'h=127.1,P=12345,u=msandbox,p=msandbox', set => sub { my ($dbh) = @_; + warn "---------------"; $set_calls++; $dbh->do("SET \@a := \@a + 1"); }, diff --git a/t/lib/samples/SchemaIterator/all-dbs-tbls-8.0.txt b/t/lib/samples/SchemaIterator/all-dbs-tbls-8.0.txt index 060b8a8d..76d6c786 100644 --- a/t/lib/samples/SchemaIterator/all-dbs-tbls-8.0.txt +++ b/t/lib/samples/SchemaIterator/all-dbs-tbls-8.0.txt @@ -1,6 +1,6 @@ mysql.columns_priv CREATE TABLE `columns_priv` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '', @@ -8,7 +8,7 @@ CREATE TABLE `columns_priv` ( `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Column privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Column privileges' mysql.component CREATE TABLE `component` ( @@ -16,11 +16,11 @@ CREATE TABLE `component` ( `component_group_id` int(10) unsigned NOT NULL, `component_urn` text NOT NULL, PRIMARY KEY (`component_id`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Components' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Components' mysql.db CREATE TABLE `db` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Select_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', @@ -44,16 +44,16 @@ CREATE TABLE `db` ( `Trigger_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', PRIMARY KEY (`Host`,`Db`,`User`), KEY `User` (`User`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Database privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Database privileges' mysql.default_roles CREATE TABLE `default_roles` ( - `HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `HOST` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `USER` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', - `DEFAULT_ROLE_HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '%', + `DEFAULT_ROLE_HOST` char(60) COLLATE utf8_bin NOT NULL DEFAULT '%', `DEFAULT_ROLE_USER` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', PRIMARY KEY (`HOST`,`USER`,`DEFAULT_ROLE_HOST`,`DEFAULT_ROLE_USER`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Default roles' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Default roles' mysql.engine_cost CREATE TABLE `engine_cost` ( @@ -65,7 +65,7 @@ CREATE TABLE `engine_cost` ( `comment` varchar(1024) DEFAULT NULL, `default_value` float GENERATED ALWAYS AS ((case `cost_name` when _utf8mb3'io_block_read_cost' then 1.0 when _utf8mb3'memory_block_read_cost' then 0.25 else NULL end)) VIRTUAL, PRIMARY KEY (`cost_name`,`engine_name`,`device_type`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 mysql.func CREATE TABLE `func` ( @@ -74,16 +74,16 @@ CREATE TABLE `func` ( `dl` char(128) COLLATE utf8_bin NOT NULL DEFAULT '', `type` enum('function','aggregate') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='User defined functions' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='User defined functions' mysql.global_grants CREATE TABLE `global_grants` ( `USER` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', - `HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `HOST` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `PRIV` char(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `WITH_GRANT_OPTION` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', PRIMARY KEY (`USER`,`HOST`,`PRIV`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Extended global grants' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Extended global grants' mysql.help_category CREATE TABLE `help_category` ( @@ -93,7 +93,7 @@ CREATE TABLE `help_category` ( `url` text NOT NULL, PRIMARY KEY (`help_category_id`), UNIQUE KEY `name` (`name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='help categories' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='help categories' mysql.help_keyword CREATE TABLE `help_keyword` ( @@ -101,14 +101,14 @@ CREATE TABLE `help_keyword` ( `name` char(64) NOT NULL, PRIMARY KEY (`help_keyword_id`), UNIQUE KEY `name` (`name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='help keywords' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='help keywords' mysql.help_relation CREATE TABLE `help_relation` ( `help_topic_id` int(10) unsigned NOT NULL, `help_keyword_id` int(10) unsigned NOT NULL, PRIMARY KEY (`help_keyword_id`,`help_topic_id`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='keyword-topic relation' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='keyword-topic relation' mysql.help_topic CREATE TABLE `help_topic` ( @@ -120,60 +120,60 @@ CREATE TABLE `help_topic` ( `url` text NOT NULL, PRIMARY KEY (`help_topic_id`), UNIQUE KEY `name` (`name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='help topics' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='help topics' mysql.password_history CREATE TABLE `password_history` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Password_timestamp` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `Password` text COLLATE utf8_bin, PRIMARY KEY (`Host`,`User`,`Password_timestamp` DESC) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Password history for user accounts' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Password history for user accounts' mysql.plugin CREATE TABLE `plugin` ( `name` varchar(64) NOT NULL DEFAULT '', `dl` varchar(128) NOT NULL DEFAULT '', PRIMARY KEY (`name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='MySQL plugins' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='MySQL plugins' mysql.procs_priv CREATE TABLE `procs_priv` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Routine_name` char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `Routine_type` enum('FUNCTION','PROCEDURE') COLLATE utf8_bin NOT NULL, - `Grantor` varchar(288) COLLATE utf8_bin NOT NULL DEFAULT '', + `Grantor` char(93) COLLATE utf8_bin NOT NULL DEFAULT '', `Proc_priv` set('Execute','Alter Routine','Grant') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`Host`,`Db`,`User`,`Routine_name`,`Routine_type`), KEY `Grantor` (`Grantor`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Procedure privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Procedure privileges' mysql.proxies_priv CREATE TABLE `proxies_priv` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', - `Proxied_host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Proxied_host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `Proxied_user` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `With_grant` tinyint(1) NOT NULL DEFAULT '0', - `Grantor` varchar(288) COLLATE utf8_bin NOT NULL DEFAULT '', + `Grantor` char(93) COLLATE utf8_bin NOT NULL DEFAULT '', `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`Host`,`User`,`Proxied_host`,`Proxied_user`), KEY `Grantor` (`Grantor`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='User proxy privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='User proxy privileges' mysql.role_edges CREATE TABLE `role_edges` ( - `FROM_HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `FROM_HOST` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `FROM_USER` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', - `TO_HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `TO_HOST` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `TO_USER` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `WITH_ADMIN_OPTION` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', PRIMARY KEY (`FROM_HOST`,`FROM_USER`,`TO_HOST`,`TO_USER`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Role hierarchy and role grants' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Role hierarchy and role grants' mysql.server_cost CREATE TABLE `server_cost` ( @@ -183,12 +183,12 @@ CREATE TABLE `server_cost` ( `comment` varchar(1024) DEFAULT NULL, `default_value` float GENERATED ALWAYS AS ((case `cost_name` when _utf8mb3'disk_temptable_create_cost' then 20.0 when _utf8mb3'disk_temptable_row_cost' then 0.5 when _utf8mb3'key_compare_cost' then 0.05 when _utf8mb3'memory_temptable_create_cost' then 1.0 when _utf8mb3'memory_temptable_row_cost' then 0.1 when _utf8mb3'row_evaluate_cost' then 0.1 else NULL end)) VIRTUAL, PRIMARY KEY (`cost_name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 mysql.servers CREATE TABLE `servers` ( `Server_name` char(64) NOT NULL DEFAULT '', - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(64) NOT NULL DEFAULT '', `Db` char(64) NOT NULL DEFAULT '', `Username` char(64) NOT NULL DEFAULT '', `Password` char(64) NOT NULL DEFAULT '', @@ -197,42 +197,42 @@ CREATE TABLE `servers` ( `Wrapper` char(64) NOT NULL DEFAULT '', `Owner` char(64) NOT NULL DEFAULT '', PRIMARY KEY (`Server_name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='MySQL Foreign Servers table' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='MySQL Foreign Servers table' mysql.tables_priv CREATE TABLE `tables_priv` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '', - `Grantor` varchar(288) COLLATE utf8_bin NOT NULL DEFAULT '', + `Grantor` char(93) COLLATE utf8_bin NOT NULL DEFAULT '', `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') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`), KEY `Grantor` (`Grantor`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Table privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Table privileges' mysql.time_zone CREATE TABLE `time_zone` ( `Time_zone_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Use_leap_seconds` enum('Y','N') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', PRIMARY KEY (`Time_zone_id`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Time zones' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Time zones' mysql.time_zone_leap_second CREATE TABLE `time_zone_leap_second` ( `Transition_time` bigint(20) NOT NULL, `Correction` int(11) NOT NULL, PRIMARY KEY (`Transition_time`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Leap seconds information for time zones' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Leap seconds information for time zones' mysql.time_zone_name CREATE TABLE `time_zone_name` ( `Name` char(64) NOT NULL, `Time_zone_id` int(10) unsigned NOT NULL, PRIMARY KEY (`Name`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Time zone names' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Time zone names' mysql.time_zone_transition CREATE TABLE `time_zone_transition` ( @@ -240,7 +240,7 @@ CREATE TABLE `time_zone_transition` ( `Transition_time` bigint(20) NOT NULL, `Transition_type_id` int(10) unsigned NOT NULL, PRIMARY KEY (`Time_zone_id`,`Transition_time`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Time zone transitions' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Time zone transitions' mysql.time_zone_transition_type CREATE TABLE `time_zone_transition_type` ( @@ -250,11 +250,11 @@ CREATE TABLE `time_zone_transition_type` ( `Is_DST` tinyint(3) unsigned NOT NULL DEFAULT '0', `Abbreviation` char(8) NOT NULL DEFAULT '', PRIMARY KEY (`Time_zone_id`,`Transition_type_id`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Time zone transition types' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Time zone transition types' mysql.user CREATE TABLE `user` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Select_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', `Insert_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', @@ -304,9 +304,8 @@ CREATE TABLE `user` ( `Password_reuse_history` smallint(5) unsigned DEFAULT NULL, `Password_reuse_time` smallint(5) unsigned DEFAULT NULL, `Password_require_current` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, - `User_attributes` json DEFAULT NULL, PRIMARY KEY (`Host`,`User`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Users and global privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Users and global privileges' percona_test.checksums CREATE TABLE `checksums` ( diff --git a/t/lib/samples/SchemaIterator/mysql-user-ddl-8.0.txt b/t/lib/samples/SchemaIterator/mysql-user-ddl-8.0.txt index f7cd2c60..06a50a03 100644 --- a/t/lib/samples/SchemaIterator/mysql-user-ddl-8.0.txt +++ b/t/lib/samples/SchemaIterator/mysql-user-ddl-8.0.txt @@ -1,6 +1,6 @@ mysql.user CREATE TABLE `user` ( - `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '', + `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', `Select_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', `Insert_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', @@ -50,7 +50,6 @@ CREATE TABLE `user` ( `Password_reuse_history` smallint(5) unsigned DEFAULT NULL, `Password_reuse_time` smallint(5) unsigned DEFAULT NULL, `Password_require_current` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, - `User_attributes` json DEFAULT NULL, PRIMARY KEY (`Host`,`User`) -) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Users and global privileges' +) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Users and global privileges' diff --git a/t/pt-online-schema-change/long_fk_constraints.t b/t/pt-online-schema-change/long_fk_constraints.t index 1ef52ed8..119ab39a 100644 --- a/t/pt-online-schema-change/long_fk_constraints.t +++ b/t/pt-online-schema-change/long_fk_constraints.t @@ -52,17 +52,23 @@ $sb->load_file('master', "$sample/long_fk_constraints.sql"); warn $output; -my $constraints = $master_dbh->selectall_arrayref("SELECT TABLE_NAME, CONSTRAINT_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE table_schema='bug1215587' and (TABLE_NAME='Table1' OR TABLE_NAME='Table2') and CONSTRAINT_NAME LIKE '%fkey%' ORDER BY TABLE_NAME, CONSTRAINT_NAME"); - -warn Data::Dumper::Dumper($constraints); +my $query = <<_SQL; + SELECT TABLE_NAME, CONSTRAINT_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE table_schema='bug1215587' + and (TABLE_NAME='Table1' OR TABLE_NAME='Table2') + and CONSTRAINT_NAME LIKE '%fkey%' +ORDER BY TABLE_NAME, CONSTRAINT_NAME +_SQL +my $constraints = $master_dbh->selectall_arrayref($query); is_deeply( $constraints, [ [ 'Table1', '__fkey1a' ], [ 'Table1', '__fkey_SALES_RECURRING_PROFILE_CUSTOMER_CUSTOMER_ENTITY_ENTITY_I' ], + [ 'Table2', '__fkey2b' ], [ 'Table2', '_fkey2a' ], - [ 'Table2', '__fkey2b' ] ], "First run adds or removes underscore from constraint names, accordingly" ); diff --git a/t/pt-online-schema-change/rename_fk_constraints.t b/t/pt-online-schema-change/rename_fk_constraints.t index f064ccfe..7c5b47b2 100644 --- a/t/pt-online-schema-change/rename_fk_constraints.t +++ b/t/pt-online-schema-change/rename_fk_constraints.t @@ -21,6 +21,13 @@ my $dp = new DSNParser(opts=>$dsn_opts); my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp); my $master_dbh = $sb->get_dbh_for('master'); +my $vp = VersionParser->new($master_dbh); +warn Data::Dumper::Dumper($vp); + +if ($vp->cmp('8.0.14') > -1 && $vp->flavor() !~ m/maria/i) { + plan skip_all => 'Cannot run this test under the current MySQL version'; +} + if ( !$master_dbh ) { plan skip_all => 'Cannot connect to sandbox master'; } @@ -50,16 +57,24 @@ $sb->load_file('master', "$sample/bug-1215587.sql"); qw(--execute)) }, ); -my $constraints = $master_dbh->selectall_arrayref("SELECT TABLE_NAME, CONSTRAINT_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE table_schema='bug1215587' and (TABLE_NAME='Table1' OR TABLE_NAME='Table2') and CONSTRAINT_NAME LIKE '%fkey%' ORDER BY TABLE_NAME, CONSTRAINT_NAME"); +my $query = <<__SQL; + SELECT TABLE_NAME, CONSTRAINT_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE table_schema='bug1215587' + and (TABLE_NAME='Table1' OR TABLE_NAME='Table2') + and CONSTRAINT_NAME LIKE '%fkey%' +ORDER BY TABLE_NAME, CONSTRAINT_NAME +__SQL +my $constraints = $master_dbh->selectall_arrayref($query); is_deeply( $constraints, [ - ['Table1', '_fkey1b'], ['Table1', '__fkey1a'], - ['Table2', '_fkey2a'], + ['Table1', '_fkey1b'], ['Table2', '__fkey2b'], + ['Table2', '_fkey2a'], ], "First run adds or removes underscore from constraint names, accordingly" ); @@ -81,10 +96,10 @@ $constraints = $master_dbh->selectall_arrayref("SELECT TABLE_NAME, CONSTRAINT_NA is_deeply( $constraints, [ - ['Table1', 'fkey1a'], ['Table1', '__fkey1b'], - ['Table2', 'fkey2b'], + ['Table1', 'fkey1a'], ['Table2', '__fkey2a'], + ['Table2', 'fkey2b'], ], "Second run adds or removes underscore from constraint names, accordingly" ); @@ -103,10 +118,10 @@ $constraints = $master_dbh->selectall_arrayref("SELECT TABLE_NAME, CONSTRAINT_NA is_deeply( $constraints, [ - ['Table1', 'fkey1b'], ['Table1', '_fkey1a'], - ['Table2', 'fkey2a'], + ['Table1', 'fkey1b'], ['Table2', '_fkey2b'], + ['Table2', 'fkey2a'], ], "Third run toggles constraint names back to how they were" ); diff --git a/t/pt-online-schema-change/rename_self_ref_fk_constraints.t b/t/pt-online-schema-change/rename_self_ref_fk_constraints.t index 4b56d000..101ea709 100644 --- a/t/pt-online-schema-change/rename_self_ref_fk_constraints.t +++ b/t/pt-online-schema-change/rename_self_ref_fk_constraints.t @@ -39,7 +39,9 @@ my $sample = "t/pt-online-schema-change/samples/"; # pt-online-schema-change fails with duplicate key in table for self-referencing FK # ############################################################################ +diag("Before loading sql"); $sb->load_file('master', "$sample/bug-1632522.sql"); +diag("after loading sql"); # run once: we expect the constraint name to be appended with one underscore # but the self-referencing constraint will have 2 underscore diff --git a/t/pt-table-checksum/pt-1728.t b/t/pt-table-checksum/pt-1728.t index 6b0bf67a..32987476 100644 --- a/t/pt-table-checksum/pt-1728.t +++ b/t/pt-table-checksum/pt-1728.t @@ -82,17 +82,6 @@ unlike( "Truncating tables while checksum is running" ); -$sb->load_file('master', 't/pt-table-checksum/samples/pt-1728.sql'); -@args = ($master_dsn, qw(--no-check-binlog-format)); -my $new_rows_count = $num_rows * 5; -diag(`util/mysql_random_data_load --host=127.0.0.1 --port=12345 --user=msandbox --password=msandbox test $table $new_rows_count`); -$output = output( - sub { pt_table_checksum::main(@args) }, - stderr => 1, -); - -diag($output); - $thr->join(); # ############################################################################# diff --git a/util/mysql_random_data_load b/util/mysql_random_data_load index 3a850355..c8df0b33 100755 Binary files a/util/mysql_random_data_load and b/util/mysql_random_data_load differ