mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-26 23:45:44 +00:00
WIP
This commit is contained in:
@@ -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",
|
||||
@@ -166,61 +177,61 @@ SKIP: {
|
||||
# Test filters.
|
||||
# ########################################################################
|
||||
$sb->load_file('master', "t/lib/samples/SchemaIterator.sql");
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-d this_db_does_not_exist)],
|
||||
result => "",
|
||||
test_name => "No databases match",
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-t this_table_does_not_exist)],
|
||||
result => "",
|
||||
test_name => "No tables match",
|
||||
);
|
||||
|
||||
|
||||
# Filter by --databases (-d).
|
||||
test_so(
|
||||
filters => [qw(--databases d1)],
|
||||
result => "d1.t1 d1.t2 d1.t3 ",
|
||||
test_name => '--databases',
|
||||
);
|
||||
|
||||
|
||||
# Filter by --databases (-d) and --tables (-t).
|
||||
test_so(
|
||||
filters => [qw(-d d1 -t t2)],
|
||||
result => "d1.t2 ",
|
||||
test_name => '--databases and --tables',
|
||||
);
|
||||
|
||||
|
||||
# Ignore some dbs and tbls.
|
||||
test_so(
|
||||
filters => ['--ignore-databases', 'mysql,sakila,d1,d3,percona_test,sys'],
|
||||
result => "d2.t1 ",
|
||||
test_name => '--ignore-databases',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => ['--ignore-databases', 'mysql,sakila,d2,d3,percona_test,sys',
|
||||
'--ignore-tables', 't1,t2'],
|
||||
result => "d1.t3 ",
|
||||
test_name => '--ignore-databases and --ignore-tables',
|
||||
);
|
||||
|
||||
|
||||
# Select some dbs but ignore some tables.
|
||||
test_so(
|
||||
filters => ['-d', 'd1', '--ignore-tables', 't1,t3'],
|
||||
result => "d1.t2 ",
|
||||
test_name => '--databases and --ignore-tables',
|
||||
);
|
||||
|
||||
|
||||
# Filter by engines. This also tests that --engines is case-insensitive
|
||||
test_so(
|
||||
filters => ['-d', 'd1,d2,d3', '--engines', 'INNODB'],
|
||||
result => ($sandbox_version ge '5.5' ? 'd1.t2 d2.t1 ' : "d1.t2 "),
|
||||
test_name => '--engines',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => ['-d', 'd1,d2,d3', '--ignore-engines', 'innodb,myisam'],
|
||||
result => "d1.t3 ",
|
||||
@@ -233,21 +244,21 @@ SKIP: {
|
||||
result => "d1.t1 d1.t2 ",
|
||||
test_name => '--databases-regex and --tables-regex',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => ['--ignore-databases-regex', '(?:^d[23]|mysql|info|sakila|percona_test|sys)',
|
||||
'--ignore-tables-regex', 't[^23]'],
|
||||
result => "d1.t2 d1.t3 ",
|
||||
test_name => '--ignore-databases-regex',
|
||||
);
|
||||
|
||||
|
||||
# ########################################################################
|
||||
# Filter views.
|
||||
# ########################################################################
|
||||
SKIP: {
|
||||
skip 'Sandbox master does not have the sakila database', 1
|
||||
unless @{$dbh->selectcol_arrayref("SHOW DATABASES LIKE 'sakila'")};
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-d sakila)],
|
||||
result => "", # hack; uses unlike instead
|
||||
@@ -262,37 +273,37 @@ SKIP: {
|
||||
test_name => "Iterator does not return views",
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
# ########################################################################
|
||||
# Issue 806: mk-table-sync --tables does not honor schema qualier
|
||||
# ########################################################################
|
||||
# Filter by db-qualified table. There is t1 in both d1 and d2.
|
||||
# We want only d1.t1.
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-t d1.t1)],
|
||||
result => "d1.t1 ",
|
||||
test_name => '-t d1.t1 (issue 806)',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-d d1 -t d1.t1)],
|
||||
result => "d1.t1 ",
|
||||
test_name => '-d d1 -t d1.t1 (issue 806)',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-d d2 -t d1.t1)],
|
||||
result => "",
|
||||
test_name => '-d d2 -t d1.t1 (issue 806)',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => ['-t','d1.t1,d1.t3'],
|
||||
result => "d1.t1 d1.t3 ",
|
||||
test_name => '-t d1.t1,d1.t3 (issue 806)',
|
||||
);
|
||||
|
||||
|
||||
my $want = $sandbox_version le '5.6' ? "d1.t2 d1.t3 d2.t1 " : 'd1.t2 d1.t3 d2.t1 sys.sys_config ';
|
||||
test_so(
|
||||
filters => ['--ignore-databases', 'mysql,sakila,percona_test',
|
||||
@@ -300,13 +311,13 @@ SKIP: {
|
||||
result => $want,
|
||||
test_name => '--ignore-databases and --ignore-tables d1.t1 (issue 806)',
|
||||
);
|
||||
|
||||
|
||||
test_so(
|
||||
filters => ['-t','d1.t3,d2.t1'],
|
||||
result => "d1.t3 d2.t1 ",
|
||||
test_name => '-t d1.t3,d2.t1 (issue 806)',
|
||||
);
|
||||
|
||||
|
||||
# ########################################################################
|
||||
# Issue 1161: make_filter() with only --tables db.foo filter does not work
|
||||
# ########################################################################
|
||||
@@ -315,26 +326,26 @@ SKIP: {
|
||||
# filter.
|
||||
$o = new OptionParser(description => 'SchemaIterator');
|
||||
$o->get_specs("$trunk/bin/pt-index-usage");
|
||||
|
||||
|
||||
test_so(
|
||||
filters => [qw(-t d1.t1)],
|
||||
result => "d1.t1 ",
|
||||
test_name => '-t d1.t1 (issue 1161)',
|
||||
);
|
||||
|
||||
|
||||
# ########################################################################
|
||||
# Issue 1193: Make SchemaIterator skip PERFORMANCE_SCHEMA
|
||||
# ########################################################################
|
||||
SKIP: {
|
||||
skip "Test for MySQL v5.5", 1 unless $sandbox_version ge '5.5';
|
||||
|
||||
|
||||
test_so(
|
||||
result => "", # hack, uses unlike instead
|
||||
unlike => qr/^performance_schema/,
|
||||
test_name => "performance_schema automatically ignored",
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
# ########################################################################
|
||||
# Getting CREATE TALBE (ddl).
|
||||
# ########################################################################
|
||||
@@ -343,7 +354,7 @@ SKIP: {
|
||||
result => "$out/mysql-user-ddl-$sandbox_version.txt",
|
||||
test_name => "Get CREATE TABLE with dbh",
|
||||
);
|
||||
|
||||
|
||||
$sb->wipe_clean($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,50 +530,49 @@ 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});
|
||||
|
||||
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`);
|
||||
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
|
||||
my $tmp_si2 = new SchemaIterator(
|
||||
dbh => $dbh3,
|
||||
OptionParser => $o,
|
||||
Quoter => $q,
|
||||
TableParser => $tp,
|
||||
# This is needed because the way we corrupt tables
|
||||
# accidentally removes the database from SHOW DATABASES
|
||||
db => 'bug_1047335_2',
|
||||
);
|
||||
|
||||
$w = '';
|
||||
{
|
||||
local $SIG{__WARN__} = sub { $w .= shift };
|
||||
1 while $tmp_si2->next();
|
||||
}
|
||||
|
||||
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 {
|
||||
$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`);
|
||||
}
|
||||
|
||||
$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";
|
||||
|
||||
diag(`cp $broken_frm $db_dir_2 2>&1`);
|
||||
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
|
||||
my $tmp_si2 = new SchemaIterator(
|
||||
dbh => $dbh3,
|
||||
OptionParser => $o,
|
||||
Quoter => $q,
|
||||
TableParser => $tp,
|
||||
# This is needed because the way we corrupt tables
|
||||
# accidentally removes the database from SHOW DATABASES
|
||||
db => 'bug_1047335_2',
|
||||
);
|
||||
|
||||
my $w = '';
|
||||
{
|
||||
local $SIG{__WARN__} = sub { $w .= shift };
|
||||
1 while $tmp_si2->next();
|
||||
}
|
||||
|
||||
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 {
|
||||
$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`);
|
||||
|
||||
# #############################################################################
|
||||
# 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,26 +1087,26 @@ 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});
|
||||
|
||||
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`);
|
||||
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
|
||||
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`);
|
||||
}
|
||||
|
||||
$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";
|
||||
|
||||
diag(`cp $broken_frm $db_dir_2 2>&1`);
|
||||
|
||||
$dbh3->do("FLUSH TABLES");
|
||||
|
||||
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`);
|
||||
|
||||
# #############################################################################
|
||||
# pt-duplicate-key-checker doesn't support triple quote in column name
|
||||
# https://bugs.launchpad.net/percona-toolkit/+bug/1462904
|
||||
|
@@ -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'
|
||||
|
Reference in New Issue
Block a user