Files
percona-toolkit/util/checksum-test-dataset
Carlos Salguero 4b563ef714 WIP
2018-01-09 16:19:05 -03:00

71 lines
3.0 KiB
Perl
Executable File

#!/usr/bin/env perl
# This program is copyright 2009-2011 Percona Inc.
# Feedback and improvements are welcome.
#
# THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, version 2; OR the Perl Artistic License. On UNIX and similar
# systems, you can issue `man perlgpl' or `man perlartistic' to read these
# licenses.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA.
# This program is intended to be run after loading Sakila into our test
# database, when starting the "sandbox" MySQL instances. It will store the
# checksums of all of the mysql and sakila tables into a magical
# percona_test.checksums table on instance 12345. Afterwards, one can verify the
# integrity of all of these tables by running
# lib/Sandbox.pm::verify_test_data_integrity() which will checksum the master
# and all of the slaves, and make sure all are OK.
use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use DBI;
my $dbh = DBI->connect(
'DBI:mysql:;host=127.0.0.1;port=12345;', 'msandbox', 'msandbox',
{
AutoCommit => 0,
RaiseError => 1,
PrintError => 0,
ShowErrorStatement => 0,
});
# pt-online-schema-change changes sakila tables, causing MySQL to rebuild
# the procs and update the ts. Tests must exec this statement again else
# Sandbox::ok() will throw "ERROR: Tables are different on master: mysql.proc"
eval {
$dbh->do("UPDATE mysql.proc SET created='2012-06-05 00:00:00', modified='2012-06-05 00:00:00'");
};
my @tables_in_mysql = grep { !/^(?:innodb|slave)_/ }
grep { !/_log$/ }
@{$dbh->selectcol_arrayref('SHOW TABLES FROM mysql')};
my @tables_in_sakila = qw( actor address category city country customer
film film_actor film_category film_text inventory
language payment rental staff store );
$dbh->do("CREATE DATABASE IF NOT EXISTS percona_test");
$dbh->do("DROP TABLE IF EXISTS percona_test.checksums");
$dbh->do("CREATE TABLE percona_test.checksums(
db_tbl varchar(128) not null primary key,
checksum int unsigned not null)");
my $sql = "CHECKSUM TABLES "
. join(", ", map { "mysql.$_" } @tables_in_mysql)
. ", "
. join(", ", map { "sakila.$_" } @tables_in_sakila);
my @checksums = @{$dbh->selectall_arrayref($sql, {Slice => {} })};
foreach my $c ( @checksums ) {
next unless $c->{Checksum};
$dbh->do("INSERT INTO percona_test.checksums(db_tbl, checksum)
VALUES('$c->{Table}', $c->{Checksum})");
}
$dbh->commit;