Permalink
Browse files

MDEV 4427: query timeouts

Added MAX_STATEMENT_TIME user variable to automaticly kill queries after a given time limit has expired.

- Added timer functions based on pthread_cond_timedwait
- Added kill_handlerton() to signal storage engines about kill/timeout
- Added support for GRANT ... MAX_STATEMENT_TIME=#
- Copy max_statement_time to current user, if stored in mysql.user
- Added status variable max_statement_time_exceeded
- Added KILL_TIMEOUT
- Removed digest hash from performance schema tests as they change all the time.
- Updated test results that changed because of the new user variables or new fields in mysql.user

This functionallity is inspired by work done by Davi Arnaut at twitter.
Test case is copied from Davi's work.

Documentation can be found at
https://kb.askmonty.org/en/how-to-limittimeout-queries/

mysql-test/r/mysqld--help.result:
  Updated for new help message
mysql-test/suite/perfschema/r/all_instances.result:
  Added new mutex
mysql-test/suite/sys_vars/r/max_statement_time_basic.result:
  Added testing of max_statement_time
mysql-test/suite/sys_vars/t/max_statement_time_basic.test:
  Added testing of max_statement_time
mysql-test/t/max_statement_time.test:
  Added testing of max_statement_time
mysys/CMakeLists.txt:
  Added thr_timer
mysys/my_init.c:
mysys/mysys_priv.h:
  Added new mutex and condition variables
  Added new mutex and condition variables
mysys/thr_timer.c:
  Added timer functions based on pthread_cond_timedwait()
  This can be compiled with HAVE_TIMER_CREATE to benchmark agains timer_create()/timer_settime()
sql/lex.h:
  Added MAX_STATEMENT_TIME
sql/log_event.cc:
  Safety fix (timeout should be threated as an interrupted query)
sql/mysqld.cc:
  Added support for timers
  Added status variable max_statement_time_exceeded
sql/share/errmsg-utf8.txt:
  Added ER_QUERY_TIMEOUT
sql/signal_handler.cc:
  Added support for KILL_TIMEOUT
sql/sql_acl.cc:
  Added support for GRANT ... MAX_STATEMENT_TIME=#
  Copy max_statement_time to current user
sql/sql_class.cc:
  Added timer functionality to THD.
  Added thd_kill_timeout()
sql/sql_class.h:
  Added timer functionality to THD.
  Added KILL_TIMEOUT
  Added max_statement_time variable in similar manner as long_query_time was done.
sql/sql_connect.cc:
  Added handling of max_statement_time_exceeded
sql/sql_parse.cc:
  Added starting and stopping timers for queries.
sql/sql_show.cc:
  Added max_statement_time_exceeded for user/connects status in MariaDB 10.0
sql/sql_yacc.yy:
  Added support for GRANT ... MAX_STATEMENT_TIME=# syntax, to be enabled in 10.0
sql/structs.h:
  Added max_statement_time user resource
sql/sys_vars.cc:
  Added max_statement_time variables
mysql-test/suite/roles/create_and_drop_role_invalid_user_table.test
  Removed test as we require all fields in mysql.user table.
scripts/mysql_system_tables.sql
scripts/mysql_system_tables_data.sql
scripts/mysql_system_tables_fix.sql
  Updated mysql.user with new max_statement_time field
  • Loading branch information...
