mirror of
https://github.com/percona/percona-toolkit.git
synced 2026-04-16 01:00:38 +08:00
Add forked Maatkit tools in bin/ and their tests in t/.
This commit is contained in:
194
t/pt-online-schema-change/alter_active_table.t
Normal file
194
t/pt-online-schema-change/alter_active_table.t
Normal file
@@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use MaatkitTest;
|
||||
use Sandbox;
|
||||
use Time::HiRes qw(usleep);
|
||||
use Data::Dumper;
|
||||
$Data::Dumper::Indent = 1;
|
||||
$Data::Dumper::Sortkeys = 1;
|
||||
$Data::Dumper::Quotekeys = 0;
|
||||
require "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 7;
|
||||
}
|
||||
|
||||
my $output = "";
|
||||
my $cnf = '/tmp/12345/my.sandbox.cnf';
|
||||
my @args = ('-F', $cnf);
|
||||
my $exit = 0;
|
||||
my $rows;
|
||||
|
||||
my $query_table_stop = '/tmp/query_table.stop';
|
||||
my $query_table_output = '/tmp/query_table.output';
|
||||
diag(`rm -rf $query_table_stop`);
|
||||
diag(`rm -rf $query_table_output`);
|
||||
|
||||
sub start_query_table {
|
||||
my ($db, $tbl, $pkcol) = @_;
|
||||
|
||||
diag(`rm -rf $query_table_stop`);
|
||||
diag(`echo > $query_table_output`);
|
||||
|
||||
my $cmd = "$trunk/t/pt-online-schema-change/samples/query_table.pl";
|
||||
system("$cmd 127.1 12345 $db $tbl $pkcol >$query_table_output &");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub stop_query_table {
|
||||
diag(`touch $query_table_stop`);
|
||||
sleep 1;
|
||||
return;
|
||||
}
|
||||
|
||||
sub get_ids {
|
||||
open my $fh, '<', $query_table_output
|
||||
or die "Cannot open $query_table_output: $OS_ERROR";
|
||||
my @lines = <$fh>;
|
||||
close $fh;
|
||||
|
||||
my %ids;
|
||||
foreach my $line ( @lines ) {
|
||||
my ($stmt, $ids) = split(':', $line);
|
||||
chomp $ids;
|
||||
$ids{$stmt} = $ids;
|
||||
}
|
||||
|
||||
return \%ids;
|
||||
};
|
||||
|
||||
sub check_ids {
|
||||
my ( $db, $tbl, $pkcol, $ids ) = @_;
|
||||
my $rows;
|
||||
|
||||
my $n_updated = $ids->{updated} ? ($ids->{updated} =~ tr/,//) : 0;
|
||||
my $n_deleted = $ids->{deleted} ? ($ids->{deleted} =~ tr/,//) : 0;
|
||||
my $n_inserted = ($ids->{inserted} =~ tr/,//);
|
||||
|
||||
# "1,1"=~tr/,// returns 1 but is 2 values
|
||||
$n_updated++ if $n_updated;
|
||||
$n_deleted++ if $n_deleted;
|
||||
$n_inserted++;
|
||||
|
||||
$rows = $dbh->selectrow_arrayref(
|
||||
"SELECT COUNT($pkcol) FROM $db.$tbl");
|
||||
is(
|
||||
$rows->[0],
|
||||
500 + $n_inserted - $n_deleted,
|
||||
"New table row count: 500 original + $n_inserted inserted - $n_deleted deleted"
|
||||
) or print Dumper($rows);
|
||||
|
||||
$rows = $dbh->selectall_arrayref(
|
||||
"SELECT $pkcol FROM $db.$tbl WHERE $pkcol > 500 AND $pkcol NOT IN ($ids->{inserted})");
|
||||
is_deeply(
|
||||
$rows,
|
||||
[],
|
||||
"No extra rows inserted in new table"
|
||||
) or print Dumper($rows);
|
||||
|
||||
if ( $n_deleted ) {
|
||||
$rows = $dbh->selectall_arrayref(
|
||||
"SELECT $pkcol FROM $db.$tbl WHERE $pkcol IN ($ids->{deleted})");
|
||||
is_deeply(
|
||||
$rows,
|
||||
[],
|
||||
"No deleted rows present in new table"
|
||||
) or print Dumper($rows);
|
||||
}
|
||||
else {
|
||||
ok(
|
||||
1,
|
||||
"No rows deleted"
|
||||
);
|
||||
};
|
||||
|
||||
if ( $n_updated ) {
|
||||
$rows = $dbh->selectall_arrayref(
|
||||
"SELECT $pkcol FROM $db.$tbl WHERE $pkcol IN ($ids->{updated}) "
|
||||
. "AND c <> 'updated'");
|
||||
is_deeply(
|
||||
$rows,
|
||||
[],
|
||||
"Updated rows correct in new table"
|
||||
) or print Dumper($rows);
|
||||
}
|
||||
else {
|
||||
ok(
|
||||
1,
|
||||
"No rows updated"
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
# #############################################################################
|
||||
# Attempt to alter a table while another process is changing it.
|
||||
# #############################################################################
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/small_table.sql");
|
||||
$dbh->do('use mkosc');
|
||||
$dbh->do('truncate table a');
|
||||
diag(`cp $trunk/t/pt-online-schema-change/samples/a.outfile /tmp/`);
|
||||
$dbh->do("load data local infile '/tmp/a.outfile' into table mkosc.a");
|
||||
diag(`rm -rf /tmp/a.outfile`);
|
||||
|
||||
start_query_table(qw(mkosc a i));
|
||||
$output = output(
|
||||
sub { $exit = mk_online_schema_change::main(@args,
|
||||
qw(--chunk-size 100),
|
||||
'D=mkosc,t=a', qw(--alter ENGINE=InnoDB --drop-old-table)) },
|
||||
);
|
||||
stop_query_table();
|
||||
|
||||
$rows = $dbh->selectall_hashref('show table status from mkosc', 'name');
|
||||
is(
|
||||
$rows->{a}->{engine},
|
||||
'InnoDB',
|
||||
"New table ENGINE=InnoDB"
|
||||
);
|
||||
|
||||
is(
|
||||
scalar keys %$rows,
|
||||
1,
|
||||
"Dropped old table"
|
||||
);
|
||||
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0"
|
||||
);
|
||||
|
||||
check_ids('mkosc', 'a', 'i', get_ids());
|
||||
|
||||
# ############################################################################
|
||||
# Alter an active table with foreign keys.
|
||||
# ############################################################################
|
||||
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
diag(`rm -rf $query_table_stop`);
|
||||
#diag(`echo > $query_table_output`);
|
||||
#$sb->wipe_clean($dbh);
|
||||
exit;
|
||||
239
t/pt-online-schema-change/basics.t
Normal file
239
t/pt-online-schema-change/basics.t
Normal file
@@ -0,0 +1,239 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use MaatkitTest;
|
||||
use Sandbox;
|
||||
require "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
use Data::Dumper;
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 18;
|
||||
}
|
||||
|
||||
my $output = "";
|
||||
my $cnf = '/tmp/12345/my.sandbox.cnf';
|
||||
my @args = ('-F', $cnf);
|
||||
my $exit = 0;
|
||||
my $rows;
|
||||
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/small_table.sql");
|
||||
$dbh->do('use mkosc');
|
||||
|
||||
# #############################################################################
|
||||
# --check-tables-and-exit
|
||||
# #############################################################################
|
||||
eval {
|
||||
$exit = mk_online_schema_change::main(@args,
|
||||
'D=mkosc,t=a', qw(--check-tables-and-exit --quiet))
|
||||
};
|
||||
|
||||
is(
|
||||
$EVAL_ERROR,
|
||||
"",
|
||||
"--check-tables-and-exit"
|
||||
);
|
||||
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# --cleanup-and-exit
|
||||
# #############################################################################
|
||||
eval {
|
||||
$exit = mk_online_schema_change::main(@args,
|
||||
'D=mkosc,t=a', qw(--cleanup-and-exit --quiet))
|
||||
};
|
||||
|
||||
is(
|
||||
$EVAL_ERROR,
|
||||
"",
|
||||
"--cleanup-and-exit",
|
||||
);
|
||||
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# The most basic: copy, alter and rename a small table that's not even active.
|
||||
# #############################################################################
|
||||
|
||||
output(
|
||||
sub { $exit = mk_online_schema_change::main(@args,
|
||||
'D=mkosc,t=a', qw(--alter ENGINE=InnoDB)) },
|
||||
);
|
||||
|
||||
$rows = $dbh->selectall_hashref('show table status from mkosc', 'name');
|
||||
is(
|
||||
$rows->{a}->{engine},
|
||||
'InnoDB',
|
||||
"New table ENGINE=InnoDB"
|
||||
);
|
||||
|
||||
is(
|
||||
$rows->{__old_a}->{engine},
|
||||
'MyISAM',
|
||||
"Kept old table, ENGINE=MyISAM"
|
||||
);
|
||||
|
||||
my $org_rows = $dbh->selectall_arrayref('select * from mkosc.__old_a order by i');
|
||||
my $new_rows = $dbh->selectall_arrayref('select * from mkosc.a order by i');
|
||||
is_deeply(
|
||||
$new_rows,
|
||||
$org_rows,
|
||||
"New tables rows identical to old table rows"
|
||||
);
|
||||
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# No --alter and --drop-old-table.
|
||||
# #############################################################################
|
||||
$dbh->do('drop table mkosc.__old_a'); # from previous run
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/small_table.sql");
|
||||
|
||||
output(
|
||||
sub { $exit = mk_online_schema_change::main(@args,
|
||||
'D=mkosc,t=a', qw(--drop-old-table)) },
|
||||
);
|
||||
|
||||
$rows = $dbh->selectall_hashref('show table status from mkosc', 'name');
|
||||
is(
|
||||
$rows->{a}->{engine},
|
||||
'MyISAM',
|
||||
"No --alter, new table still ENGINE=MyISAM"
|
||||
);
|
||||
|
||||
ok(
|
||||
!exists $rows->{__old_a},
|
||||
"--drop-old-table"
|
||||
);
|
||||
|
||||
$new_rows = $dbh->selectall_arrayref('select * from mkosc.a order by i');
|
||||
is_deeply(
|
||||
$new_rows,
|
||||
$org_rows, # from previous run since old table was dropped this run
|
||||
"New tables rows identical to old table rows"
|
||||
);
|
||||
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0"
|
||||
);
|
||||
|
||||
# ############################################################################
|
||||
# Alter a table with foreign keys.
|
||||
# ############################################################################
|
||||
|
||||
# The tables we're loading have fk constraints like:
|
||||
# country
|
||||
# ^- city (on update cascade)
|
||||
# ^- address (on update cascade)
|
||||
|
||||
############################
|
||||
# rebuild_constraints method
|
||||
############################
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/fk_tables_schema.sql");
|
||||
|
||||
# city has a fk constraint on country, so get its original table def.
|
||||
my $orig_table_def = $dbh->selectrow_hashref('show create table mkosc.city')->{'create table'};
|
||||
|
||||
# Alter the parent table. The error we need to avoid is:
|
||||
# DBD::mysql::db do failed: Cannot delete or update a parent row:
|
||||
# a foreign key constraint fails [for Statement "DROP TABLE
|
||||
# `mkosc`.`__old_country`"]
|
||||
output(
|
||||
sub { $exit = mk_online_schema_change::main(@args,
|
||||
'D=mkosc,t=country', qw(--child-tables auto_detect --drop-old-table),
|
||||
qw(--update-foreign-keys-method rebuild_constraints)) },
|
||||
);
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0 (rebuild_constraints method)"
|
||||
);
|
||||
|
||||
$rows = $dbh->selectall_arrayref('show tables from mkosc like "\_\_%"');
|
||||
is_deeply(
|
||||
$rows,
|
||||
[],
|
||||
"Old table dropped (rebuild_constraints method)"
|
||||
);
|
||||
|
||||
# Get city's table def again and verify that its fk constraint still
|
||||
# references country. When country was renamed to __old_country, MySQL
|
||||
# also updated city's fk constraint to __old_country. We should have
|
||||
# dropped and re-added that constraint exactly, changing only __old_country
|
||||
# to country, like it originally was.
|
||||
my $new_table_def = $dbh->selectrow_hashref('show create table mkosc.city')->{'create table'};
|
||||
is(
|
||||
$new_table_def,
|
||||
$orig_table_def,
|
||||
"Updated child table foreign key constraint (rebuild_constraints method)"
|
||||
);
|
||||
|
||||
#######################
|
||||
# drop_old_table method
|
||||
#######################
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/fk_tables_schema.sql");
|
||||
|
||||
$orig_table_def = $dbh->selectrow_hashref('show create table mkosc.city')->{'create table'};
|
||||
|
||||
output(
|
||||
sub { $exit = mk_online_schema_change::main(@args,
|
||||
'D=mkosc,t=country', qw(--child-tables auto_detect),
|
||||
qw(--update-foreign-keys-method drop_old_table)) },
|
||||
);
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"Exit status 0 (drop_old_table method)"
|
||||
);
|
||||
|
||||
$rows = $dbh->selectall_arrayref('show tables from mkosc like "\_\_%"');
|
||||
is_deeply(
|
||||
$rows,
|
||||
[],
|
||||
"Old table dropped (drop_old_table method)"
|
||||
) or print Dumper($rows);
|
||||
|
||||
$new_table_def = $dbh->selectrow_hashref('show create table mkosc.city')->{'create table'};
|
||||
is(
|
||||
$new_table_def,
|
||||
$orig_table_def,
|
||||
"Updated child table foreign key constraint (drop_old_table method)"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($dbh);
|
||||
exit;
|
||||
128
t/pt-online-schema-change/check_tables.t
Normal file
128
t/pt-online-schema-change/check_tables.t
Normal file
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use MaatkitTest;
|
||||
use Sandbox;
|
||||
require "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 8;
|
||||
}
|
||||
|
||||
my $vp = new VersionParser();
|
||||
my $q = new Quoter();
|
||||
my $tp = new TableParser(Quoter => $q);
|
||||
my $du = new MySQLDump();
|
||||
my $chunker = new TableChunker(Quoter => $q, MySQLDump => $du);
|
||||
my $o = new OptionParser();
|
||||
|
||||
$o->get_specs("$trunk/bin/pt-online-schema-change");
|
||||
$o->get_opts();
|
||||
mk_online_schema_change::__set_quiet(1);
|
||||
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/small_table.sql");
|
||||
$dbh->do('use mkosc');
|
||||
|
||||
my $old_tbl_struct = $tp->parse($du->get_create_table($dbh, $q, 'mkosc', 'a'));
|
||||
|
||||
my %args = (
|
||||
dbh => $dbh,
|
||||
db => 'mkosc',
|
||||
tbl => 'a',
|
||||
tmp_tbl => '__tmp_a',
|
||||
old_tbl => '__old_a', # what tbl becomes after swapped with tmp_tbl
|
||||
VersionParser => $vp,
|
||||
Quoter => $q,
|
||||
TableParser => $tp,
|
||||
OptionParser => $o,
|
||||
TableChunker => $chunker,
|
||||
MySQLDump => $du,
|
||||
);
|
||||
|
||||
my %tbl_info = mk_online_schema_change::check_tables(%args);
|
||||
is(
|
||||
$tbl_info{chunk_column},
|
||||
"i",
|
||||
"check_tables() returns chunk_column"
|
||||
);
|
||||
|
||||
is(
|
||||
$tbl_info{chunk_index},
|
||||
"PRIMARY",
|
||||
"check_tables() returns chunk_index"
|
||||
);
|
||||
|
||||
ok(
|
||||
exists $tbl_info{tbl_struct},
|
||||
"check_tables() returns tbl_struct"
|
||||
);
|
||||
|
||||
throws_ok(
|
||||
sub { mk_online_schema_change::check_tables(
|
||||
%args,
|
||||
tbl => 'does_not_exist'
|
||||
) },
|
||||
qr/Table mkosc.does_not_exist does not exist/,
|
||||
"Table must exist"
|
||||
);
|
||||
|
||||
@ARGV = qw(--rename-tables);
|
||||
$o->get_opts();
|
||||
throws_ok(
|
||||
sub { mk_online_schema_change::check_tables(
|
||||
%args,
|
||||
old_tbl => 'a',
|
||||
) },
|
||||
qr/Table mkosc.a exists which will prevent mkosc.a/,
|
||||
"Old table cannot already exist if --rename-tables"
|
||||
);
|
||||
|
||||
throws_ok(
|
||||
sub { mk_online_schema_change::check_tables(
|
||||
%args,
|
||||
tmp_tbl => 'a',
|
||||
) },
|
||||
qr/Temporary table mkosc.a exists/,
|
||||
"Temporary table cannot already exist"
|
||||
);
|
||||
|
||||
$dbh->do('CREATE TRIGGER foo AFTER DELETE ON mkosc.a FOR EACH ROW DELETE FROM mkosc.a WHERE 0');
|
||||
throws_ok(
|
||||
sub { mk_online_schema_change::check_tables(%args) },
|
||||
qr/Table mkosc.a has triggers/,
|
||||
"Old table cannot have triggers"
|
||||
);
|
||||
$dbh->do('DROP TRIGGER mkosc.foo');
|
||||
|
||||
$dbh->do('ALTER TABLE mkosc.a DROP COLUMN i');
|
||||
my $tmp_struct = $tp->parse($du->get_create_table($dbh, $q, 'mkosc', 'a'));
|
||||
throws_ok(
|
||||
sub { mk_online_schema_change::check_tables(
|
||||
%args,
|
||||
) },
|
||||
qr/Table mkosc.a cannot be chunked/,
|
||||
"Table must have a chunkable index"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($dbh);
|
||||
exit;
|
||||
50
t/pt-online-schema-change/option_sanity.t
Normal file
50
t/pt-online-schema-change/option_sanity.t
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More tests => 4;
|
||||
|
||||
use MaatkitTest;
|
||||
|
||||
my $output = "";
|
||||
my $cmd = "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
$output = `$cmd`;
|
||||
like(
|
||||
$output,
|
||||
qr/A DSN with a t part must be specified/,
|
||||
"Must specify a DSN with t part"
|
||||
);
|
||||
|
||||
$output = `$cmd h=127.1,P=12345,u=msandbox,p=msandbox`;
|
||||
like(
|
||||
$output,
|
||||
qr/The DSN must specify a t/,
|
||||
"DSN must specify t part"
|
||||
);
|
||||
|
||||
$output = `$cmd h=127.1,P=12345,u=msandbox,p=msandbox h=127.1`;
|
||||
like(
|
||||
$output,
|
||||
qr/Specify only one DSN/,
|
||||
"Only 1 DSN allowed"
|
||||
);
|
||||
|
||||
$output = `$cmd h=127.1,P=12345,t=tbl`;
|
||||
like(
|
||||
$output,
|
||||
qr/No database was specified/,
|
||||
"Either DSN D part or --database required"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
exit;
|
||||
500
t/pt-online-schema-change/samples/a.outfile
Normal file
500
t/pt-online-schema-change/samples/a.outfile
Normal file
@@ -0,0 +1,500 @@
|
||||
1 loaded 2011-03-17
|
||||
2 loaded 2011-03-17
|
||||
3 loaded 2011-03-17
|
||||
4 loaded 2011-03-17
|
||||
5 loaded 2011-03-17
|
||||
6 loaded 2011-03-17
|
||||
7 loaded 2011-03-17
|
||||
8 loaded 2011-03-17
|
||||
9 loaded 2011-03-17
|
||||
10 loaded 2011-03-17
|
||||
11 loaded 2011-03-17
|
||||
12 loaded 2011-03-17
|
||||
13 loaded 2011-03-17
|
||||
14 loaded 2011-03-17
|
||||
15 loaded 2011-03-17
|
||||
16 loaded 2011-03-17
|
||||
17 loaded 2011-03-17
|
||||
18 loaded 2011-03-17
|
||||
19 loaded 2011-03-17
|
||||
20 loaded 2011-03-17
|
||||
21 loaded 2011-03-17
|
||||
22 loaded 2011-03-17
|
||||
23 loaded 2011-03-17
|
||||
24 loaded 2011-03-17
|
||||
25 loaded 2011-03-17
|
||||
26 loaded 2011-03-17
|
||||
27 loaded 2011-03-17
|
||||
28 loaded 2011-03-17
|
||||
29 loaded 2011-03-17
|
||||
30 loaded 2011-03-17
|
||||
31 loaded 2011-03-17
|
||||
32 loaded 2011-03-17
|
||||
33 loaded 2011-03-17
|
||||
34 loaded 2011-03-17
|
||||
35 loaded 2011-03-17
|
||||
36 loaded 2011-03-17
|
||||
37 loaded 2011-03-17
|
||||
38 loaded 2011-03-17
|
||||
39 loaded 2011-03-17
|
||||
40 loaded 2011-03-17
|
||||
41 loaded 2011-03-17
|
||||
42 loaded 2011-03-17
|
||||
43 loaded 2011-03-17
|
||||
44 loaded 2011-03-17
|
||||
45 loaded 2011-03-17
|
||||
46 loaded 2011-03-17
|
||||
47 loaded 2011-03-17
|
||||
48 loaded 2011-03-17
|
||||
49 loaded 2011-03-17
|
||||
50 loaded 2011-03-17
|
||||
51 loaded 2011-03-17
|
||||
52 loaded 2011-03-17
|
||||
53 loaded 2011-03-17
|
||||
54 loaded 2011-03-17
|
||||
55 loaded 2011-03-17
|
||||
56 loaded 2011-03-17
|
||||
57 loaded 2011-03-17
|
||||
58 loaded 2011-03-17
|
||||
59 loaded 2011-03-17
|
||||
60 loaded 2011-03-17
|
||||
61 loaded 2011-03-17
|
||||
62 loaded 2011-03-17
|
||||
63 loaded 2011-03-17
|
||||
64 loaded 2011-03-17
|
||||
65 loaded 2011-03-17
|
||||
66 loaded 2011-03-17
|
||||
67 loaded 2011-03-17
|
||||
68 loaded 2011-03-17
|
||||
69 loaded 2011-03-17
|
||||
70 loaded 2011-03-17
|
||||
71 loaded 2011-03-17
|
||||
72 loaded 2011-03-17
|
||||
73 loaded 2011-03-17
|
||||
74 loaded 2011-03-17
|
||||
75 loaded 2011-03-17
|
||||
76 loaded 2011-03-17
|
||||
77 loaded 2011-03-17
|
||||
78 loaded 2011-03-17
|
||||
79 loaded 2011-03-17
|
||||
80 loaded 2011-03-17
|
||||
81 loaded 2011-03-17
|
||||
82 loaded 2011-03-17
|
||||
83 loaded 2011-03-17
|
||||
84 loaded 2011-03-17
|
||||
85 loaded 2011-03-17
|
||||
86 loaded 2011-03-17
|
||||
87 loaded 2011-03-17
|
||||
88 loaded 2011-03-17
|
||||
89 loaded 2011-03-17
|
||||
90 loaded 2011-03-17
|
||||
91 loaded 2011-03-17
|
||||
92 loaded 2011-03-17
|
||||
93 loaded 2011-03-17
|
||||
94 loaded 2011-03-17
|
||||
95 loaded 2011-03-17
|
||||
96 loaded 2011-03-17
|
||||
97 loaded 2011-03-17
|
||||
98 loaded 2011-03-17
|
||||
99 loaded 2011-03-17
|
||||
100 loaded 2011-03-17
|
||||
101 loaded 2011-03-17
|
||||
102 loaded 2011-03-17
|
||||
103 loaded 2011-03-17
|
||||
104 loaded 2011-03-17
|
||||
105 loaded 2011-03-17
|
||||
106 loaded 2011-03-17
|
||||
107 loaded 2011-03-17
|
||||
108 loaded 2011-03-17
|
||||
109 loaded 2011-03-17
|
||||
110 loaded 2011-03-17
|
||||
111 loaded 2011-03-17
|
||||
112 loaded 2011-03-17
|
||||
113 loaded 2011-03-17
|
||||
114 loaded 2011-03-17
|
||||
115 loaded 2011-03-17
|
||||
116 loaded 2011-03-17
|
||||
117 loaded 2011-03-17
|
||||
118 loaded 2011-03-17
|
||||
119 loaded 2011-03-17
|
||||
120 loaded 2011-03-17
|
||||
121 loaded 2011-03-17
|
||||
122 loaded 2011-03-17
|
||||
123 loaded 2011-03-17
|
||||
124 loaded 2011-03-17
|
||||
125 loaded 2011-03-17
|
||||
126 loaded 2011-03-17
|
||||
127 loaded 2011-03-17
|
||||
128 loaded 2011-03-17
|
||||
129 loaded 2011-03-17
|
||||
130 loaded 2011-03-17
|
||||
131 loaded 2011-03-17
|
||||
132 loaded 2011-03-17
|
||||
133 loaded 2011-03-17
|
||||
134 loaded 2011-03-17
|
||||
135 loaded 2011-03-17
|
||||
136 loaded 2011-03-17
|
||||
137 loaded 2011-03-17
|
||||
138 loaded 2011-03-17
|
||||
139 loaded 2011-03-17
|
||||
140 loaded 2011-03-17
|
||||
141 loaded 2011-03-17
|
||||
142 loaded 2011-03-17
|
||||
143 loaded 2011-03-17
|
||||
144 loaded 2011-03-17
|
||||
145 loaded 2011-03-17
|
||||
146 loaded 2011-03-17
|
||||
147 loaded 2011-03-17
|
||||
148 loaded 2011-03-17
|
||||
149 loaded 2011-03-17
|
||||
150 loaded 2011-03-17
|
||||
151 loaded 2011-03-17
|
||||
152 loaded 2011-03-17
|
||||
153 loaded 2011-03-17
|
||||
154 loaded 2011-03-17
|
||||
155 loaded 2011-03-17
|
||||
156 loaded 2011-03-17
|
||||
157 loaded 2011-03-17
|
||||
158 loaded 2011-03-17
|
||||
159 loaded 2011-03-17
|
||||
160 loaded 2011-03-17
|
||||
161 loaded 2011-03-17
|
||||
162 loaded 2011-03-17
|
||||
163 loaded 2011-03-17
|
||||
164 loaded 2011-03-17
|
||||
165 loaded 2011-03-17
|
||||
166 loaded 2011-03-17
|
||||
167 loaded 2011-03-17
|
||||
168 loaded 2011-03-17
|
||||
169 loaded 2011-03-17
|
||||
170 loaded 2011-03-17
|
||||
171 loaded 2011-03-17
|
||||
172 loaded 2011-03-17
|
||||
173 loaded 2011-03-17
|
||||
174 loaded 2011-03-17
|
||||
175 loaded 2011-03-17
|
||||
176 loaded 2011-03-17
|
||||
177 loaded 2011-03-17
|
||||
178 loaded 2011-03-17
|
||||
179 loaded 2011-03-17
|
||||
180 loaded 2011-03-17
|
||||
181 loaded 2011-03-17
|
||||
182 loaded 2011-03-17
|
||||
183 loaded 2011-03-17
|
||||
184 loaded 2011-03-17
|
||||
185 loaded 2011-03-17
|
||||
186 loaded 2011-03-17
|
||||
187 loaded 2011-03-17
|
||||
188 loaded 2011-03-17
|
||||
189 loaded 2011-03-17
|
||||
190 loaded 2011-03-17
|
||||
191 loaded 2011-03-17
|
||||
192 loaded 2011-03-17
|
||||
193 loaded 2011-03-17
|
||||
194 loaded 2011-03-17
|
||||
195 loaded 2011-03-17
|
||||
196 loaded 2011-03-17
|
||||
197 loaded 2011-03-17
|
||||
198 loaded 2011-03-17
|
||||
199 loaded 2011-03-17
|
||||
200 loaded 2011-03-17
|
||||
201 loaded 2011-03-17
|
||||
202 loaded 2011-03-17
|
||||
203 loaded 2011-03-17
|
||||
204 loaded 2011-03-17
|
||||
205 loaded 2011-03-17
|
||||
206 loaded 2011-03-17
|
||||
207 loaded 2011-03-17
|
||||
208 loaded 2011-03-17
|
||||
209 loaded 2011-03-17
|
||||
210 loaded 2011-03-17
|
||||
211 loaded 2011-03-17
|
||||
212 loaded 2011-03-17
|
||||
213 loaded 2011-03-17
|
||||
214 loaded 2011-03-17
|
||||
215 loaded 2011-03-17
|
||||
216 loaded 2011-03-17
|
||||
217 loaded 2011-03-17
|
||||
218 loaded 2011-03-17
|
||||
219 loaded 2011-03-17
|
||||
220 loaded 2011-03-17
|
||||
221 loaded 2011-03-17
|
||||
222 loaded 2011-03-17
|
||||
223 loaded 2011-03-17
|
||||
224 loaded 2011-03-17
|
||||
225 loaded 2011-03-17
|
||||
226 loaded 2011-03-17
|
||||
227 loaded 2011-03-17
|
||||
228 loaded 2011-03-17
|
||||
229 loaded 2011-03-17
|
||||
230 loaded 2011-03-17
|
||||
231 loaded 2011-03-17
|
||||
232 loaded 2011-03-17
|
||||
233 loaded 2011-03-17
|
||||
234 loaded 2011-03-17
|
||||
235 loaded 2011-03-17
|
||||
236 loaded 2011-03-17
|
||||
237 loaded 2011-03-17
|
||||
238 loaded 2011-03-17
|
||||
239 loaded 2011-03-17
|
||||
240 loaded 2011-03-17
|
||||
241 loaded 2011-03-17
|
||||
242 loaded 2011-03-17
|
||||
243 loaded 2011-03-17
|
||||
244 loaded 2011-03-17
|
||||
245 loaded 2011-03-17
|
||||
246 loaded 2011-03-17
|
||||
247 loaded 2011-03-17
|
||||
248 loaded 2011-03-17
|
||||
249 loaded 2011-03-17
|
||||
250 loaded 2011-03-17
|
||||
251 loaded 2011-03-17
|
||||
252 loaded 2011-03-17
|
||||
253 loaded 2011-03-17
|
||||
254 loaded 2011-03-17
|
||||
255 loaded 2011-03-17
|
||||
256 loaded 2011-03-17
|
||||
257 loaded 2011-03-17
|
||||
258 loaded 2011-03-17
|
||||
259 loaded 2011-03-17
|
||||
260 loaded 2011-03-17
|
||||
261 loaded 2011-03-17
|
||||
262 loaded 2011-03-17
|
||||
263 loaded 2011-03-17
|
||||
264 loaded 2011-03-17
|
||||
265 loaded 2011-03-17
|
||||
266 loaded 2011-03-17
|
||||
267 loaded 2011-03-17
|
||||
268 loaded 2011-03-17
|
||||
269 loaded 2011-03-17
|
||||
270 loaded 2011-03-17
|
||||
271 loaded 2011-03-17
|
||||
272 loaded 2011-03-17
|
||||
273 loaded 2011-03-17
|
||||
274 loaded 2011-03-17
|
||||
275 loaded 2011-03-17
|
||||
276 loaded 2011-03-17
|
||||
277 loaded 2011-03-17
|
||||
278 loaded 2011-03-17
|
||||
279 loaded 2011-03-17
|
||||
280 loaded 2011-03-17
|
||||
281 loaded 2011-03-17
|
||||
282 loaded 2011-03-17
|
||||
283 loaded 2011-03-17
|
||||
284 loaded 2011-03-17
|
||||
285 loaded 2011-03-17
|
||||
286 loaded 2011-03-17
|
||||
287 loaded 2011-03-17
|
||||
288 loaded 2011-03-17
|
||||
289 loaded 2011-03-17
|
||||
290 loaded 2011-03-17
|
||||
291 loaded 2011-03-17
|
||||
292 loaded 2011-03-17
|
||||
293 loaded 2011-03-17
|
||||
294 loaded 2011-03-17
|
||||
295 loaded 2011-03-17
|
||||
296 loaded 2011-03-17
|
||||
297 loaded 2011-03-17
|
||||
298 loaded 2011-03-17
|
||||
299 loaded 2011-03-17
|
||||
300 loaded 2011-03-17
|
||||
301 loaded 2011-03-17
|
||||
302 loaded 2011-03-17
|
||||
303 loaded 2011-03-17
|
||||
304 loaded 2011-03-17
|
||||
305 loaded 2011-03-17
|
||||
306 loaded 2011-03-17
|
||||
307 loaded 2011-03-17
|
||||
308 loaded 2011-03-17
|
||||
309 loaded 2011-03-17
|
||||
310 loaded 2011-03-17
|
||||
311 loaded 2011-03-17
|
||||
312 loaded 2011-03-17
|
||||
313 loaded 2011-03-17
|
||||
314 loaded 2011-03-17
|
||||
315 loaded 2011-03-17
|
||||
316 loaded 2011-03-17
|
||||
317 loaded 2011-03-17
|
||||
318 loaded 2011-03-17
|
||||
319 loaded 2011-03-17
|
||||
320 loaded 2011-03-17
|
||||
321 loaded 2011-03-17
|
||||
322 loaded 2011-03-17
|
||||
323 loaded 2011-03-17
|
||||
324 loaded 2011-03-17
|
||||
325 loaded 2011-03-17
|
||||
326 loaded 2011-03-17
|
||||
327 loaded 2011-03-17
|
||||
328 loaded 2011-03-17
|
||||
329 loaded 2011-03-17
|
||||
330 loaded 2011-03-17
|
||||
331 loaded 2011-03-17
|
||||
332 loaded 2011-03-17
|
||||
333 loaded 2011-03-17
|
||||
334 loaded 2011-03-17
|
||||
335 loaded 2011-03-17
|
||||
336 loaded 2011-03-17
|
||||
337 loaded 2011-03-17
|
||||
338 loaded 2011-03-17
|
||||
339 loaded 2011-03-17
|
||||
340 loaded 2011-03-17
|
||||
341 loaded 2011-03-17
|
||||
342 loaded 2011-03-17
|
||||
343 loaded 2011-03-17
|
||||
344 loaded 2011-03-17
|
||||
345 loaded 2011-03-17
|
||||
346 loaded 2011-03-17
|
||||
347 loaded 2011-03-17
|
||||
348 loaded 2011-03-17
|
||||
349 loaded 2011-03-17
|
||||
350 loaded 2011-03-17
|
||||
351 loaded 2011-03-17
|
||||
352 loaded 2011-03-17
|
||||
353 loaded 2011-03-17
|
||||
354 loaded 2011-03-17
|
||||
355 loaded 2011-03-17
|
||||
356 loaded 2011-03-17
|
||||
357 loaded 2011-03-17
|
||||
358 loaded 2011-03-17
|
||||
359 loaded 2011-03-17
|
||||
360 loaded 2011-03-17
|
||||
361 loaded 2011-03-17
|
||||
362 loaded 2011-03-17
|
||||
363 loaded 2011-03-17
|
||||
364 loaded 2011-03-17
|
||||
365 loaded 2011-03-17
|
||||
366 loaded 2011-03-17
|
||||
367 loaded 2011-03-17
|
||||
368 loaded 2011-03-17
|
||||
369 loaded 2011-03-17
|
||||
370 loaded 2011-03-17
|
||||
371 loaded 2011-03-17
|
||||
372 loaded 2011-03-17
|
||||
373 loaded 2011-03-17
|
||||
374 loaded 2011-03-17
|
||||
375 loaded 2011-03-17
|
||||
376 loaded 2011-03-17
|
||||
377 loaded 2011-03-17
|
||||
378 loaded 2011-03-17
|
||||
379 loaded 2011-03-17
|
||||
380 loaded 2011-03-17
|
||||
381 loaded 2011-03-17
|
||||
382 loaded 2011-03-17
|
||||
383 loaded 2011-03-17
|
||||
384 loaded 2011-03-17
|
||||
385 loaded 2011-03-17
|
||||
386 loaded 2011-03-17
|
||||
387 loaded 2011-03-17
|
||||
388 loaded 2011-03-17
|
||||
389 loaded 2011-03-17
|
||||
390 loaded 2011-03-17
|
||||
391 loaded 2011-03-17
|
||||
392 loaded 2011-03-17
|
||||
393 loaded 2011-03-17
|
||||
394 loaded 2011-03-17
|
||||
395 loaded 2011-03-17
|
||||
396 loaded 2011-03-17
|
||||
397 loaded 2011-03-17
|
||||
398 loaded 2011-03-17
|
||||
399 loaded 2011-03-17
|
||||
400 loaded 2011-03-17
|
||||
401 loaded 2011-03-17
|
||||
402 loaded 2011-03-17
|
||||
403 loaded 2011-03-17
|
||||
404 loaded 2011-03-17
|
||||
405 loaded 2011-03-17
|
||||
406 loaded 2011-03-17
|
||||
407 loaded 2011-03-17
|
||||
408 loaded 2011-03-17
|
||||
409 loaded 2011-03-17
|
||||
410 loaded 2011-03-17
|
||||
411 loaded 2011-03-17
|
||||
412 loaded 2011-03-17
|
||||
413 loaded 2011-03-17
|
||||
414 loaded 2011-03-17
|
||||
415 loaded 2011-03-17
|
||||
416 loaded 2011-03-17
|
||||
417 loaded 2011-03-17
|
||||
418 loaded 2011-03-17
|
||||
419 loaded 2011-03-17
|
||||
420 loaded 2011-03-17
|
||||
421 loaded 2011-03-17
|
||||
422 loaded 2011-03-17
|
||||
423 loaded 2011-03-17
|
||||
424 loaded 2011-03-17
|
||||
425 loaded 2011-03-17
|
||||
426 loaded 2011-03-17
|
||||
427 loaded 2011-03-17
|
||||
428 loaded 2011-03-17
|
||||
429 loaded 2011-03-17
|
||||
430 loaded 2011-03-17
|
||||
431 loaded 2011-03-17
|
||||
432 loaded 2011-03-17
|
||||
433 loaded 2011-03-17
|
||||
434 loaded 2011-03-17
|
||||
435 loaded 2011-03-17
|
||||
436 loaded 2011-03-17
|
||||
437 loaded 2011-03-17
|
||||
438 loaded 2011-03-17
|
||||
439 loaded 2011-03-17
|
||||
440 loaded 2011-03-17
|
||||
441 loaded 2011-03-17
|
||||
442 loaded 2011-03-17
|
||||
443 loaded 2011-03-17
|
||||
444 loaded 2011-03-17
|
||||
445 loaded 2011-03-17
|
||||
446 loaded 2011-03-17
|
||||
447 loaded 2011-03-17
|
||||
448 loaded 2011-03-17
|
||||
449 loaded 2011-03-17
|
||||
450 loaded 2011-03-17
|
||||
451 loaded 2011-03-17
|
||||
452 loaded 2011-03-17
|
||||
453 loaded 2011-03-17
|
||||
454 loaded 2011-03-17
|
||||
455 loaded 2011-03-17
|
||||
456 loaded 2011-03-17
|
||||
457 loaded 2011-03-17
|
||||
458 loaded 2011-03-17
|
||||
459 loaded 2011-03-17
|
||||
460 loaded 2011-03-17
|
||||
461 loaded 2011-03-17
|
||||
462 loaded 2011-03-17
|
||||
463 loaded 2011-03-17
|
||||
464 loaded 2011-03-17
|
||||
465 loaded 2011-03-17
|
||||
466 loaded 2011-03-17
|
||||
467 loaded 2011-03-17
|
||||
468 loaded 2011-03-17
|
||||
469 loaded 2011-03-17
|
||||
470 loaded 2011-03-17
|
||||
471 loaded 2011-03-17
|
||||
472 loaded 2011-03-17
|
||||
473 loaded 2011-03-17
|
||||
474 loaded 2011-03-17
|
||||
475 loaded 2011-03-17
|
||||
476 loaded 2011-03-17
|
||||
477 loaded 2011-03-17
|
||||
478 loaded 2011-03-17
|
||||
479 loaded 2011-03-17
|
||||
480 loaded 2011-03-17
|
||||
481 loaded 2011-03-17
|
||||
482 loaded 2011-03-17
|
||||
483 loaded 2011-03-17
|
||||
484 loaded 2011-03-17
|
||||
485 loaded 2011-03-17
|
||||
486 loaded 2011-03-17
|
||||
487 loaded 2011-03-17
|
||||
488 loaded 2011-03-17
|
||||
489 loaded 2011-03-17
|
||||
490 loaded 2011-03-17
|
||||
491 loaded 2011-03-17
|
||||
492 loaded 2011-03-17
|
||||
493 loaded 2011-03-17
|
||||
494 loaded 2011-03-17
|
||||
495 loaded 2011-03-17
|
||||
496 loaded 2011-03-17
|
||||
497 loaded 2011-03-17
|
||||
498 loaded 2011-03-17
|
||||
499 loaded 2011-03-17
|
||||
500 loaded 2011-03-17
|
||||
31
t/pt-online-schema-change/samples/fk_tables_schema.sql
Normal file
31
t/pt-online-schema-change/samples/fk_tables_schema.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
DROP DATABASE IF EXISTS `mkosc`;
|
||||
CREATE DATABASE `mkosc`;
|
||||
USE `mkosc`;
|
||||
|
||||
CREATE TABLE `country` (
|
||||
`country_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`country` varchar(50) NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`country_id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `city` (
|
||||
`city_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`city` varchar(50) NOT NULL,
|
||||
`country_id` smallint(5) unsigned NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`city_id`),
|
||||
KEY `idx_fk_country_id` (`country_id`),
|
||||
CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `address` (
|
||||
`address_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`address` varchar(50) NOT NULL,
|
||||
`city_id` smallint(5) unsigned NOT NULL,
|
||||
`postal_code` varchar(10) DEFAULT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`address_id`),
|
||||
KEY `idx_fk_city_id` (`city_id`),
|
||||
CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
73
t/pt-online-schema-change/samples/query_table.pl
Executable file
73
t/pt-online-schema-change/samples/query_table.pl
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use DBI;
|
||||
use Time::HiRes qw(usleep);
|
||||
|
||||
my ($host, $port, $db, $tbl, $pkcol, $sleep_time) = @ARGV;
|
||||
my $dbh = DBI->connect(
|
||||
"DBI:mysql:$db;host=$host;port=$port;mysql_read_default_group=client",
|
||||
'msandbox', 'msandbox',
|
||||
{RaiseError => 1, AutoCommit => 0, ShowErrorStatement => 1, PrintError => 0},
|
||||
);
|
||||
|
||||
my $sleep = ($sleep_time || 0.001) * 1_000_000;
|
||||
my $cnt = 0;
|
||||
my @del;
|
||||
my @upd;
|
||||
my @ins;
|
||||
|
||||
my $start_xa = "START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */";
|
||||
$dbh->do($start_xa);
|
||||
|
||||
for my $i ( 1..5_000 ) {
|
||||
last if -f '/tmp/query_table.stop';
|
||||
|
||||
eval {
|
||||
# We do roughly 25% DELETE, 25% UPDATE and 50% INSERT.
|
||||
my $x = int(rand(5));
|
||||
if ($x == 1) {
|
||||
my $id = int(rand(500)) || 1;
|
||||
$dbh->do("delete from $db.$tbl where $pkcol=$id");
|
||||
# To challenge the tool, we *do* (or can) delete the same id twice.
|
||||
# But to keep the numbers straight, we only record each deleted
|
||||
# id once.
|
||||
push @del, $id unless grep { $_ == $id } @del;
|
||||
}
|
||||
elsif ($x == 2) {
|
||||
my $id = int(rand(500)) || 1;
|
||||
if ( !grep { $_ == $id } @del ) {
|
||||
$dbh->do("update $db.$tbl set c='updated' where $pkcol=$id");
|
||||
push @upd, $id;
|
||||
}
|
||||
}
|
||||
else {
|
||||
my $id = 500 + $i;
|
||||
$dbh->do("insert ignore into $db.$tbl ($pkcol, c) values ($id, 'inserted')");
|
||||
push @ins, $id;
|
||||
}
|
||||
|
||||
# COMMIT every N statements
|
||||
if ( $cnt++ > 5 ) {
|
||||
$dbh->do('COMMIT');
|
||||
$cnt = 0;
|
||||
usleep($sleep);
|
||||
$dbh->do($start_xa);
|
||||
}
|
||||
};
|
||||
if ( $EVAL_ERROR ) {
|
||||
warn $EVAL_ERROR;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$dbh->do('COMMIT');
|
||||
$dbh->disconnect();
|
||||
|
||||
print "deleted:" . join(',', @del) . "\n";
|
||||
print "updated:" . join(',', @upd) . "\n";
|
||||
print "inserted:" . join(',', @ins) . "\n";
|
||||
|
||||
exit 0;
|
||||
27
t/pt-online-schema-change/samples/small_table.sql
Normal file
27
t/pt-online-schema-change/samples/small_table.sql
Normal file
@@ -0,0 +1,27 @@
|
||||
DROP DATABASE IF EXISTS `mkosc`;
|
||||
CREATE DATABASE `mkosc`;
|
||||
USE `mkosc`;
|
||||
CREATE TABLE a (
|
||||
i int auto_increment primary key,
|
||||
c char(16),
|
||||
d date
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO a VALUES
|
||||
(null, 'a', now()),
|
||||
(null, 'b', now()),
|
||||
(null, 'c', now()),
|
||||
(null, 'd', now()),
|
||||
(null, 'e', now()),
|
||||
(null, 'f', now()),
|
||||
(null, 'g', now()),
|
||||
(null, 'h', now()),
|
||||
(null, 'i', now()),
|
||||
(null, 'j', now()),
|
||||
(null, 'k', now()),
|
||||
(null, 'l', now()),
|
||||
(null, 'm', now()),
|
||||
(null, 'n', now()),
|
||||
(null, 'o', now()),
|
||||
(null, 'p', now()),
|
||||
(null, 'q', now()),
|
||||
(null, 'r', now());
|
||||
Reference in New Issue
Block a user