mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-11 21:51:21 +00:00
WIP
This commit is contained in:
@@ -2546,7 +2546,6 @@ sub get_dbh {
|
||||
|
||||
if ( $cxn_string =~ m/mysql/i ) {
|
||||
my $sql;
|
||||
|
||||
if ( my ($charset) = $cxn_string =~ m/charset=([\w]+)/ ) {
|
||||
$sql = qq{/*!40101 SET NAMES "$charset"*/};
|
||||
PTDEBUG && _d($dbh, $sql);
|
||||
@@ -5932,6 +5931,7 @@ sub _d {
|
||||
# ###########################################################################
|
||||
package pt_archiver;
|
||||
|
||||
use utf8;
|
||||
use English qw(-no_match_vars);
|
||||
use List::Util qw(max);
|
||||
use IO::File;
|
||||
@@ -6030,6 +6030,7 @@ sub main {
|
||||
$archive_file =~ s/%([dHimsYDt])/$fmt{$1}/g;
|
||||
}
|
||||
|
||||
|
||||
if ( !$o->got('help') ) {
|
||||
$o->save_error("--source DSN requires a 't' (table) part")
|
||||
unless $src->{t};
|
||||
@@ -6129,6 +6130,14 @@ sub main {
|
||||
$dbh->do("SET SQL_LOG_BIN=0");
|
||||
}
|
||||
|
||||
my ($dbh_version) = $dbh->selectrow_array("SELECT version()");
|
||||
#if ($dbh_version =~ m/^(\d+\.\d+)\.\d+.*/ && $1 ge '8.0' && !$o->get('charset')) {
|
||||
if ($dbh_version =~ m/^(\d+\.\d+)\.\d+.*/ && $1 ge '8.0') {
|
||||
PTDEBUG && _d("MySQL 8.0+ detected and charset was not specified.\n Setting character_set_client = utf8mb4 and --charset=utf8");
|
||||
$dbh->do('/*!40101 SET character_set_connection = utf8mb4 */;');
|
||||
$o->set('charset', 'utf8');
|
||||
}
|
||||
|
||||
$table->{dbh} = $dbh;
|
||||
$table->{irot} = get_irot($dbh);
|
||||
|
||||
@@ -6166,7 +6175,10 @@ sub main {
|
||||
my $sql = 'SELECT CONCAT(/*!40100 @@session.character_set_connection, */ "")';
|
||||
PTDEBUG && _d($sql);
|
||||
my ($dbh_charset) = $table->{dbh}->selectrow_array($sql);
|
||||
if ( ($dbh_charset || "") ne ($table->{info}->{charset} || "") ) {
|
||||
|
||||
if ( ($dbh_charset || "") ne ($table->{info}->{charset} || "") &&
|
||||
!($dbh_charset eq "utf8mb4" && ($table->{info}->{charset} || "") eq ("utf8"))
|
||||
) {
|
||||
$src->{dbh}->disconnect() if $src && $src->{dbh};
|
||||
$dst->{dbh}->disconnect() if $dst && $dst->{dbh};
|
||||
die "Character set mismatch: "
|
||||
|
@@ -4671,6 +4671,8 @@ type: size; group: Tests
|
||||
Table data uses n bytes of space. This tests the Data_length column.
|
||||
The specified size can be "NULL" to test where Data_length IS NULL.
|
||||
|
||||
Note: Starting from MySQL 8.0, empty tables return 0 instead of NULL.
|
||||
|
||||
=item --dblike
|
||||
|
||||
type: string; group: Tests
|
||||
|
@@ -542,8 +542,11 @@ sub no_diff {
|
||||
$expected_output = "/tmp/pt-test-outfile-trf";
|
||||
}
|
||||
|
||||
print("====================================================================================================");
|
||||
warn("TEST >>>>>>>>>>>>");
|
||||
# Determine cmd type and run it.
|
||||
if ( ref $cmd eq 'CODE' ) {
|
||||
diag("CODE >>>>>>>>>>>>>>>>");
|
||||
output($cmd, file => $tmp_file);
|
||||
}
|
||||
elsif ( $args{cmd_output} ) {
|
||||
|
@@ -77,6 +77,7 @@ eval {
|
||||
chomp(my $v = `$trunk/sandbox/test-env version 2>/dev/null`);
|
||||
$sandbox_version = $v if $v;
|
||||
};
|
||||
our $number=0;
|
||||
|
||||
our $can_load_data = can_load_data();
|
||||
|
||||
@@ -576,7 +577,7 @@ sub no_diff {
|
||||
`cat $expected_output | sed $sed_args > /tmp/pt-test-outfile-trf`;
|
||||
$expected_output = "/tmp/pt-test-outfile-trf";
|
||||
}
|
||||
|
||||
$number++;
|
||||
# Determine cmd type and run it.
|
||||
if ( ref $cmd eq 'CODE' ) {
|
||||
output($cmd, file => $tmp_file);
|
||||
|
@@ -59,8 +59,6 @@ else
|
||||
fi
|
||||
cd $PWD
|
||||
|
||||
sleep 5
|
||||
|
||||
# Wait for MySQL to actually be up, i.e. to respond to queries.
|
||||
for i in $(_seq 60); do
|
||||
if sandbox_is_alive; then
|
||||
|
@@ -138,21 +138,8 @@ make_sandbox() {
|
||||
fi
|
||||
fi
|
||||
|
||||
#if [ ! -e $PERCONA_TOOLKIT_BRANCH/sandbox/servers/${APP#mysql}/$version/data.tar.gz ]; then
|
||||
# if [ "$version" > "5.6" ]; then
|
||||
# rm -f /tmp/empty-defaults.txt
|
||||
# touch /tmp/empty-defaults.txt
|
||||
# rm -rf /tmp/$port/data
|
||||
# $PERCONA_TOOLKIT_SANDBOX/$mysqld --defaults-file=/tmp/${port}/my.sandbox.cnf --initialize
|
||||
# else
|
||||
# # MySQL up to 5.6 needs mysql_install_db
|
||||
# # Support for it is a TODO
|
||||
# echo "For MySQL < 5.7 data.tar.gz is required to be in $PERCONA_TOOLKIT_BRANCH/sandbox/servers/${APP#mysql}/$version/"
|
||||
# exit 1
|
||||
# fi
|
||||
#fi
|
||||
|
||||
if [ $generating_database -eq 1 ]; then
|
||||
echo "Creating default databases ..."
|
||||
if [ "$version" > "5.6" ]; then
|
||||
rm -f /tmp/empty-defaults.txt
|
||||
touch /tmp/empty-defaults.txt
|
||||
@@ -171,8 +158,14 @@ make_sandbox() {
|
||||
$PERCONA_TOOLKIT_BRANCH/util/version_cmp $minor_version 5.7.5
|
||||
if [ $? -eq 2 ]; then
|
||||
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'msandbox';" > $init_file
|
||||
echo "GRANT ALL PRIVILEGES ON *.* TO 'msandbox'@'127.0.0.1' IDENTIFIED BY 'msandbox';" >> $init_file
|
||||
echo "GRANT ALL PRIVILEGES ON *.* TO 'msandbox'@'localhost' IDENTIFIED BY 'msandbox';" >> $init_file
|
||||
echo "CREATE USER IF NOT EXISTS 'msandbox'@'%';" > $init_file
|
||||
echo "ALTER USER 'msandbox'@'%' IDENTIFIED BY 'msandbox' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;" >> $init_file
|
||||
echo "GRANT ALL PRIVILEGES ON *.* TO 'msandbox'@'%';" >> $init_file
|
||||
echo "-- Grants for 'root'@'localhost'" >> $init_file
|
||||
echo "CREATE USER IF NOT EXISTS 'root'@'localhost';" >> $init_file
|
||||
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'msandbox' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;" >> $init_file
|
||||
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> $init_file
|
||||
echo "GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;" >> $init_file
|
||||
echo "FLUSH PRIVILEGES;" >> $init_file
|
||||
else
|
||||
echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('msandbox');" > $init_file
|
||||
|
@@ -824,7 +824,13 @@ SKIP: {
|
||||
$config->mysql_version(),
|
||||
qr/5\.\d+\.\d+/,
|
||||
"MySQL version from dbh"
|
||||
);
|
||||
) if ($sandbox_version lt '8.0');
|
||||
|
||||
like(
|
||||
$config->mysql_version(),
|
||||
qr/8\.\d+\.\d+/,
|
||||
"MySQL version from dbh"
|
||||
) if ($sandbox_version ge '8.0');
|
||||
}
|
||||
|
||||
$config = new MySQLConfig(
|
||||
|
@@ -1142,6 +1142,7 @@ SKIP: {
|
||||
: $sandbox_version ge '5.1' ? "t/lib/samples/QueryReportFormatter/report025.txt"
|
||||
: "t/lib/samples/QueryReportFormatter/report026.txt");
|
||||
|
||||
# 30
|
||||
is(
|
||||
$qrf->explain_report("select * from qrf.t where i=2", 'qrf'),
|
||||
$explain,
|
||||
|
@@ -98,6 +98,9 @@ sub test_so {
|
||||
|
||||
if ( $result_file ) {
|
||||
my $transform = sub { print sort_query_output(slurp_file(shift)) };
|
||||
if ($sandbox_version gt '5.7') {
|
||||
$transform = sub { print sort_query_output(fix_auto_increment(slurp_file(shift))) };
|
||||
}
|
||||
ok(
|
||||
no_diff(
|
||||
$res,
|
||||
@@ -149,6 +152,15 @@ sub sort_query_output {
|
||||
return $sorted;
|
||||
}
|
||||
|
||||
# Starting with MySQL 8, AUTO_INCREMENT value is maintained between sessions.
|
||||
# Since we cannot predict the value of the test environment for each table and since its value
|
||||
# is not important for these tests, we just replace it by 0
|
||||
sub fix_auto_increment {
|
||||
my $in = shift;
|
||||
$in =~ s/AUTO_INCREMENT=\d+/AUTO_INCREMENT=0/g;
|
||||
return $in;
|
||||
}
|
||||
|
||||
SKIP: {
|
||||
skip "Cannot connect to sandbox master", 22 unless $dbh;
|
||||
$sb->wipe_clean($dbh);
|
||||
@@ -156,7 +168,6 @@ SKIP: {
|
||||
# ########################################################################
|
||||
# Test simple, unfiltered get_db_itr().
|
||||
# ########################################################################
|
||||
warn "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM";
|
||||
test_so(
|
||||
result => "$out/all-dbs-tbls-$sandbox_version.txt",
|
||||
test_name => "Iterate all schema objects with dbh",
|
||||
@@ -456,23 +467,24 @@ test_so(
|
||||
test_name => "Bug 911385: ...and continues to the next table"
|
||||
);
|
||||
|
||||
warn ">>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
# #############################################################################
|
||||
# Bug 1047335: pt-duplicate-key-checker fails when it encounters a crashed table
|
||||
# https://bugs.launchpad.net/percona-toolkit/+bug/1047335
|
||||
# #############################################################################
|
||||
|
||||
my $master3_port = 2900;
|
||||
my $master_basedir = "/tmp/$master3_port";
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
diag(`$trunk/sandbox/start-sandbox master $master3_port >/dev/null`);
|
||||
my $dbh3 = $sb->get_dbh_for("master3");
|
||||
|
||||
warn "A >>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
SKIP: {
|
||||
skip "No /dev/urandom, can't corrupt the database", 1
|
||||
skip "No /dev/urandom, can't corrupt the database", 2
|
||||
unless -e q{/dev/urandom};
|
||||
|
||||
skip "Cannot test on MySQL > 5.7 since there are no .frm files", 2 if $sandbox_version gt '5.7';
|
||||
|
||||
my $master3_port = 2900;
|
||||
my $master_basedir = "/tmp/$master3_port";
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
diag(`$trunk/sandbox/start-sandbox master $master3_port >/dev/null`);
|
||||
my $dbh3 = $sb->get_dbh_for("master3");
|
||||
|
||||
$sb->load_file('master3', "t/lib/samples/bug_1047335_crashed_table.sql");
|
||||
|
||||
# Create the SI object before crashing the table
|
||||
@@ -496,21 +508,17 @@ SKIP: {
|
||||
# Truncate the .myi file to corrupt it
|
||||
truncate($myi, 4096);
|
||||
|
||||
warn "B >>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
use File::Slurp qw( write_file );
|
||||
|
||||
# Corrupt the .frm file
|
||||
open my $urand_fh, q{<}, "/dev/urandom"
|
||||
or die "Cannot open /dev/urandom";
|
||||
warn "B1>>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
write_file($frm, scalar(<$urand_fh>), slurp_file($frm), scalar(<$urand_fh>));
|
||||
close $urand_fh;
|
||||
|
||||
warn "B2>>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
eval { $dbh3->do("SELECT etc FROM bug_1047335.crashed_table WHERE etc LIKE '10001' ORDER BY id ASC LIMIT 1") };
|
||||
|
||||
warn "C >>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
my $w = '';
|
||||
{
|
||||
local $SIG{__WARN__} = sub { $w .= shift };
|
||||
@@ -522,21 +530,19 @@ SKIP: {
|
||||
qr/bug_1047335.crashed_table because SHOW CREATE TABLE failed:/,
|
||||
"->next() gives a warning if ->get_create_table dies from a strange error",
|
||||
);
|
||||
warn "D >>>>>>>>>>>>>>>>>>>>>>>>>>>";
|
||||
|
||||
}
|
||||
|
||||
$dbh3->do(q{DROP DATABASE IF EXISTS bug_1047335_2});
|
||||
$dbh3->do(q{CREATE DATABASE bug_1047335_2});
|
||||
$dbh3->do(q{DROP DATABASE IF EXISTS bug_1047335_2});
|
||||
$dbh3->do(q{CREATE DATABASE bug_1047335_2});
|
||||
|
||||
my $broken_frm = "$trunk/t/lib/samples/broken_tbl.frm";
|
||||
my $db_dir_2 = "$master_basedir/data/bug_1047335_2";
|
||||
my $broken_frm = "$trunk/t/lib/samples/broken_tbl.frm";
|
||||
my $db_dir_2 = "$master_basedir/data/bug_1047335_2";
|
||||
|
||||
diag(`cp $broken_frm $db_dir_2 2>&1`);
|
||||
diag(`cp $broken_frm $db_dir_2 2>&1`);
|
||||
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
|
||||
my $tmp_si2 = new SchemaIterator(
|
||||
my $tmp_si2 = new SchemaIterator(
|
||||
dbh => $dbh3,
|
||||
OptionParser => $o,
|
||||
Quoter => $q,
|
||||
@@ -546,25 +552,26 @@ my $tmp_si2 = new SchemaIterator(
|
||||
db => 'bug_1047335_2',
|
||||
);
|
||||
|
||||
my $w = '';
|
||||
{
|
||||
$w = '';
|
||||
{
|
||||
local $SIG{__WARN__} = sub { $w .= shift };
|
||||
1 while $tmp_si2->next();
|
||||
}
|
||||
}
|
||||
|
||||
like(
|
||||
like(
|
||||
$w,
|
||||
qr/\QSkipping bug_1047335_2.broken_tbl because SHOW CREATE TABLE failed:/,
|
||||
"...same as above, but using t/lib/samples/broken_tbl.frm",
|
||||
);
|
||||
);
|
||||
|
||||
# This might fail. Doesn't matter -- stop_sandbox will just rm -rf the folder
|
||||
eval {
|
||||
# This might fail. Doesn't matter -- stop_sandbox will just rm -rf the folder
|
||||
eval {
|
||||
$dbh3->do("DROP DATABASE IF EXISTS bug_1047335");
|
||||
$dbh3->do("DROP DATABASE IF EXISTS bug_1047335_2");
|
||||
};
|
||||
};
|
||||
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
}
|
||||
|
||||
# #############################################################################
|
||||
# Bug 1136559: Deep recursion on subroutine "SchemaIterator::_iterate_dbh"
|
||||
|
@@ -1039,20 +1039,21 @@ is_deeply(
|
||||
# https://bugs.launchpad.net/percona-toolkit/+bug/1047335
|
||||
# #############################################################################
|
||||
|
||||
# We need to create a new server here, otherwise the whole test suite might die
|
||||
# if the crashed table can't be dropped.
|
||||
|
||||
my $master3_port = 2900;
|
||||
my $master_basedir = "/tmp/$master3_port";
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
diag(`$trunk/sandbox/start-sandbox master $master3_port >/dev/null`);
|
||||
my $dbh3 = $sb->get_dbh_for("master3");
|
||||
|
||||
$sb->load_file('master3', "t/lib/samples/bug_1047335_crashed_table.sql");
|
||||
|
||||
SKIP: {
|
||||
skip "No /dev/urandom, can't corrupt the database", 1
|
||||
unless -e q{/dev/urandom};
|
||||
skip "No /dev/urandom, can't corrupt the database", 2 unless -e q{/dev/urandom};
|
||||
skip "Cannot corrupt a table in MySQL 8", 2 if ($sandbox_version gt '5.7');
|
||||
|
||||
# We need to create a new server here, otherwise the whole test suite might die
|
||||
# if the crashed table can't be dropped.
|
||||
|
||||
my $master3_port = 2900;
|
||||
my $master_basedir = "/tmp/$master3_port";
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
diag(`$trunk/sandbox/start-sandbox master $master3_port >/dev/null`);
|
||||
my $dbh3 = $sb->get_dbh_for("master3");
|
||||
|
||||
$sb->load_file('master3', "t/lib/samples/bug_1047335_crashed_table.sql");
|
||||
|
||||
my $db_dir = "$master_basedir/data/bug_1047335";
|
||||
my $myi = glob("$db_dir/crashed_table.[Mm][Yy][Iy]");
|
||||
@@ -1086,25 +1087,25 @@ SKIP: {
|
||||
# This might fail. Doesn't matter -- stop_sandbox will just rm -rf the folder
|
||||
eval { $dbh3->do("DROP DATABASE IF EXISTS bug_1047335") };
|
||||
|
||||
}
|
||||
|
||||
$dbh3->do(q{DROP DATABASE IF EXISTS bug_1047335_2});
|
||||
$dbh3->do(q{CREATE DATABASE bug_1047335_2});
|
||||
$dbh3->do(q{DROP DATABASE IF EXISTS bug_1047335_2});
|
||||
$dbh3->do(q{CREATE DATABASE bug_1047335_2});
|
||||
|
||||
my $broken_frm = "$trunk/t/lib/samples/broken_tbl.frm";
|
||||
my $db_dir_2 = "$master_basedir/data/bug_1047335_2";
|
||||
my $broken_frm = "$trunk/t/lib/samples/broken_tbl.frm";
|
||||
my $db_dir_2 = "$master_basedir/data/bug_1047335_2";
|
||||
|
||||
diag(`cp $broken_frm $db_dir_2 2>&1`);
|
||||
diag(`cp $broken_frm $db_dir_2 2>&1`);
|
||||
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
|
||||
eval { $tp->get_create_table($dbh3, 'bug_1047335_2', 'broken_tbl') };
|
||||
ok(
|
||||
eval { $tp->get_create_table($dbh3, 'bug_1047335_2', 'broken_tbl') };
|
||||
ok(
|
||||
$EVAL_ERROR,
|
||||
"get_create_table dies if SHOW CREATE TABLE failed (using broken_tbl.frm)",
|
||||
);
|
||||
);
|
||||
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
||||
}
|
||||
|
||||
# #############################################################################
|
||||
# pt-duplicate-key-checker doesn't support triple quote in column name
|
||||
|
@@ -135,7 +135,7 @@ CREATE TABLE `innodb_ddl_log` (
|
||||
`new_file_path` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `thread_id` (`thread_id`)
|
||||
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB AUTO_INCREMENT=96 DEFAULT CHARSET=utf8mb4 STATS_PERSISTENT=0
|
||||
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB AUTO_INCREMENT=280 DEFAULT CHARSET=utf8mb4 STATS_PERSISTENT=0
|
||||
|
||||
mysql.innodb_dynamic_metadata
|
||||
CREATE TABLE `innodb_dynamic_metadata` (
|
||||
|
54
t/lib/samples/SchemaIterator/mysql-user-ddl-8.0.txt
Normal file
54
t/lib/samples/SchemaIterator/mysql-user-ddl-8.0.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
mysql.user
|
||||
CREATE TABLE `user` (
|
||||
`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 NOT NULL DEFAULT 'N',
|
||||
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||
`ssl_cipher` blob NOT NULL,
|
||||
`x509_issuer` blob NOT NULL,
|
||||
`x509_subject` blob NOT NULL,
|
||||
`max_questions` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`max_updates` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`max_connections` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`plugin` char(64) COLLATE utf8_bin NOT NULL DEFAULT 'mysql_native_password',
|
||||
`authentication_string` text COLLATE utf8_bin,
|
||||
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`password_last_changed` timestamp NULL DEFAULT NULL,
|
||||
`password_lifetime` smallint(5) unsigned DEFAULT NULL,
|
||||
`account_locked` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Create_role_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Drop_role_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
|
||||
`Password_reuse_history` smallint(5) unsigned DEFAULT NULL,
|
||||
`Password_reuse_time` smallint(5) unsigned DEFAULT NULL,
|
||||
PRIMARY KEY (`Host`,`User`)
|
||||
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Users and global privileges'
|
||||
|
@@ -43,7 +43,10 @@ is_deeply(
|
||||
"Inserted UTF8 data"
|
||||
);
|
||||
|
||||
throws_ok(
|
||||
SKIP: {
|
||||
skip "MySQL 8.0+ uses UTF8 as default", 1 if ($sandbox_version gt '5.7');
|
||||
|
||||
throws_ok(
|
||||
sub { pt_archiver::main(
|
||||
'--source', 'h=127.1,P=12345,D=issue_1225,t=t,u=msandbox,p=msandbox',
|
||||
'--dest', 't=a',
|
||||
@@ -51,8 +54,9 @@ throws_ok(
|
||||
},
|
||||
qr/Character set mismatch/,
|
||||
"--check-charset"
|
||||
);
|
||||
);
|
||||
|
||||
}
|
||||
$output = output(
|
||||
sub { pt_archiver::main(
|
||||
'--source', 'h=127.1,P=12345,D=issue_1225,t=t,u=msandbox,p=msandbox',
|
||||
|
@@ -13,7 +13,7 @@ CREATE TABLE test.`stats_r` (
|
||||
`min` float DEFAULT NULL,
|
||||
PRIMARY KEY (`id`,`start`,`end`,`user_id`(13),`interval`),
|
||||
KEY `cid_start_end` (`user_id`(13),`start`,`end`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
CREATE TABLE test.stats_s LIKE test.stats_r;
|
||||
|
||||
|
@@ -27,7 +27,7 @@ CREATE TABLE `comp` (
|
||||
`name` varchar(255) default NULL,
|
||||
`otherinfo` varchar(255) default NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
|
||||
--
|
||||
@@ -54,7 +54,7 @@ CREATE TABLE `prod` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `prod_comp_id` (`comp_id`),
|
||||
CONSTRAINT `prod_comp_id` FOREIGN KEY (`comp_id`) REFERENCES `comp` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
|
||||
--
|
||||
@@ -81,7 +81,7 @@ CREATE TABLE `prod_details` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `prod_det_prod_id` (`prod_id`),
|
||||
CONSTRAINT `prod_det_prod_id` FOREIGN KEY (`prod_id`) REFERENCES `prod` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
|
||||
--
|
||||
@@ -111,7 +111,7 @@ CREATE TABLE `user` (
|
||||
KEY `user_prod_id` (`prod_id`),
|
||||
CONSTRAINT `user_comp_id` FOREIGN KEY (`comp_id`) REFERENCES `comp` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
|
||||
CONSTRAINT `user_prod_id` FOREIGN KEY (`prod_id`) REFERENCES `prod` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=5;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
|
||||
--
|
||||
|
@@ -1,3 +1,5 @@
|
||||
DROP DATABASE IF EXISTS test;
|
||||
CREATE DATABASE test;
|
||||
use test;
|
||||
|
||||
drop table if exists table_1;
|
||||
|
@@ -184,21 +184,24 @@ SKIP: {
|
||||
"--trigger that doesn't match with non-matching --trigger-table"
|
||||
);
|
||||
|
||||
SKIP: {
|
||||
skip "MySQL 8.0+ returns 0, not NULL", 1 if ($sandbox_version gt '5.7');
|
||||
# Test NULL sizes.
|
||||
$output = `$cmd sakila --datasize NULL`,
|
||||
is(
|
||||
$output,
|
||||
"`sakila`.`actor_info`
|
||||
`sakila`.`customer_list`
|
||||
`sakila`.`film_list`
|
||||
`sakila`.`nicer_but_slower_film_list`
|
||||
`sakila`.`sales_by_film_category`
|
||||
`sakila`.`sales_by_store`
|
||||
`sakila`.`staff_list`
|
||||
",
|
||||
"`sakila`.`actor_info`
|
||||
`sakila`.`customer_list`
|
||||
`sakila`.`film_list`
|
||||
`sakila`.`nicer_but_slower_film_list`
|
||||
`sakila`.`sales_by_film_category`
|
||||
`sakila`.`sales_by_store`
|
||||
`sakila`.`staff_list`
|
||||
",
|
||||
'--datasize NULL',
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
$sb->load_file('master', "t/pt-find/samples/pseudo-sakila.sql");
|
||||
|
||||
|
@@ -284,6 +284,9 @@ my $b = $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
$output = `perl $b/bin/pt-heartbeat -D test --interval 0.8 --update --replace --run-time 1 u=bob,F=/tmp/12346/my.sandbox.cnf 2>&1`;
|
||||
|
||||
|
||||
diag(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
|
||||
diag($output);
|
||||
diag("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
|
||||
like(
|
||||
$output,
|
||||
qr/--read-only/,
|
||||
@@ -313,8 +316,8 @@ diag(`/tmp/12345/use -u root -e "DROP DATABASE test"`);
|
||||
# Done.
|
||||
# #############################################################################
|
||||
diag(`rm $pid_file $sent_file 2>/dev/null`);
|
||||
$sb->wipe_clean($master_dbh);
|
||||
$sb->wipe_clean($slave1_dbh);
|
||||
# $sb->wipe_clean($master_dbh);
|
||||
# $sb->wipe_clean($slave1_dbh);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
|
||||
done_testing;
|
||||
|
Reference in New Issue
Block a user