montywi committed Oct 7, 2014
1 parent 1a7d173 commit cc8aed3eb7a671d353c453a255b53e8d91d7fa73
Showing with 1,780 additions and 255 deletions.
  1. +1 −0 .gitignore
  2. +45 −0 include/thr_timer.h
  3. +6 −3 mysql-test/r/grant.result
  4. +147 −0 mysql-test/r/max_statement_time.result
  5. +6 −0 mysql-test/r/mysqld--help.result
  6. +3 −3 mysql-test/r/ps.result
  7. +2 −0 mysql-test/r/status_user.result
  8. +1 −0 mysql-test/r/system_mysql_db.result
  9. +1 −0 mysql-test/r/system_mysql_db_fix40123.result
  10. +1 −0 mysql-test/r/system_mysql_db_fix50030.result
  11. +1 −0 mysql-test/r/system_mysql_db_fix50117.result
  12. +4 −0 mysql-test/suite/funcs_1/r/is_columns_is.result
  13. +2 −0 mysql-test/suite/funcs_1/r/is_columns_mysql.result
  14. +33 −0 mysql-test/suite/funcs_1/r/is_user_privileges.result
  15. +4 −4 mysql-test/suite/perfschema/r/digest_table_full.result
  16. +6 −6 mysql-test/suite/perfschema/r/rpl_gtid_func.result
  17. +2 −2 mysql-test/suite/perfschema/r/start_server_no_digests.result
  18. +39 −39 mysql-test/suite/perfschema/r/statement_digest.result
  19. +41 −41 mysql-test/suite/perfschema/r/statement_digest_consumers.result
  20. +4 −4 mysql-test/suite/perfschema/r/statement_digest_long_query.result
  21. +1 −1 mysql-test/suite/perfschema/t/digest_table_full.test
  22. +2 −2 mysql-test/suite/perfschema/t/rpl_gtid_func.test
  23. +1 −1 mysql-test/suite/perfschema/t/start_server_no_digests.test
  24. +1 −1 mysql-test/suite/perfschema/t/statement_digest.test
  25. +2 −2 mysql-test/suite/perfschema/t/statement_digest_consumers.test
  26. +1 −1 mysql-test/suite/perfschema/t/statement_digest_long_query.test
  27. +0 −25 mysql-test/suite/roles/create_and_drop_role_invalid_user_table.result
  28. +0 −38 mysql-test/suite/roles/create_and_drop_role_invalid_user_table.test
  29. +4 −4 mysql-test/suite/roles/set_role-recursive.result
  30. +2 −2 mysql-test/suite/roles/set_role-simple.result
  31. +172 −0 mysql-test/suite/sys_vars/r/max_statement_time_basic.result
  32. +217 −0 mysql-test/suite/sys_vars/t/max_statement_time_basic.test
  33. +2 −2 mysql-test/t/grant.test
  34. +189 −0 mysql-test/t/max_statement_time.test
  35. +7 −1 mysys/CMakeLists.txt
  36. +12 −6 mysys/my_init.c
  37. +3 −3 mysys/mysys_priv.h
  38. +589 −0 mysys/thr_timer.c
  39. +2 −2 scripts/mysql_system_tables.sql
  40. +4 −4 scripts/mysql_system_tables_data.sql
  41. +1 −0 scripts/mysql_system_tables_fix.sql
  42. +1 −0 sql/lex.h
  43. +1 −0 sql/log_event.cc
  44. +22 −4 sql/mysqld.cc
  45. +2 −0 sql/share/errmsg-utf8.txt
  46. +4 −0 sql/signal_handler.cc
  47. +55 −4 sql/sql_acl.cc
  48. +32 −0 sql/sql_class.cc
  49. +40 −8 sql/sql_class.h
  50. +6 −1 sql/sql_connect.cc
  51. +4 −0 sql/sql_parse.cc
  52. +5 −0 sql/sql_show.cc
  53. +8 −0 sql/sql_yacc.yy
  54. +7 −2 sql/structs.h
  55. +23 −0 sql/sys_vars.cc
  56. +8 −33 sql/wsrep_mysqld.cc
  57. +1 −6 sql/wsrep_mysqld.h
View
@@ -75,6 +75,7 @@ mysql-test/mtr
mysql-test/mysql-test-run
mysql-test/var/
mysys/thr_lock
mysys/thr_timer
packaging/rpm-oel/mysql.spec
packaging/rpm-uln/mysql.10.0.11.spec
packaging/solaris/postinstall-solaris
View
@@ -0,0 +1,45 @@
/* Copyright (c) 2012 Monty Program Ab
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 later of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/* Prototypes when using thr_timer functions */
#ifndef _thr_timer_h
#define _thr_timer_h
#ifdef __cplusplus
extern "C" {
#endif
typedef struct st_timer {
struct timespec expire_time;
my_bool expired;
uint index_in_queue;
void (*func)(void*);
void *func_arg;
} thr_timer_t;
/* Main functions for library */
my_bool init_thr_timer(uint init_size_for_timer_queue);
void end_thr_timer();
/* Functions for handling one timer */
void thr_timer_init(thr_timer_t *timer_data, void(*function)(void*),
void *arg);
my_bool thr_timer_settime(thr_timer_t *timer_data, ulonglong microseconds);
void thr_timer_end(thr_timer_t *timer_data);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _thr_timer_h */
@@ -58,6 +58,7 @@ authentication_string
password_expired N
is_role N
default_role
max_statement_time 0.000000
show grants for mysqltest_1@localhost;
Grants for mysqltest_1@localhost
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
@@ -85,7 +86,7 @@ delete from mysql.user where user='mysqltest_1';
flush privileges;
delete from mysql.user where user='mysqltest_1';
flush privileges;
grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 10;
grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 10 max_statement_time 60;
select * from mysql.user where user="mysqltest_1";
Host localhost
User mysqltest_1
@@ -132,10 +133,11 @@ authentication_string
password_expired N
is_role N
default_role
max_statement_time 60.000000
show grants for mysqltest_1@localhost;
Grants for mysqltest_1@localhost
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10
grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 20 max_connections_per_hour 30;
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_STATEMENT_TIME 60.000000
grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 20 max_connections_per_hour 30 max_statement_time 0;
select * from mysql.user where user="mysqltest_1";
Host localhost
User mysqltest_1
@@ -182,6 +184,7 @@ authentication_string
password_expired N
is_role N
default_role
max_statement_time 0.000000
show grants for mysqltest_1@localhost;
Grants for mysqltest_1@localhost
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 30
@@ -0,0 +1,147 @@
# Test the MAX_STATEMENT_TIME option.
SET @@MAX_STATEMENT_TIME=2;
select @@max_statement_time;
@@max_statement_time
2.000000
SELECT SLEEP(1);
SLEEP(1)
0
SELECT SLEEP(3);
SLEEP(3)
1
SET @@MAX_STATEMENT_TIME=0;
SELECT SLEEP(1);
SLEEP(1)
0
SHOW STATUS LIKE "max_statement_time_exceeded";
Variable_name Value
Max_statement_time_exceeded 1
CREATE TABLE t1 (a INT, b VARCHAR(300)) engine=myisam;
INSERT INTO t1 VALUES (1, 'string');
SELECT 0;
0
0
# Test the MAX_STATEMENT_TIME option with SF (should have no effect).
CREATE PROCEDURE p1()
BEGIN
declare tmp int;
SET @@MAX_STATEMENT_TIME=0.0001;
SELECT COUNT(*) INTO tmp FROM t1 WHERE b LIKE '%z%';
SET @@MAX_STATEMENT_TIME=0;
END|
CREATE PROCEDURE p2()
BEGIN
SET @@MAX_STATEMENT_TIME=5;
END|
SELECT @@MAX_STATEMENT_TIME;
@@MAX_STATEMENT_TIME
0.000000
CALL p1();
CALL p2();
SELECT @@MAX_STATEMENT_TIME;
@@MAX_STATEMENT_TIME
5.000000
SET @@MAX_STATEMENT_TIME=0;
DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP TABLE t1;
# MAX_STATEMENT_TIME account resource
GRANT USAGE ON *.* TO user1@localhost WITH MAX_STATEMENT_TIME 1.005;
# con1
SELECT @@max_statement_time;
@@max_statement_time
1.005000
# restart and reconnect
set @global.userstat=1;
SELECT @@global.max_statement_time,@@session.max_statement_time;
@@global.max_statement_time @@session.max_statement_time
0.000000 1.005000
select sleep(100);
sleep(100)
1
SHOW STATUS LIKE "max_statement_time_exceeded";
Variable_name Value
Max_statement_time_exceeded 1
show grants for user1@localhost;
Grants for user1@localhost
GRANT USAGE ON *.* TO 'user1'@'localhost' WITH MAX_STATEMENT_TIME 1.005000
set @global.userstat=0;
DROP USER user1@localhost;
# MAX_STATEMENT_TIME status variables.
flush status;
SET @@max_statement_time=0;
SELECT CONVERT(VARIABLE_VALUE, UNSIGNED) INTO @time_exceeded
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'max_statement_time_exceeded';
SET @@max_statement_time=0.5;
SELECT SLEEP(2);
SLEEP(2)
1
SHOW STATUS LIKE '%timeout%';
Variable_name Value
Ssl_default_timeout 0
Ssl_session_cache_timeouts 0
SET @@max_statement_time=0;
# Ensure that the counters for:
# - statements that exceeded their maximum execution time
# are incremented.
SELECT 1 AS STATUS FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'max_statement_time_exceeded'
AND CONVERT(VARIABLE_VALUE, UNSIGNED) > @time_exceeded;
STATUS
1
# Check that the appropriate error status is set.
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);
START TRANSACTION;
SELECT * FROM t1 FOR UPDATE;
a
1
SET @@SESSION.max_statement_time = 0.5;
UPDATE t1 SET a = 2;
ERROR 70100: Query execution was interrupted (max_statement_time exceeded)
SHOW WARNINGS;
Level Code Message
Error 1967 Query execution was interrupted (max_statement_time exceeded)
ROLLBACK;
DROP TABLE t1;
# Test interaction with lock waits.
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);
SET @@SESSION.max_statement_time= 0.5;
LOCK TABLES t1 WRITE;
SELECT @@SESSION.max_statement_time;
@@SESSION.max_statement_time
0.500000
LOCK TABLES t1 READ;
ERROR 70100: Query execution was interrupted (max_statement_time exceeded)
UNLOCK TABLES;
BEGIN;
SELECT * FROM t1;
a
1
ALTER TABLE t1 ADD COLUMN b INT;
ERROR 70100: Query execution was interrupted (max_statement_time exceeded)
ROLLBACK;
SELECT GET_LOCK('lock', 1);
GET_LOCK('lock', 1)
1
SELECT GET_LOCK('lock', 1);
GET_LOCK('lock', 1)
NULL
SELECT RELEASE_LOCK('lock');
RELEASE_LOCK('lock')
1
DROP TABLE t1;
@@ -422,6 +422,11 @@ The following options may be given as the first argument:
value are used; the rest are ignored)
--max-sp-recursion-depth[=#]
Maximum stored procedure recursion depth
--max-statement-time=#
A SELECT query that have taken more than
max_statement_time seconds will be aborted. The argument
will be treated as a decimal value with microsecond
precision. A value of 0 (default) means no timeout
--max-tmp-tables=# Maximum number of temporary tables a client can keep open
at a time
--max-user-connections=#
@@ -1196,6 +1201,7 @@ max-relay-log-size 1073741824
max-seeks-for-key 18446744073709551615
max-sort-length 1024
max-sp-recursion-depth 0
max-statement-time 0
max-tmp-tables 32
max-user-connections 0
max-write-lock-count 18446744073709551615
View
@@ -1202,13 +1202,13 @@ SET @aux= "SELECT COUNT(*)
prepare my_stmt from @aux;
execute my_stmt;
COUNT(*)
45
46
execute my_stmt;
COUNT(*)
45
46
execute my_stmt;
COUNT(*)
45
46
deallocate prepare my_stmt;
drop procedure if exists p1|
drop table if exists t1|
@@ -25,6 +25,7 @@ DENIED_CONNECTIONS bigint(21) NO 0
LOST_CONNECTIONS bigint(21) NO 0
ACCESS_DENIED bigint(21) NO 0
EMPTY_QUERIES bigint(21) NO 0
MAX_STATEMENT_TIME_EXCEEDED bigint(21) NO 0
show columns from information_schema.user_statistics;
Field Type Null Key Default Extra
USER varchar(128) NO
@@ -50,6 +51,7 @@ DENIED_CONNECTIONS bigint(21) NO 0
LOST_CONNECTIONS bigint(21) NO 0
ACCESS_DENIED bigint(21) NO 0
EMPTY_QUERIES bigint(21) NO 0
MAX_STATEMENT_TIME_EXCEEDED bigint(21) NO 0
show columns from information_schema.index_statistics;
Field Type Null Key Default Extra
TABLE_SCHEMA varchar(192) NO
@@ -131,6 +131,7 @@ user CREATE TABLE `user` (
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`is_role` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`default_role` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`max_statement_time` decimal(12,6) NOT NULL DEFAULT '0.000000',
PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
show create table func;
@@ -131,6 +131,7 @@ user CREATE TABLE `user` (
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`is_role` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`default_role` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`max_statement_time` decimal(12,6) NOT NULL DEFAULT '0.000000',
PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
show create table func;
@@ -131,6 +131,7 @@ user CREATE TABLE `user` (
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`is_role` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`default_role` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`max_statement_time` decimal(12,6) NOT NULL DEFAULT '0.000000',
PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
show create table func;
@@ -131,6 +131,7 @@ user CREATE TABLE `user` (
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`is_role` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`default_role` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`max_statement_time` decimal(12,6) NOT NULL DEFAULT '0.000000',
PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
show create table func;
@@ -36,6 +36,7 @@ def information_schema CLIENT_STATISTICS CPU_TIME 6 0 NO double NULL NULL 21 NUL
def information_schema CLIENT_STATISTICS DENIED_CONNECTIONS 20 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema CLIENT_STATISTICS EMPTY_QUERIES 23 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema CLIENT_STATISTICS LOST_CONNECTIONS 21 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema CLIENT_STATISTICS MAX_STATEMENT_TIME_EXCEEDED 24 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema CLIENT_STATISTICS OTHER_COMMANDS 17 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema CLIENT_STATISTICS ROLLBACK_TRANSACTIONS 19 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema CLIENT_STATISTICS ROWS_DELETED 12 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
@@ -408,6 +409,7 @@ def information_schema USER_STATISTICS CPU_TIME 6 0 NO double NULL NULL 21 NULL
def information_schema USER_STATISTICS DENIED_CONNECTIONS 20 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema USER_STATISTICS EMPTY_QUERIES 23 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema USER_STATISTICS LOST_CONNECTIONS 21 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema USER_STATISTICS MAX_STATEMENT_TIME_EXCEEDED 24 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema USER_STATISTICS OTHER_COMMANDS 17 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema USER_STATISTICS ROLLBACK_TRANSACTIONS 19 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
def information_schema USER_STATISTICS ROWS_DELETED 12 0 NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select
@@ -533,6 +535,7 @@ NULL information_schema CLIENT_STATISTICS DENIED_CONNECTIONS bigint NULL NULL NU
NULL information_schema CLIENT_STATISTICS LOST_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS ACCESS_DENIED bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS MAX_STATEMENT_TIME_EXCEEDED bigint NULL NULL NULL NULL bigint(21)
3.0000 information_schema COLLATIONS COLLATION_NAME varchar 32 96 utf8 utf8_general_ci varchar(32)
3.0000 information_schema COLLATIONS CHARACTER_SET_NAME varchar 32 96 utf8 utf8_general_ci varchar(32)
NULL information_schema COLLATIONS ID bigint NULL NULL NULL NULL bigint(11)
@@ -906,6 +909,7 @@ NULL information_schema USER_STATISTICS DENIED_CONNECTIONS bigint NULL NULL NULL
NULL information_schema USER_STATISTICS LOST_CONNECTIONS bigint NULL NULL NULL NULL bigint(21)
NULL information_schema USER_STATISTICS ACCESS_DENIED bigint NULL NULL NULL NULL bigint(21)
NULL information_schema USER_STATISTICS EMPTY_QUERIES bigint NULL NULL NULL NULL bigint(21)
NULL information_schema USER_STATISTICS MAX_STATEMENT_TIME_EXCEEDED bigint NULL NULL NULL NULL bigint(21)
3.0000 information_schema VIEWS TABLE_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512)
3.0000 information_schema VIEWS TABLE_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64)
3.0000 information_schema VIEWS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
@@ -227,6 +227,7 @@ def mysql user is_role 44 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum
def mysql user Lock_tables_priv 21 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
def mysql user max_connections 39 0 NO int NULL NULL 10 0 NULL NULL NULL int(11) unsigned select,insert,update,references
def mysql user max_questions 37 0 NO int NULL NULL 10 0 NULL NULL NULL int(11) unsigned select,insert,update,references
def mysql user max_statement_time 46 0.000000 NO decimal NULL NULL 12 6 NULL NULL NULL decimal(12,6) select,insert,update,references
def mysql user max_updates 38 0 NO int NULL NULL 10 0 NULL NULL NULL int(11) unsigned select,insert,update,references
def mysql user max_user_connections 40 0 NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references
def mysql user Password 3 NO char 41 41 NULL NULL NULL latin1 latin1_bin char(41) select,insert,update,references
@@ -568,3 +569,4 @@ NULL mysql user max_user_connections int NULL NULL NULL NULL int(11)
3.0000 mysql user password_expired enum 1 3 utf8 utf8_general_ci enum('N','Y')
3.0000 mysql user is_role enum 1 3 utf8 utf8_general_ci enum('N','Y')
3.0000 mysql user default_role char 80 240 utf8 utf8_bin char(80)
NULL mysql user max_statement_time decimal NULL NULL NULL NULL decimal(12,6)
Oops, something went wrong.

0 comments on commit cc8aed3

Please sign in to comment.